Ich habe eine Menge Beispiele gesehen, wie man URLs für grundlegende CRUD-Operationen strukturiert, aber sehr wenig gesehen hat, wenn es um Command-ähnliche Operationen oder Application Service Calls geht.Korrekte RESTful-URL-Konvention für Anwendungsdienstanrufe?
Zum Beispiel, in meinem Anwendungsdienst habe ich einen Anruf wie RemoveOldOrders (int customerId), die jede Bestellung aus dem System entfernen würde, die älter als 2 Jahre für einen Kunden mit der ID "customerId" ist. Wie würde die URL bei meinem erholsamen Service aussehen? Wie würde die Nutzlast des Anrufs aussehen? Welche HTTP-Methode (POST?) Würde ich verwenden?
Mein Gedanke ist, wäre es so etwas wie diese:
/Kunde/1/RemoveOldOrders als POST, mit einem leeren Körper (wie die customerID aus der URL kommen würden).
Gibt es gute Richtlinien für so etwas?
Update: Ich habe das Gefühl, ich muss meine Frage ein bisschen anstelle der Bemerkung über eine mögliche doppelte Post klären (Ja, dieser Beitrag fragt im Wesentlichen das Gleiche, aber ich glaube nicht, dass die Frage gut beantwortet wurde).
Was passiert, wenn ich eine Operation für eine Ressource ausführen möchte, diese Operation aber nicht in die Standard-HTTP-Verben passt?
Ein anderes Beispiel: meine Anwendung ist in einen ESB eingebunden und es muss eine Möglichkeit geben, eine Projektion meiner Ressource auf den ESB zur Verarbeitung zu erzwingen? In meinem aktuellen SOAP-basierten Web-Service würde ich eine Methode, wie habe:
ExportCustomer(int customerId)
Jetzt, im Fall eines RESTful Service, wie könnte ich diese Aktion in einem uri darstellen? Option 1 von Brian Kelly Antwort scheint die logischste, so etwas wie:
POST http://someapp/api/customer/1/export
oder würde:
POST http://someapi/api/customer/export/1
besser sein?
wahrscheinlich doppelte Frage: http://stackoverflow.com/questions/6850187/non-crud-operations-in-a-restful-service – smcg