REST (Representational State Transfer) bietet einen grundlegenden Architekturstil für das Erstellen von Webdiensten. Er lässt jedoch viele Aspekte der Anfrage- und Antwortformatierung undefiniert. Diese Mehrdeutigkeit kann zu Inkonsistenzen, einem erhöhten Entwicklungsaufwand und einer steileren Lernkurve für API-Nutzer führen. Hier kommt JSON:API ins Spiel, eine Spezifikation, die einen standardisierten, konventionsbasierten Ansatz für das Erstellen von APIs in JSON bietet.
Dieser umfassende Leitfaden bietet einen tiefen Einblick in die JSON:API-Spezifikation und untersucht ihre Kernkonzepte, ihre Struktur und ihre leistungsstarken Funktionen. Wir werden ihre Mechanismen zum Abrufen, Erstellen, Aktualisieren und Löschen von Ressourcen, zum Verwalten von Beziehungen, zum Behandeln von Fehlern und zum Optimieren der Datenübertragung untersuchen und Sie mit dem Wissen ausstatten, um robuste und effiziente APIs zu entwerfen und zu nutzen.
Benötigen Sie eine integrierte All-in-One-Plattform für Ihr Entwicklerteam, um mit maximaler Produktivität zusammenzuarbeiten?
Apidog erfüllt alle Ihre Anforderungen und ersetzt Postman zu einem viel günstigeren Preis!
Warum JSON:API? Erklärt:
Bevor wir uns mit den technischen Feinheiten befassen, ist es wichtig, die Probleme zu verstehen, die JSON:API lösen soll. Ohne eine gemeinsame Konvention verbringen API-Entwickler oft viel Zeit mit der Diskussion über:
- Payload-Struktur: Wie sollten Ressourcen und ihre Attribute dargestellt werden?
- Beziehungsdarstellung: Wie sollten Verknüpfungen zwischen verschiedenen Ressourcen vermittelt werden?
- Datenabrufstrategien: Wie können Clients bestimmte Felder anfordern, zugehörige Ressourcen einbeziehen, sortieren, paginieren und Daten filtern?
- Fehlermeldung: Welches Format sollten Fehlermeldungen haben?
JSON:API geht diese Probleme an, indem es ein klares, konsistentes Format für Anfragen und Antworten definiert. Diese Standardisierung bietet mehrere wesentliche Vorteile:
- Reduziertes Bikeshedding: Indem JSON:API Antworten auf häufige Designfragen liefert, können sich Teams auf die Kernlogik ihrer Anwendungen konzentrieren, anstatt über API-Design-Kleinigkeiten zu diskutieren.
- Verbesserte Produktivität: Standardisierte Formate bedeuten weniger benutzerdefinierten Code für API-Produzenten und -Nutzer. Client-Bibliotheken können entwickelt werden, um einen Großteil des Boilerplates für die Interaktion mit jedem JSON:API-konformen Dienst zu verarbeiten.
- Verbesserte Auffindbarkeit und Benutzerfreundlichkeit: Konsistente Linkstrukturen und eine klare Abgrenzung von Ressourcen und Beziehungen erleichtern das Verständnis und die Navigation in APIs.
- Optimierte Datenübertragung: Funktionen wie spärliche Feldmengen und zusammengesetzte Dokumente ermöglichen es Clients, nur die Daten anzufordern, die sie benötigen, wodurch die Payload-Größen minimiert und die Anzahl der HTTP-Anfragen reduziert wird.
- Einfacheres Caching: Die Spezifikation fördert die Verwendung von Standard-HTTP-Caching-Mechanismen.
- Sprachunabhängig: Da es auf JSON basiert, ist es von Natur aus sprachunabhängig und erleichtert die breite Akzeptanz in verschiedenen Technologie-Stacks.
Kernkonzepte: Die Bausteine eines JSON:API-Dokuments
Im Kern dreht sich JSON:API um das Konzept der Ressourcen. Eine Ressource ist ein einzelner Datensatz eines bestimmten Typs, z. B. ein "Artikel", ein "Benutzer" oder ein "Produkt". Jedes JSON:API-Dokument, ob Anfrage oder Antwort, hält sich an eine bestimmte Struktur.
Die Dokumentstruktur: Elemente der obersten Ebene
Ein JSON:API-Dokument ist ein JSON-Objekt, das mindestens eines der folgenden Elemente der obersten Ebene enthalten muss:
data
: Die "primären Daten" des Dokuments. Dies kann sein:- Ein einzelnes Ressourcenobjekt (z. B. beim Abrufen eines bestimmten Artikels).
- Ein Array von Ressourcenobjekten (z. B. beim Abrufen einer Sammlung von Artikeln).
- Ein einzelnes Ressourcenbezeichnerobjekt (zur Darstellung einer Eins-zu-Eins-Beziehung).
- Ein Array von Ressourcenbezeichnerobjekten (zur Darstellung einer Eins-zu-Viele-Beziehung).
null
(z. B. wenn eine Eins-zu-Eins-Beziehung leer ist oder eine Anfrage nach einer einzelnen Ressource, die nicht existiert).- Ein leeres Array
[]
(z. B. wenn eine Eins-zu-Viele-Beziehung leer ist oder eine Anfrage nach einer Sammlung keine Ergebnisse liefert). errors
: Ein Array von Fehlerobjekten, das Details zu Verarbeitungsfehlern liefert. Das Elementdata
darf nicht vorhanden sein, wennerrors
vorhanden ist.meta
: Ein Meta-Objekt, das nicht standardmäßige Meta-Informationen enthält, die nicht in den Rest der Spezifikation passen.
Darüber hinaus kann ein Dokument diese Elemente der obersten Ebene enthalten:
jsonapi
: Ein Objekt, das die Implementierung des Servers beschreibt. Es kannversion
(die höchste unterstützte JSON:API-Version),ext
(ein Array von URIs für angewendete Erweiterungen) undprofile
(ein Array von URIs für angewendete Profile) enthalten.links
: Ein Links-Objekt, das sich auf die primären Daten bezieht. Dies kann Selbst-Links, Links zu zugehörigen Ressourcen und Paginierungs-Links umfassen.included
: Ein Array von Ressourcenobjekten, die sich auf die primären Daten und/oder aufeinander beziehen. Dies wird für "zusammengesetzte Dokumente" verwendet, um die Anzahl der HTTP-Anfragen zu reduzieren, indem zugehörige Ressourcen nebenbei geladen werden.
Ressourcenobjekte: Ihre Daten darstellen
Ein Ressourcenobjekt ist der Eckpfeiler von JSON:API und muss Folgendes enthalten:
type
: Eine Zeichenfolge, die den Typ der Ressource identifiziert (z. B."articles"
,"users"
). Dies hilft, Ressourcen zu benennen und ID-Kollisionen zwischen verschiedenen Typen zu vermeiden.id
: Eine Zeichenfolge, die die Ressource innerhalb ihres Typs eindeutig identifiziert.
Ein Ressourcenobjekt kann auch Folgendes enthalten:
attributes
: Ein Attribute-Objekt, das datenspezifisch für die Ressource ist. Schlüssel imattributes
-Objekt stellen die Eigenschaften der Ressource dar (z. B."title"
,"body"
für einen Artikel). Beziehungen dürfen nicht imattributes
-Objekt dargestellt werden.relationships
: Ein Beziehungs-Objekt, das die Verbindungen zwischen der Ressource und anderen Ressourcen beschreibt.links
: Ein Links-Objekt, das Links enthält, die sich auf die Ressource beziehen, z. B. einenself
-Link, der auf die kanonische URL der Ressource verweist.meta
: Ein Meta-Objekt, das nicht standardmäßige Meta-Informationen über die Ressource enthält.
Beispiel für ein Ressourcenobjekt:JSON
{
"type": "articles",
"id": "1",
"attributes": {
"title": "JSON:API Unveiled",
"body": "A deep dive into the specification...",
"created_at": "2025-05-15T10:00:00Z",
"updated_at": "2025-05-16T14:30:00Z"
},
"relationships": {
"author": {
"links": {
"self": "/articles/1/relationships/author",
"related": "/articles/1/author"
},
"data": { "type": "users", "id": "42" }
},
"comments": {
"links": {
"self": "/articles/1/relationships/comments",
"related": "/articles/1/comments"
},
"data": [
{ "type": "comments", "id": "5" },
{ "type": "comments", "id": "12" }
]
}
},
"links": {
"self": "/articles/1"
}
}
Ressourcenbezeichnerobjekte
Ressourcenbezeichnerobjekte sind minimale Darstellungen einer Ressource, die nur type
und id
enthalten. Sie werden innerhalb von Beziehungs-Objekten verwendet, um auf andere Ressourcen zu verlinken, ohne das vollständige Ressourcenobjekt einzubetten.
Beispiel für ein Ressourcenbezeichnerobjekt:JSON
{ "type": "users", "id": "42" }
Links-Objekte
Links-Objekte stellen URLs für die Navigation in der API bereit. Häufige Link-Elemente umfassen:
self
: Ein Link, der die Ressource oder das Dokument selbst darstellt.related
: Ein Link zu einer zugehörigen Ressource oder Sammlung. Oft in Beziehungen verwendet, um die tatsächlichen zugehörigen Daten abzurufen.- Paginierungs-Links:
first
,last
,prev
,next
für die Navigation in paginierten Sammlungen.
Ein Link kann dargestellt werden als:
- Eine einfache Zeichenfolge, die die URL enthält.
- Ein Link-Objekt, das
href
(Zeichenfolgen-URL) enthalten muss und optionalrel
(Beziehungstyp),describedby
(Link zu einem Beschreibungsdokument),title
,type
(Medientyp des Ziels),hreflang
und einmeta
-Objekt enthalten kann.
Beispiel für ein Links-Objekt (innerhalb einer Beziehung):JSON
"links": {
"self": "http://example.com/articles/1/relationships/author",
"related": "http://example.com/articles/1/author"
}
Meta-Objekte
Meta-Objekte ermöglichen die Aufnahme von nicht standardmäßigen Meta-Informationen. Dies können beliebige Schlüssel-Wert-Paare sein. Beispielsweise könnte ein meta
-Objekt Urheberrechtsinformationen oder Zeitstempel im Zusammenhang mit den Daten enthalten.
Beispiel für ein Meta-Objekt:JSON
"meta": {
"copyright": "Copyright 2025 Example Corp.",
"authors": ["John Doe"]
}
Content-Negotiation: Die richtige Sprache sprechen
JSON:API definiert seinen eigenen Medientyp: application/vnd.api+json
.
Accept
-Header: Clients müssen diesen Header mit dem Medientypapplication/vnd.api+json
senden, um anzugeben, dass sie eine JSON:API-konforme Antwort erwarten. Wenn ein Server keinen der Medientypen imAccept
-Header erfüllen kann, muss er mit dem Status406 Not Acceptable
antworten.Content-Type
-Header: Clients und Server müssen diesen Header mit dem Medientypapplication/vnd.api+json
für alle Anfragen und Antworten verwenden, die ein JSON:API-Dokument in ihrem Body enthalten. Wenn eine Anfrage einenContent-Type
angibt, der sich vonapplication/vnd.api+json
(oder anderen registrierten Medientypen, die der Server unterstützt) unterscheidet und einen Body enthält, muss der Server mit dem Status415 Unsupported Media Type
antworten. Wenn eine AnfrageContent-Type: application/vnd.api+json
angibt, der Body jedoch kein gültiges JSON:API-Dokument ist, muss der Server mit400 Bad Request
antworten.
Server können andere Medientypen neben application/vnd.api+json
über Standard-Content-Negotiation unterstützen.
Daten abrufen: Ressourcen und Sammlungen abrufen
JSON:API bietet robuste Mechanismen für Clients, um Daten genau nach Bedarf abzurufen.
Einzelne Ressourcen abrufen
Um eine einzelne Ressource abzurufen, sendet ein Client eine GET
-Anfrage an einen Endpunkt, der diese Ressource darstellt.
Anfrage:
GET /articles/1
Accept: application/vnd.api+json
Erfolgreiche Antwort (200 OK):JSON
{
"links": {
"self": "/articles/1"
},
"data": {
"type": "articles",
"id": "1",
"attributes": {
"title": "JSON:API Rocks!"
}
// ... other attributes and relationships
}
}
Wenn die Ressource nicht existiert, sollte der Server 404 Not Found
zurückgeben. Wenn ein Link zu einer zugehörigen Eins-zu-Eins-Ressource abgerufen wird und die Beziehung leer ist, sind die primären Daten null
.
Sammlungen von Ressourcen abrufen
Um eine Sammlung von Ressourcen abzurufen, sendet ein Client eine GET
-Anfrage an einen Endpunkt, der diese Sammlung darstellt.
Anfrage:
GET /articles
Accept: application/vnd.api+json
Erfolgreiche Antwort (200 OK):JSON
{
"links": {
"self": "/articles",
"next": "/articles?page[offset]=10",
"last": "/articles?page[offset]=50"
},
"data": [
{
"type": "articles",
"id": "1",
"attributes": { "title": "Article 1" }
// ...
},
{
"type": "articles",
"id": "2",
"attributes": { "title": "Article 2" }
// ...
}
// ... more articles
]
}
Wenn die Sammlung leer ist, ist das Element data
ein leeres Array []
.
Beziehungen: Ressourcen verbinden
Beziehungen sind ein grundlegender Bestandteil der meisten Datenmodelle. JSON:API bietet eine klare Möglichkeit, diese zu definieren und mit ihnen zu interagieren.
Beziehungen darstellen
Beziehungen werden innerhalb des relationships
-Objekts einer Ressource definiert. Jeder Eintrag im relationships
-Objekt stellt eine eindeutige Beziehung dar (z. B. "Autor", "Kommentare").
Ein Beziehungs-Objekt muss mindestens eines der folgenden Elemente enthalten:
links
: Enthältself
- undrelated
-Links.- Der
self
-Link (Beziehungs-URL) ermöglicht die Manipulation der Beziehung selbst (z. B. Hinzufügen/Entfernen von Elementen in einer Eins-zu-Viele-Beziehung). Beim Abrufen gibt er Ressourcenbezeichnerobjekte für die zugehörigen Ressourcen zurück. - Der
related
-Link (URL der zugehörigen Ressource) ermöglicht das direkte Abrufen der zugehörigen Ressourcenobjekte. data
: Enthält Ressourcenverknüpfungen (Ressourcenbezeichnerobjekte).- Für eine Eins-zu-Eins-Beziehung: ein einzelnes Ressourcenbezeichnerobjekt oder
null
. - Für eine Eins-zu-Viele-Beziehung: ein Array von Ressourcenbezeichnerobjekten oder ein leeres Array
[]
. meta
: Ein Meta-Objekt für nicht standardmäßige Informationen über die Beziehung.
Beispiel für "author" (Eins-zu-Eins) und "comments" (Eins-zu-Viele)-Beziehungen:JSON
"relationships": {
"author": {
"links": {
"self": "/articles/1/relationships/author",
"related": "/articles/1/author"
},
"data": { "type": "users", "id": "42" }
},
"comments": {
"links": {
"self": "/articles/1/relationships/comments",
"related": "/articles/1/comments"
},
"data": [
{ "type": "comments", "id": "5" },
{ "type": "comments", "id": "12" }
]
}
}
Beziehungen abrufen
Clients können mithilfe der bereitgestellten Links Informationen über eine Beziehung selbst oder die zugehörigen Ressourcen abrufen.
Abrufen der Beziehungs-Verknüpfung (Selbst-Link):
GET /articles/1/relationships/comments
Accept: application/vnd.api+json
Dies gibt eine Sammlung von Ressourcenbezeichnerobjekten für die Kommentare zurück, die sich auf den Artikel "1" beziehen.
Abrufen zugehöriger Ressourcen (zugehöriger Link):
GET /articles/1/comments
Accept: application/vnd.api+json
Dies gibt eine Sammlung vollständiger Kommentar-Ressourcenobjekte zurück, die sich auf den Artikel "1" beziehen.
Datenabruf optimieren
JSON:API bietet mehrere Funktionen, um den Datenabruf zu optimieren, die Bandbreite zu minimieren und die Leistung auf Client-Seite zu verbessern.
Zusammengesetzte Dokumente: Reduzierung von HTTP-Anfragen mit include
Um mehrere Roundtrips zum Server zum Abrufen zugehöriger Ressourcen zu vermeiden, können Clients mit JSON:API anfordern, dass zugehörige Ressourcen mithilfe des Abfrageparameters include
in die primäre Antwort aufgenommen werden. Der Server lädt diese Ressourcen dann in das included
-Array der obersten Ebene nebenbei.
Anfrage zum Abrufen eines Artikels und zum Einbeziehen seines Autors und seiner Kommentare:
GET /articles/1?include=author,comments
Accept: application/vnd.api+json
Antwort (200 OK):JSON
{
"data": {
"type": "articles",
"id": "1",
"attributes": { "title": "..." },
"relationships": {
"author": {
"data": { "type": "users", "id": "42" }
},
"comments": {
"data": [
{ "type": "comments", "id": "5" },
{ "type": "comments", "id": "12" }
]
}
}
},
"included": [
{
"type": "users",
"id": "42",
"attributes": { "name": "John Doe" }
},
{
"type": "comments",
"id": "5",
"attributes": { "body": "Great article!" }
},
{
"type": "comments",
"id": "12",
"attributes": { "body": "Very informative." }
}
]
}
- Der Parameter
include
nimmt eine durch Kommas getrennte Liste von Beziehungspfaden an. - Geschachtelte Beziehungen können mithilfe der Punktschreibweise (z. B.
include=comments.author
) einbezogen werden. - Wenn ein Endpunkt
include
nicht unterstützt, muss er400 Bad Request
zurückgeben. - Der Server darf keine nicht angeforderten Ressourcen im Abschnitt
included
enthalten.
Spärliche Feldmengen: Nur erforderliche Felder abrufen
Clients können anfordern, dass nur bestimmte Felder (Attribute und Beziehungen) für Ressourcen eines bestimmten Typs mithilfe des Abfrageparameters fields[TYPE]
zurückgegeben werden. Dies reduziert die Payload-Größe.
Anfrage zum Abrufen von Artikeln, aber nur ihres Titels und ihrer Autorbeziehung:
GET /articles?fields[articles]=title,author
Accept: application/vnd.api+json
Antwort (200 OK):JSON
{
"data": [
{
"type": "articles",
"id": "1",
"attributes": {
"title": "Article 1"
},
"relationships": {
"author": {
"data": { "type": "users", "id": "42" }
}
}
}
// ... other articles with only title and author
]
}
- Die
id
undtype
sind immer enthalten. - Wenn ein Client ein Feld anfordert, das nicht existiert, muss der Server es ignorieren.
- Wenn ein Client nur Felder anfordert, die Beziehungen sind, kann das Element
attributes
weggelassen werden.
Sortieren
Clients können anfordern, dass die primären Daten mithilfe des Abfrageparameters sort
sortiert werden.
Anfrage zum Abrufen von Artikeln, sortiert nach Erstellungsdatum (absteigend) und dann nach Titel (aufsteigend):
GET /articles?sort=-created_at,title
Accept: application/vnd.api+json
- Ein vorangestellter Bindestrich (
-
) gibt die absteigende Reihenfolge an; andernfalls ist sie aufsteigend. - Der Server definiert, welche Attribute zum Sortieren verwendet werden können. Anfragen zum Sortieren nach nicht unterstützten Attributen sollten zu einem
400 Bad Request
führen.
Paginierung
JSON:API unterstützt verschiedene Paginierungsstrategien. Die Spezifikation definiert, wie Paginierungs-Links (first
, prev
, next
, last
) im links
-Objekt der obersten Ebene angezeigt werden sollen. Die tatsächliche Paginierungsstrategie (z. B. seitenbasiert, offsetbasiert, cursorbasiert) wird vom Server mithilfe von Abfrageparametern wie page[number]
, page[size]
, page[offset]
, page[limit]
oder page[cursor]
bestimmt.
Beispiel für seitenbasierte Paginierungs-Links:JSON
"links": {
"self": "/articles?page[number]=2&page[size]=10",
"first": "/articles?page[number]=1&page[size]=10",
"prev": "/articles?page[number]=1&page[size]=10",
"next": "/articles?page[number]=3&page[size]=10",
"last": "/articles?page[number]=5&page[size]=10"
}
Clients sollten diese bereitgestellten Links verwenden, anstatt ihre eigenen Paginierungs-URLs zu erstellen.
Filtern
Die Spezifikation reserviert den Abfrageparameter filter
für das Filtern von Daten. Sie schreibt jedoch keine bestimmte Filterstrategie vor. Server können jede Strategie implementieren, z. B. filter[attribute]=value
oder komplexere ausdrucksbasierte Filterung.
Beispiel (von JSON:API empfohlen, aber nicht vorgeschrieben):
GET /comments?filter[post]=1 (Kommentare für Beitrag mit ID 1 abrufen)
GET /comments?filter[post]=1,2&filter[author]=12 (Kommentare für Beiträge 1 oder 2 vom Autor 12 abrufen)
Clients sollten die Dokumentation der API konsultieren, um ihre spezifischen Filterfunktionen zu verstehen.
Daten ändern: Ressourcen erstellen, aktualisieren und löschen
JSON:API definiert klare Protokolle für Datenmanipulationsvorgänge.
Ressourcen erstellen
Um eine Ressource zu erstellen, sendet ein Client eine POST
-Anfrage an eine URL, die eine Sammlung von Ressourcen darstellt. Der Anfragetext muss ein einzelnes Ressourcenobjekt mit type
und optional attributes
und relationships
enthalten. Der Client darf keine id
für die neue Ressource bereitstellen (es sei denn, clientgenerierte IDs werden unterstützt und aktiviert).
Anfrage:
POST /articles
Accept: application/vnd.api+json
Content-Type: application/vnd.api+jsonJSON
{
"data": {
"type": "articles",
"attributes": {
"title": "New Article Title",
"body": "Content of the new article."
},
"relationships": {
"author": {
"data": { "type": "users", "id": "42" }
}
}
}
}
Erfolgreiche Antworten:
201 Created
: Wenn die Ressource erfolgreich erstellt wurde. Die Antwort muss einenLocation
-Header enthalten, der die URL der neu erstellten Ressource identifiziert. Der Antworttext sollte die neu erstellte Ressource enthalten, einschließlich ihrer serverseitig zugewiesenenid
.202 Accepted
: Wenn die Erstellungsanfrage zur Verarbeitung akzeptiert wurde, die Verarbeitung jedoch noch nicht abgeschlossen ist (z. B. für asynchrone Vorgänge). Die Antwort kann einen Link zur Überwachung des Status enthalten.204 No Content
: Wenn die Ressource erfolgreich erstellt wurde, der Server sich jedoch dafür entscheidet, die Ressourcendarstellung nicht im Antworttext zurückzugeben. DerLocation
-Header ist weiterhin erforderlich.
Wenn versucht wird, eine Ressource mit einer clientgenerierten ID zu erstellen, die bereits existiert, und der Server die Aktualisierung über POST
nicht unterstützt, muss er 409 Conflict
zurückgeben.
Ressourcen aktualisieren
Ressourcen werden mithilfe der PATCH
-HTTP-Methode aktualisiert. Die Anfrage muss die id
der zu aktualisierenden Ressource enthalten. Der Anfragetext enthält ein Ressourcenobjekt mit type
, id
und den attributes
und/oder relationships
, die aktualisiert werden sollen.
Anfrage zum Aktualisieren des Titels eines Artikels und einer seiner Beziehungen:
PATCH /articles/1
Accept: application/vnd.api+json
Content-Type: application/vnd.api+jsonJSON
{
"data": {
"type": "articles",
"id": "1",
"attributes": {
"title": "Updated Article Title"
},
"relationships": {
"tags": {
"data": [
{ "type": "tags", "id": "3" },
{ "type": "tags", "id": "4" }
]
}
}
}
}
Wichtige Punkte für Aktualisierungen:
- Teilweise Aktualisierungen:
PATCH
-Anfragen sollten teilweise sein. Nur die in der Anfrage vorhandenen Felder sollten aktualisiert werden. Nicht enthaltene Felder sollten unverändert bleiben. - Beziehungen aktualisieren:
- Eins-zu-Eins: Stellen Sie ein Ressourcenbezeichnerobjekt oder
null
in dendata
der Beziehung bereit. - Eins-zu-Viele: Stellen Sie ein Array von Ressourcenbezeichnerobjekten bereit. Dies ersetzt die vorhandenen Beziehungselemente vollständig. Um Elemente hinzuzufügen oder zu entfernen, ohne den gesamten Satz zu ersetzen, sollten dedizierte Beziehungs-Endpunkte (
/articles/1/relationships/tags
) mitPOST
(zum Hinzufügen),DELETE
(zum Entfernen) oderPATCH
(zum Ersetzen aller) verwendet werden. - Der Server darf keine Attribute oder Beziehungen aktualisieren, die nicht in der Anfrage angegeben sind.
Erfolgreiche Antworten:
200 OK
: Wenn die Aktualisierung erfolgreich war und der Server eine Darstellung der aktualisierten Ressource zurückgibt.202 Accepted
: Wenn die Aktualisierungsanfrage zur Verarbeitung akzeptiert wurde, aber noch nicht abgeschlossen ist.204 No Content
: Wenn die Aktualisierung erfolgreich war, der Server sich jedoch dafür entscheidet, keine Darstellung zurückzugeben.
Wenn die zu aktualisierende Ressource nicht existiert, muss der Server 404 Not Found
zurückgeben.
Beziehungen direkt aktualisieren
JSON:API bietet spezifische Möglichkeiten, Beziehungen zu verwalten, ohne die Attribute der primären Ressource zu beeinflussen.
- Aktualisieren einer Eins-zu-Eins-Beziehung:
PATCH /articles/1/relationships/authorContent-Type: application/vnd.api+json
JSON
{
"data": { "type": "users", "id": "24" } // Assign new author or null to clear
}
- Aktualisieren einer Eins-zu-Viele-Beziehung (vollständiger Ersatz):
PATCH /articles/1/relationships/commentsContent-Type: application/vnd.api+json
JSON
{
"data": [
{ "type": "comments", "id": "101" },
{ "type": "comments", "id": "102" }
]
}