2013-04-04 5 views
5

Gibt es einen idiomatischen Weg, dies zu erreichen:REST „Trockenlauf“ Option für PUT oder POST

Ich brauche eine bestimmte Einheit PUT/POST. Aber bevor ich es wirklich setze, muss ich einige Änderungen an einem volatileren System vornehmen, und wenn das funktioniert, werde ich weitermachen.

Also werde ich zuerst fragen, ob die PUT/POST akzeptabel ist und dann später tatsächlich die PUT/POST.

Ich habe gedacht, nur einen "Trockenlauf" Abfrage-Parameter verwenden, aber es fühlt sich nicht wie der richtige Weg.

Aktualisieren: Versuchen, mein Problem zu klären. Der Punkt ist, dass das erste PUT nur zur Verifizierung der Entität dient.

Me   System A  Volatile System X 
| Dry PUT |     : 
|-------------->|     : 
|    |     : 
| 20x/40x |     : 
|<--------------|     : 
|    :     : 
| Upon PUT OK do some related work : 
|----------------------------------->| 
|    :     | 
| Work completely     | 
|<-----------------------------------| 
|    : 
|PUT (for real) : 
|-------------->| 
|    | 
|  20x  | 
|<--------------| 
+1

Ich denke, "der richtige Weg" ist nur eine vollständige PUT und der Server sollte einige 4xx Fehler zurückgeben, wenn die PUT inakzeptabel ist. – sharptooth

+0

Problem ist; Wenn es durchgeht, wird es gespeichert, bevor das andere System geändert wird; die nicht durchgehen können und die Systeme im Konfliktzustand belassen. – thoredge

+1

Dann sollte es nicht "durchlaufen", sollte es einen 4xx Fehlercode zurückgeben. – sharptooth

Antwort

0

Logischerweise fühle ich, dass dies vielleicht durch eine Art von Staatseigenschaft gelöst werden könnte. Wenn Sie JSON verwenden, betrachten könnten Sie zum Beispiel eine Eigenschaft wie folgt ergänzt:

{ 
    "draft" : true 
} 

Das erste Mal, wenn Sie die PUT-Anfrage zu tun, markieren Sie das Element als Entwurf. Es speichert den Gegenstand, tut aber nichts anderes damit.

Nachdem Ihr Server Ihre Anfrage angenommen hat, können Sie Ihre "zugehörige Arbeit" an anderer Stelle erledigen. Wenn dies auch erfolgreich war, können Sie eine weitere PUT-Anfrage an dieselbe Ressource senden, diesmal draft bis false.

Verwandte Themen