2010-03-15 5 views
14

Ich verstehe, wie REST verwenden für allgemeine Entity-Wechselwirkungen zu tun - Urls Namen zu Entitäten und die HTTP-Verben kartieren, um Aktionen für diese Entitäten abzubilden. Aber was ist die allgemein akzeptierte Art, "Aktionen" eher wie RPC zu betrachten?REST-Services - Aussetzen Nicht-Daten „Aktionen“

Zum Beispiel, sagen wir, ich möchte einen Befehl senden für das Gerät zurücksetzen? Es gibt keinen wirklichen „entity“ hier oder muss ich etwas tun, wie POST http://mydevice/device/reset?

Antwort

13

/device/reset oder /system/reset sind ok.

Die "Entwurfsmuster" REST Sie nicht ermutigen alle Verben verwenden .. Sie tun können:

POST http://mydevice/system/state  
<stateType>RESET</stateType> 

Verwandte Informationen:

+1

Ja, das ist eine mögliche Lösung. –

2

nenne ich in der Regel an das Unternehmen zu „System“ oder so ähnlich. Du machst also "/ system/reset". Du hast das Gerät gewählt, das funktioniert auch.

Aber ja, ich halte in der Regel diese Art von Aktionen Updates sein, die die POST-Methode verwenden würden. Also ich denke, du bist richtig zu POST zu/Gerät/Reset

+0

Lustig, dass du auf der PUT/POST Sache eintippen sollte - ich nur über das auch gefragt: http://stackoverflow.com/questions/2447677/rest-verbs-which-convention-is-correct/2447714#2447714 – ctacke

+0

Ich werde das kommentieren, aber ich benutze auch eine REST-Variation, da nicht alle Clients PUT/DELETE verarbeiten. Lesen Sie die Wikipedia-Seite für REST: http://en.wikipedia.org/wiki/Representational_State_Transfer – Seaux

+0

Ja, ich habe den Wikipedia-Artikel gelesen. Da ich sowohl den Service als auch den Client kontrolliere, habe ich den Luxus, alle 4 Verben zu verwenden. – ctacke

9

Ich denke nicht, dass das der Fall ist, um POST zu verwenden. Die "RESET-Aktion" ist eine idempotente Aktion (wenn Sie sie n-mal aufrufen, erhalten Sie immer das gleiche Ergebnis), also sollten Sie IMHO einen PUT-Aufruf statt POST verwenden (da POST nicht idempotent ist).

Auch, wie Sie eine Ressource setzen, können Sie

PUT http://system 
<device> 
    <status>RESET</status> 
</device> 

oder

PUT http://system/status/reset 

Aber ich denke, verwenden die erste eine „ruhigere“ ist, da Sie eine Ressource setzen, während des zweiten ondes benutzt du einfach die url.

+0

also würden Sie sagen, dass PUT ein UPDATE ist und POST ein INSERT (IBM statt Sun-Definition) ist? Siehe hierzu: http://stackoverflow.com/questions/2447677/rest-verbs-which-convention-is-correct/2447740#2447740 – ctacke

+0

Nicht wirklich. Wenn Sie an CRUD denken, können Sie diese Analogie verwenden, und es ist richtig zu sagen, dass Sie, wenn Sie ein INSERT und ein UPDATE haben, jeweils POST und PUT verwenden sollten. Aber die Idempotenz ist mehr als das. Stellen Sie sich vor, es gibt eine Ressource, die Sie nur einmal in Ihre DB einfügen können und die Sie nie ändern sollten. Das ist eine Einfügung und eine idempotente Aktion, also würde in dieser Situation PUT verwendet werden. –

+2

PUT http: // system/status/reset mit einem leeren Körper aktualisiert nur die Ressource, um leer zu sein. Der erste ist der korrekte RESTful Weg. –

Verwandte Themen