Expansió d’objectes relacionats
Els objectes fan referència als objectes relacionats per ID: una entrada té owner_id i collection_id. Quan
necessiteu l’objecte relacionat en si, no cal fer una segona sol·licitud. Demaneu-lo amb expand[] i arribarà a la
mateixa resposta, dins d’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’exemple està escurçat: un objecte expandit té tots els camps de la seva pròpia operació de lectura. Els camps d’ID
es queden on són, de manera que el codi que no fa servir expand[] veu la mateixa resposta que abans.
Aquestes operacions expandeixen objectes relacionats. Un camí amb un punt expandeix una relació de l’objecte expandit;
per exemple, collection.default_owner és el responsable per defecte de la col·lecció de l’entrada.
| Operació | Camins |
|---|---|
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 |
Cada relació arriba amb la forma de l’operació que llegeix l’objecte relacionat:
| Relació | Què arriba a expanded |
|---|---|
collection | La col·lecció, com a GET /v1/collections. |
owner, verifiers, default_owner | L’usuari, com a GET /v1/users: la fila completa per a qui fa la crida i pot gestionar usuaris, la fila breu (brief=true, només usuaris actius) per a la resta. verifiers és una llista en l’ordre de verifier_ids. |
folders | Les carpetes de l’entrada dins de la seva col·lecció que pot veure qui fa la crida, com a GET /v1/folders/{folder_id} sense path. |
card | L’entrada, com un element de GET /v1/cards. |
event | L’esdeveniment, com a GET /v1/webhook-events/{event_id}. |
En llistes
En una llista, comenceu el camí amb data.: s’aplica a cada element de la pàgina. És igual per a una llista que
retorna una matriu, com ara GET /v1/cards, i per a una llista que desa els elements en un camp, com ara jobs de
GET /v1/jobs o items del registre de lliuraments.
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 carrega cada relació alhora per a tota la pàgina, de manera que expandir una llista costa aproximadament el
mateix que una sol·licitud addicional, no una per element. El cursor de la pàgina següent no depèn d’expand[], de
manera que a la pàgina següent podeu demanar altres relacions.
Regles
- Fins a 10 camins per sol·licitud, cadascun amb un màxim de 2 segments de profunditat:
data.owneren una llista,collection.default_owneren un objecte. - Un camí desconegut, més de 10 camins o un camí de més de 2 segments retorna
400amb el codiapi.expand_invalid.details.pathindica el camí idetails.reasondiu què hi falla:unknown_path,too_deepotoo_many_paths. - Un objecte relacionat només s’expandeix per a qui el podria llegir amb la seva pròpia sol·licitud. La clau necessita
l’àmbit d’aquella operació:
cards:readper a entrades, col·leccions i carpetes,users:readper a usuaris,webhooks:manageper a esdeveniments. L’objecte també ha de ser visible per a qui fa la crida; per exemple, ha de ser dins de les col·leccions d’una clau limitada a algunes col·leccions. Si no, la relació s’expandeix com anull, i averifiersl’usuari ésnullal seu lloc. El seu ID es continua retornant.foldersnomés llista les carpetes que pot veure qui fa la crida. - Una clau de font personalitzada no llegeix entrades, de manera que amb aquesta clau el
cardd’un document sempre ésnull. Per obtenir l’entrada, crideu l’API d’enviament amb una clau d’API que tingui els àmbitsimport:writeicards:read. - Un esdeveniment de fa més de 30 dies i l’esdeveniment d’un lliurament de prova s’expandeixen com a
null. expand[]només afegeix dades a la resposta. No canvia mai el que fa la sol·licitud.