Ανάπτυξη συσχετισμένων αντικειμένων
Τα αντικείμενα παραπέμπουν σε συσχετισμένα αντικείμενα μέσω ID: μια κάρτα έχει owner_id και collection_id. Όταν
χρειάζεστε το ίδιο το συσχετισμένο αντικείμενο, δεν χρειάζεται να στείλετε δεύτερο αίτημα. Ζητήστε το με expand[]
και θα έρθει στην ίδια απόκριση, μέσα στο 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"}
}
}
Το παράδειγμα είναι συντομευμένο: ένα αναπτυγμένο αντικείμενο έχει όλα τα πεδία της δικής του λειτουργίας ανάγνωσης.
Τα πεδία ID μένουν στη θέση τους, οπότε ο κώδικας που δεν χρησιμοποιεί expand[] βλέπει την ίδια απόκριση όπως πριν.
Αυτές οι λειτουργίες αναπτύσσουν συσχετισμένα αντικείμενα. Μια διαδρομή με τελεία αναπτύσσει μια συσχέτιση του
αναπτυγμένου αντικειμένου, για παράδειγμα το collection.default_owner είναι ο προεπιλεγμένος υπεύθυνος της συλλογής
της κάρτας.
| Λειτουργία | Διαδρομές |
|---|---|
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 |
Κάθε συσχέτιση έρχεται στη μορφή της λειτουργίας που διαβάζει το συσχετισμένο αντικείμενο:
| Συσχέτιση | Τι έρχεται στο expanded |
|---|---|
collection | Η συλλογή, όπως στο GET /v1/collections. |
owner, verifiers, default_owner | Ο χρήστης, όπως στο GET /v1/users: η πλήρης εγγραφή, αν ο πελάτης που καλεί το API μπορεί να διαχειρίζεται χρήστες, η σύντομη εγγραφή (brief=true, μόνο ενεργοί χρήστες) για τους υπόλοιπους. Το verifiers είναι λίστα με τη σειρά του verifier_ids. |
folders | Οι φάκελοι της κάρτας στη συλλογή της που μπορεί να δει ο πελάτης που καλεί το API, όπως στο GET /v1/folders/{folder_id} χωρίς path. |
card | Η κάρτα, ως στοιχείο του GET /v1/cards. |
event | Το συμβάν, όπως στο GET /v1/webhook-events/{event_id}. |
Σε λίστες
Για μια λίστα, ξεκινήστε τη διαδρομή με data.: ισχύει για κάθε στοιχείο της σελίδας. Το ίδιο ισχύει για μια λίστα
που επιστρέφει πίνακα, όπως το GET /v1/cards, και για μια λίστα που κρατά τα στοιχεία της σε ένα πεδίο, όπως το
jobs του GET /v1/jobs ή το items του αρχείου καταγραφής παραδόσεων.
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 φορτώνει κάθε συσχέτιση για ολόκληρη τη σελίδα με μία κίνηση, οπότε η ανάπτυξη μιας λίστας κοστίζει περίπου
όσο ένα επιπλέον αίτημα και όχι ένα ανά στοιχείο. Ο δρομέας της επόμενης σελίδας δεν εξαρτάται από το expand[],
οπότε στην επόμενη σελίδα μπορείτε να ζητήσετε άλλες συσχετίσεις.
Κανόνες
- Έως 10 διαδρομές ανά αίτημα, η καθεμία με βάθος έως 2 τμημάτων:
data.ownerσε μια λίστα,collection.default_ownerσε ένα αντικείμενο. - Μια άγνωστη διαδρομή, περισσότερες από 10 διαδρομές ή μια διαδρομή βαθύτερη από 2 τμήματα επιστρέφει
400με τον κωδικόapi.expand_invalid. Τοdetails.pathονομάζει τη διαδρομή και τοdetails.reasonλέει τι είναι λάθος:unknown_path,too_deepήtoo_many_paths. - Ένα συσχετισμένο αντικείμενο αναπτύσσεται μόνο για πελάτη που θα μπορούσε να το διαβάσει με δικό του αίτημα. Το
κλειδί χρειάζεται την εμβέλεια εκείνης της λειτουργίας:
cards:readγια κάρτες, συλλογές και φακέλους,users:readγια χρήστες,webhooks:manageγια συμβάντα. Το αντικείμενο πρέπει επίσης να είναι ορατό στον πελάτη, για παράδειγμα μέσα στις συλλογές ενός κλειδιού που είναι περιορισμένο σε ορισμένες συλλογές. Διαφορετικά η συσχέτιση αναπτύσσεται ωςnullκαι στοverifiersστη θέση του χρήστη βρίσκεταιnull. Το ID του επιστρέφεται κανονικά. Τοfoldersπεριέχει μόνο τους φακέλους που μπορεί να δει ο πελάτης. - Ένα κλειδί προσαρμοσμένης πηγής δεν διαβάζει κάρτες, οπότε με αυτό το
cardενός εγγράφου είναι πάνταnull. Για να λάβετε την κάρτα, καλέστε το API αποστολής (push) με ένα κλειδί API που έχει τις εμβέλειεςimport:writeκαιcards:read. - Ένα συμβάν παλαιότερο από 30 ημέρες και το συμβάν μιας δοκιμαστικής παράδοσης αναπτύσσονται ως
null. - Το
expand[]μόνο προσθέτει δεδομένα στην απόκριση. Δεν αλλάζει ποτέ τι κάνει το αίτημα.