Daten lesen
Kurzantwort: Die response-Liste bestimmt, was zurückkommt — und was der
Server überhaupt aus der Datenbank holt. Sie ist Pflicht. + liefert alle
einfachen Felder, * zusätzlich alle Referenzen mit ihrer ID, und ein Objekt
mit field baut eine Referenz gezielt aus.
Die vier Bausteine
Abschnitt betitelt „Die vier Bausteine“{ "response": ["id", "name", "+", "*", { "field": "orders", "response": ["id"] }], "exclude": ["internalNote"]}| Eintrag | Bedeutung |
|---|---|
"name" | genau dieses Feld |
"+" | alle einfachen Felder (Text, Zahl, Datum, Boolean) |
"*" | alle einfachen Felder plus alle Referenzen, letztere nur mit id |
{ "field": …, "response": […] } | eine Referenz ausbauen |
exclude | einzelne Felder aus + oder * herausnehmen |
Vom Groben zum Feinen
Abschnitt betitelt „Vom Groben zum Feinen“Erst schauen, was es gibt:
curl -X GET ".../crm/customer/read/$ID" -H "Authorization: Bearer $TOKEN"Das entspricht ["*"] und zeigt alle verfügbaren Felder samt Referenz-IDs.
Dann gezielt anfordern:
{ "response": ["id", "name", "email", "createdOn"] }Das ist die Form, die in Produktion gehört: Sie überträgt genau das Nötige und bleibt stabil, wenn das Modell um Felder wächst.
Referenzen ausbauen
Abschnitt betitelt „Referenzen ausbauen“Eine Einzelreferenz:
{ "response": [ "id", "name", { "field": "address", "response": ["street", "city", "zip"] } ]}Eine Liste — mit eigenem Filter, eigener Sortierung, eigener Seitengröße:
{ "response": [ "id", "name", { "field": "orders", "response": ["id", "total", "status"], "parameter": { "limit": 10, "order": [{ "field": "total", "order": "DESC" }], "query": { "type": "AND", "filter": [{ "key": "status", "value": "OPEN", "param": "EQ" }] } } } ]}Der Bezug zum Elternobjekt wird automatisch ergänzt — Sie filtern nur auf das, was Sie zusätzlich einschränken wollen.
Verschachtelung ist beliebig tief:
{ "response": [ "id", { "field": "orders", "response": [ "id", { "field": "items", "response": ["+"] } ] } ]}Was + und * wirklich tun
Abschnitt betitelt „Was + und * wirklich tun“flowchart LR
A["response"] --> B{"Eintrag"}
B -->|'+'| C["alle einfachen Felder"]
B -->|'*'| D["einfache Felder<br/>+ Referenzen mit nur 'id'"]
B -->|"'name*'"| E["alle Felder, die mit 'name' beginnen"]
B -->|"'*Datum'"| F["alle Felder, die auf 'Datum' enden"]
B -->|"{ field }"| G["Referenz mit eigener Auswahl"]
Auch mit * bekommen Sie Referenzen nur als ID, nie als vollständiges
Objekt. Das ist Absicht: Sonst zöge ein einziger Request unabsehbar viele Daten
nach. Wollen Sie mehr, bauen Sie die Referenz ausdrücklich aus.
Häufige Fehlgriffe
Abschnitt betitelt „Häufige Fehlgriffe“| Was passiert | Ursache | Lösung |
|---|---|---|
400, response | response fehlt oder ist leer | immer angeben, notfalls ["id"] |
| Feld fehlt in der Antwort, obwohl angefordert | keine Leseberechtigung für dieses Feld | Rechte prüfen über /cias/fetch |
Referenz ist { "id": "…" } statt eines Objekts | mit * angefordert | Referenz ausdrücklich ausbauen |
| Antwort dauert lange | zu tief verschachtelt oder ohne limit in einer Listenreferenz | Tiefe reduzieren, limit setzen |
Feld erscheint trotz exclude | es wurde zusätzlich namentlich genannt | exclude wirkt nur auf Wildcards |
Zwei Muster, die sich bewährt haben
Abschnitt betitelt „Zwei Muster, die sich bewährt haben“Liste und Detail trennen. In der Übersicht nur die angezeigten Spalten lesen, beim Öffnen eines Eintrags nachladen:
// Liste{ "response": ["id", "name", "status"], "parameter": { "limit": 25 } }
// Detail{ "response": ["+", { "field": "orders", "response": ["id", "total"] }] }Nicht auf Feldreihenfolge oder Vollständigkeit bauen. Die Antwort enthält, was erlaubt und angefordert ist. Behandeln Sie fehlende Felder im Client als Normalfall, nicht als Fehler.
Antwortformat
Abschnitt betitelt „Antwortformat“Einzelobjekt:
{ "data": { "id": "…", "name": "…" }, "meta": { "error": false } }Liste:
{ "data": [ { "id": "…" } ], "meta": { "totalCount": 42, "currentPage": 0, "currentPageSize": 25, "currentLimit": 25 }}Mehr zur Mechanik dahinter unter Response Requests.