OParl / spec

Spezifikation für eine offene Schnittstelle für Ratsinformationssysteme
https://oparl.org
Creative Commons Attribution Share Alike 4.0 International
61 stars 21 forks source link

HTTP-Statuscode für gelöschte Objekte #394

Closed akuckartz closed 6 years ago

akuckartz commented 6 years ago

Im Abschnitt "Gelöschte Objekte" steht:

Als HTTP-Statuscode muss weiterhin 200 verwendet werden.

Dies steht nach meiner Einschätzung in Widerspruch zu RFC 7231. Siehe https://github.com/OParl/spec/issues/379#issuecomment-341881290

konstin commented 6 years ago

Ein Statuscode wie 410 ist dann korrekt, wenn der Server unter der url keine Daten mehr ausliefern kann. Das würde aber der Spezifikation widersprechen, in der festgelegt ist, dass der Server auch bei gelöschten Objekten ein gültiges Objekt ausliefern muss.

Weiterhin handelt es sich bei gelöschten Objekten nicht um einen Fehler ("Client Error 4xx"), sondern um einen wichtigen Teil des Update-Mechanismus. 200 hat in der Praxis auch den Vorteil, dass man mit http-Bibliotheken einen Fehler leicht von einem gelöschten Objekt unterscheiden kann.

akuckartz commented 6 years ago

Der HTTP-Status 410 impliziert (ebenso wie die anderen 4xx-Codes) nicht, das keine Daten ausgegeben werden können, sondern nur dies:

The 410 (Gone) status code indicates that access to the target resource is no longer available at the origin server and that this condition is likely to be permanent. ... The 410 response is primarily intended to assist the task of web maintenance by notifying the recipient that the resource is intentionally unavailable and that the server owners desire that remote links to that resource be removed.

konstin commented 6 years ago

Der HTTP-Status 410 impliziert (ebenso wie die anderen 4xx-Codes) nicht, das keine Daten ausgegeben werden können, [...]

Das ist bekannt.

Weiterhin heißt es in Kapitel 6.5.:

The 4xx (Client Error) class of status code indicates that the client seems to have erred.

Bei gelöschten liegt kein Fehler vor, weder auf Client- noch auf Serverseite.

Sowie in Kapitel 6.5.9.

It is not necessary to mark all permanently unavailable resources as "gone" or to keep the mark for any length of time -- that is left to the discretion of the server owner.

OParl verlangt, dass gelöschte Objekte markiert und unbeschränkt erhalten verbleiben.

akuckartz commented 6 years ago

Client seems to have erred

ist nicht gleichbedeutend damit, dass der Client einen "Fehler" gemacht hat (oder der Server). Deutsche Übersetzung laut Google: "scheint sich geirrt zu haben". Die stellenweise Verwendung des Begriffs "Error" in dem Kapitel 6.5 der HTTP-Spezifikation halte ich für nicht besonders glücklich.

So bedeutet ja 404 auch nur, dass das Objekt nicht oder nicht mehr existiert. Und 410 bedeutet, dass es einmal existiert hat und nun nicht mehr existiert.

OParl verlangt, dass gelöschte Objekte markiert und unbeschränkt erhalten verbleiben.

Für solche Fälle ist 410 gedacht. Das Zitat aus 6.5.9 besagt nur, dass HTTP keine - jedenfalls keine unbeschränkte - Markierung fordert. Wenn es keine Markierung gibt (oder keine mehr gibt) dann ist 404 die durch HTTP vorgesehene Antwort.