2016-07-18 8 views
0

Ich entwerfe eine RESTful API, um Bestellungen und Zahlungstransaktionen darzustellen. Mein (vereinfacht) Modell sieht wie folgt aus:Wie verknüpfe ich verwandte Daten in einer REST-API?

---------  --------------- 
| order |----<| transaction | 
---------  --------------- 

das heißt ein Auftrag viele Transaktionen haben kann. Wenn ich diese Endpunkte haben die Ressourcen zu erhalten:

/orders/{id} 
/orders/{id}/transactions 

Wo der zweite Aufruf eine Liste von Transaktionsobjekte zurückgibt (erweitert oder nur IDs, die dann über :)

/transactions/{id} 

zugegriffen werden kann, wie soll ich die Bestellressource aktualisieren, um ihre Transaktionen zu beschreiben?

Sollte ich eine Liste von Transaktionsobjektdaten an /orders/{id}/transactions POST, und sie werden erstellt und mit der Auftragsressource verknüpft?

Oder sollte ich jede Transaktion /transactions POST und dann PUT (oder POST?) Bis /orders/{id}/transactions eine Liste der Transaktions-IDs?

... oder etwas anderes?

Was passiert, wenn ich bereits eine Transaktionsressource habe und diese verknüpfen möchte?

Antwort

3

Sie könnten POST verwenden, um eine Transaktion für einen Auftrag zu erstellen, wie folgend:

POST /orders/{id}/transactions HTTP/1.1 
Host: example.org 
Content-Type: application/json 

{ 
    ... transaction representation ... 
} 

eine vorhandene Transaktion zu einem Auftrag verknüpfen Sie die Transaktion Ressource betrachten könnten enthält eine Unterressource genannt Ordnung. Um die Reihenfolge einer Transaktion zu ersetzen, würden Sie PUT verwenden, das Absenden der Bestellung Kennung in der Anfrage-Payload:

PUT /transactions/{id}/order HTTP/1.1 
Host: example.org 
Content-Type: application/json 

{ 
    "order": 100 
} 

Alternativ können Sie verwenden PATCH und JSON Patch um teilweise die Transaktion Ressource zu aktualisieren:

PATCH /transactions/{id} HTTP/1.1 
Host: example.org 
Content-Type: application/json-patch+json 

[ 
    { "op": "replace", "path": "/order", "value": 100 } 
] 
Verwandte Themen