Espandere gli oggetti correlati
Gli oggetti fanno riferimento agli oggetti correlati tramite ID: una scheda ha owner_id e collection_id. Quando ti
serve l’oggetto correlato vero e proprio, non devi fare una seconda richiesta. Chiedilo con expand[] e arriva nella
stessa risposta, dentro expanded:
curl -G https://api.sursa.com/v1/cards/3f2c9a7e-5b1d-4c8e-9f0a-1b2c3d4e5f60 \
-H "Authorization: Bearer $SURSA_API_KEY" \
--data-urlencode "expand[]=owner" \
--data-urlencode "expand[]=collection"{
"id": "3f2c9a7e-5b1d-4c8e-9f0a-1b2c3d4e5f60",
"title": "Refund policy",
"owner_id": 7,
"collection_id": 3,
"expanded": {
"owner": {"id": 7, "username": "anna", "display_name": "Anna Petrova", "role": "editor"},
"collection": {"id": 3, "name": "support", "title": "Support"}
}
}
L’esempio è abbreviato: un oggetto espanso ha tutti i campi della sua operazione di lettura. I campi con gli ID restano
dove sono, quindi il codice che non usa expand[] vede la stessa risposta di prima.
Queste operazioni espandono gli oggetti correlati. Un percorso con un punto espande un collegamento dell’oggetto
espanso: per esempio collection.default_owner è il responsabile predefinito della raccolta della scheda.
| Operazione | Percorsi |
|---|---|
GET /v1/cards/{card_id}, GET /v1/cards-by-external-id/{external_id} | collection, owner, verifiers, folders, collection.default_owner |
GET /v1/cards | data.collection, data.owner, data.verifiers, data.folders |
GET /v1/jobs/{job_id} | card, card.collection, card.owner, card.verifiers, card.folders |
GET /v1/jobs | data.card |
GET /v1/webhooks/{webhook_id}/deliveries/{delivery_id} | event |
GET /v1/webhooks/{webhook_id}/deliveries | data.event |
GET /v1/push/sources/{source_id}/documents/{external_id} | card, card.collection, card.owner, card.verifiers, card.folders |
GET /v1/push/sources/{source_id}/syncs/{sync_number}/documents | data.card |
Ogni collegamento arriva nella forma dell’operazione che legge l’oggetto correlato:
| Collegamento | Cosa arriva in expanded |
|---|---|
collection | La raccolta, come in GET /v1/collections. |
owner, verifiers, default_owner | L’utente, come in GET /v1/users: la riga completa per chi effettua la chiamata e può gestire gli utenti, la riga sintetica (brief=true, solo utenti attivi) per gli altri. verifiers è un elenco nell’ordine di verifier_ids. |
folders | Le cartelle della scheda nella sua raccolta che chi effettua la chiamata può vedere, come in GET /v1/folders/{folder_id} senza path. |
card | La scheda, come elemento di GET /v1/cards. |
event | L’evento, come in GET /v1/webhook-events/{event_id}. |
Negli elenchi
Per un elenco, inizia il percorso con data.: si applica a ogni elemento della pagina. Vale sia per un elenco che
restituisce un array, come GET /v1/cards, sia per un elenco che tiene i suoi elementi in un campo, come jobs di
GET /v1/jobs o items del registro delle consegne.
curl -G https://api.sursa.com/v1/cards \
-H "Authorization: Bearer $SURSA_API_KEY" \
--data-urlencode "limit=50" \
--data-urlencode "expand[]=data.owner" \
--data-urlencode "expand[]=data.collection"Sursa carica ogni collegamento per l’intera pagina in una volta, quindi espandere un elenco costa più o meno quanto una
richiesta in più, non una per elemento. Il cursore della pagina successiva non dipende da expand[], quindi nella
pagina successiva puoi chiedere altri collegamenti.
Regole
- Fino a 10 percorsi per richiesta, ciascuno con al massimo 2 segmenti di profondità:
data.ownerin un elenco,collection.default_ownersu un oggetto. - Un percorso sconosciuto, più di 10 percorsi o un percorso con più di 2 segmenti restituiscono
400con il codiceapi.expand_invalid.details.pathindica il percorso edetails.reasondice cosa non va:unknown_path,too_deepotoo_many_paths. - Un oggetto correlato viene espanso solo se chi effettua la chiamata potrebbe leggerlo con una propria richiesta. La
chiave ha bisogno dell’ambito di quell’operazione:
cards:readper schede, raccolte e cartelle,users:readper gli utenti,webhooks:manageper gli eventi. L’oggetto deve anche essere visibile a chi effettua la chiamata, per esempio all’interno delle raccolte di una chiave limitata ad alcune raccolte. Altrimenti il collegamento viene espanso comenull, e inverifiersal posto dell’utente c’ènull. Il suo ID viene comunque restituito.folderselenca solo le cartelle che chi effettua la chiamata può vedere. - Una chiave di fonte personalizzata non legge le schede, quindi con questa chiave
carddi un documento è semprenull. Per ottenere la scheda, chiama l’API di invio con una chiave API che abbia gli ambitiimport:writeecards:read. - Un evento più vecchio di 30 giorni e l’evento di una consegna di test vengono espansi come
null. expand[]aggiunge solo dati alla risposta. Non cambia mai ciò che fa la richiesta.