2013-04-21 8 views

Antwort

4

Denn wenn man eine PUT Anfrage an /cars senden ist, semantisch die dir bedeuten würden versuchen, Attribute über den Satz von Autos zu modifizieren, anstatt Attribute von ein einzelnes Auto zu ändern. Der URI in einer RESTful-API sollte die genaue Ressource angeben, auf die sich die Aktion auswirkt. Wenn Sie also eine Ressource ändern, sollte Ihre URI genau diese Ressource angeben.

Auch aus RFC 2616:

Der URI in einer PUT-Anforderung identifiziert die Einheit mit der Anforderung eingeschlossen - der User-Agent weiß, was URI bestimmt ist und der Server versuchen darf nicht die Anforderung an einige anzuwenden andere Ressource.

Die Spezifikation besagt also, dass wenn der Client die eindeutige ID der Ressource kennt, diese im URI enthalten sein sollte.

2

dies kommt von rest "Ideologie".

Die Idee ist, dass eine URL eindeutig eine Entität darstellt - also müssen Sie die Entity, die Sie erstellen/bearbeiten, auf die URL dieser Entität setzen.

aus der Wikipedia-Seite zu zitieren:

Identifizierung von Ressourcen

Individuelle Ressourcen in Anforderungen identifiziert werden, beispielsweise URIs in web-basierten REST-Systemen. Die Ressourcen selbst sind konzeptionell von den Darstellungen getrennt, die an den Client zurückgegeben werden.

2

PUT zielt darauf ab, eine genau definierte Einheit zu vereinheitlichen.

Wenn Sie nur /cars verwenden, konzentrieren Sie sich nicht auf eine bestimmte Entität.

Und im Gegenteil zu dem, was Sie geschrieben haben, wird Ihre vollständige Entität nicht in einem Basis-String (URI) übergeben.

Gestellte wenn Ihr gezielte Methode Fokus auf einem hartcodierte carid ... aber ich glaube nicht ..

2

Es kommt auf die API-Schnittstelle. Es gibt verschiedene Ansätze für das API-Design. Und wie Sie vorgeschlagen haben, können Sie die ID aus der Anfrage herauslassen. Da jedoch viele API-Designs in einer Art und Weise strukturiert sind, die Sie beschrieben haben, wie PUT/cars/5, wird dies als gute Praxis angesehen.

Grundsätzlich haben Sie 8 Möglichkeiten, mit Ihrer API zu interagieren. GET, POST, PUT, DELETE und ein optionaler HEAD. (Wenn Sie Kopf zählen, wäre die Summe 9 oder 10, abhängig von den Interaktionen).

Also, um es aufzuräumen, haben Sie 2 Möglichkeiten von GET. GET/Autos würden alle Autos abrufen, GET/cars/5 würde jedes Auto mit einer ID von 5 abrufen. Also, Sie haben 2 Möglichkeiten, GET zu verwenden. Das gleiche gilt für POST, PUT und DELETE. 4 * 2 = 8 richtig?

Nun, es gibt Leute, die sagen würden, dass PUT/Autos ambivalent sein würden, aber Sie sind völlig ohne das zusätzliche ID - Feld gültig, weil Sie, wie Sie bereits erwähnten, das ID - Feld bereits übergeben anfordern.

Die Leute von Apigee forschen seit einiger Zeit über API-Designs. Ich empfehle, einige ihrer Videos anzusehen, um besser zu verstehen, was API-Design bedeutet und warum einige Argumente gültig sind und andere nicht.

Apigee Best practises

Verwandte Themen