2017-03-01 3 views
3

Wir sind gerade dabei, kleinere Dienstleistungen von unseren Monolithen zu streiten. Unsere Domain ist einem Ticketing-System sehr ähnlich. Wir haben uns entschieden, mit dem Löschungsprozess der Domain zu beginnen.Wie modelliert man eine CANCEL-Aktion auf REST-basierende Weise?

Unser Cancel-Service hat als einfachen Endpunkt "Cancel", der die ID des Tickets annimmt. Intern rufen wir die ID ab, führen einige Vorgänge durch, die mit dem Abbrechen zusammenhängen, und aktualisieren den Status der Entität im Geschäft. Aus der Perspektive des Ladens besteht nur ein paar Eigenschaften zwischen einem stornierten Ticket und einem Live-Ticket.

Nach was ich gelesen habe, scheint PATCH das richtige Verb zu sein, um in diesem Fall verwendet zu werden, da nur eine einfache Eigenschaft in der Ressource aktualisiert wird.

PATCH /api/tickets/{id} 
Payload {isCancelled: true} 

Aber IsCancelled ist keine tatsächliche Eigenschaft in der Entität. Ist es fair, Eigenschaften in der Nutzlast zu senden, die nicht Teil der Entität sind, oder sollte ich an eine andere Form der Modellierung dieser Anforderung denken? Ich möchte nicht die gesamte Entität als Teil der Nutzlast senden, da sie groß ist.

Ich habe überlegt, eine neue Ressource CancelledTickets zu erstellen, aber in unserer Domäne hätten wir niemals ein GET auf stornierte Tickets. Daher blieb weg, eine neue Ressource zu erstellen, die von mit

Jede Hilfe wäre sehr

Dank K

Antwort

4

Werfen Sie einen Blick, was genau RESTful way ist geschätzt. Egal, ob Sie senden PATCH Anfrage mit isCancelled als Nutzlast oder sogar DELETE, wenn Sie Tickets verschwinden möchten. Es ist immer noch RESTful.

Ihr Umzug hängt von Ihren Bedürfnissen ab. Wie Sie gesagt haben

Ich habe als eine neue Ressource CancelledTickets zu schaffen, aber in unserer Domain würden wir nie die Notwendigkeit, eine GET auf storniert Tickets haben.

Ich würde einfach senden DELETE. Sie müssen es nicht physisch entfernen. Wenn es möglich ist, den Vorgang abzubrechen, implementieren Sie den Mechanismus isCancelled. Es ist nur eine Frage des Geschmacks.

+0

Wie ich verstehe RESTful zu sein bedeutet, dass wir Roy Fieldigs Einschränkungen einhalten müssen. Die Einhaltung dieser Standards bedeutet, dass jeder Kunde, der den Dienst nutzt, bestimmte Annahmen über den Dienst treffen kann. Das heißt, ich verstehe auch, dass Funktionalität mehr wichtig ist als Konformität. Gedanken? –

0

Das Freigeben der GET Schnittstelle einer Ressource ist nicht obligatorisch.

Zum Beispiel verwenden

PUT /api/tickets/{id}/actions/cancel 

den Löschungsantrag einzureichen. Ich wähle PUT, da nicht mehr als eine Löschungsanforderung in Kraft wäre.

Ich hoffe, es ist hilfreich.

Verwandte Themen