Ich würde nichts am Statuscode ändern, um abwärtskompatibel zu sein. Ich würde der Antwort einen "Warning" -Header hinzufügen:
Warning: 299 - "Deprecated API"
Sie können das "-" auch mit dem "Agenten" angeben, der die Warnung ausgibt, und im Warnungstext expliziter sein:
Warning: 299 api.blazingFrog.com "Deprecated API: use betterapi.blazingFrog.com instead. Old API maintained until 2015-06-02"
Der Warnheader wird hier angegeben: https://tools.ietf.org/html/rfc7234#section-5.5 . Der Warncode 299 ist generisch, "Veraltet" ist kein Standard.
Sie müssen Ihre API-Clients anweisen, die HTTP-Warnungen zu protokollieren und zu überwachen.
Ich habe es bis jetzt noch nie verwendet, aber wenn mein Unternehmen in der Rest-API reifer wird, werde ich es integrieren.
Bearbeiten (25.04.2019): Wie @Harry Wood erwähnt hat, befindet sich der Warning-Header in einem Kapitel zum Caching in der Dokumentation. Der RFC ist jedoch klarWarnings can be used for other purposes, both cache-related and otherwise.
Wenn Sie eine alternative Methode bevorzugen, schlägt dieser Entwurf https://tools.ietf.org/html/draft-dalal-deprecation-header-00 einen neuen Header "Deprecation" vor.
Date
Wert in derselben Nachricht unterscheidet, MUSS der Empfänger den Warnwert ausschließen. . . Vor . . . mit der Nachricht. "Date
Header formatiert werden :"Thu, 02 Apr 2015 12:25:32 GMT"
.Warning
Kopfzeile sieht jedoch als Freitextstelle zur Beschreibung der Ablehnung gut aus. DieDeprecation
undSunset
Header in anderen Antworten erwähnten, scheinen eine aufstrebende Standardlösung für die Beschreibung der deprecation in einer festeren potenziell maschinenlesbaren Art und Weise zu sein.Warning
Der Header bezieht sich nicht nur auf Caches. Der erste Satz imWarning
Abschnitt lautet "Warnungen können für andere Zwecke verwendet werden, sowohl im Zusammenhang mit dem Cache als auch auf andere Weise."Sie könnten 410 (Gone) verwenden .
So beschreiben es die Statuscode-Definitionen von W3C :
quelle
410 Gone
Es geht nicht um Abwertung, es geht viel um nicht mehr verfügbare Methoden. Wie @BenC sagte, ist der bessere Weg, Warning HeaderIch wäre / wäre mit 301 gegangen (dauerhaft verschoben). Die Codes der 300er-Serie sollen dem Kunden mitteilen, dass sie eine Aktion ausführen müssen.
quelle
Ich würde eine
207 Multi-Status
Antwort empfehlen , die angibt, dass es sich um eine erfolgreiche Antwort handelt, aber möglicherweise auch einen zweiten veralteten Status hat.quelle
Deprecation
Header (den Clients wahrscheinlich leider ignorieren) und verwenden Sie später diesen 207-Code, dann später 301 verschoben, dann endlich 410 weg!Verfeinerung der Antwort von @ dret. Es gibt zwei relevante HTTP-Header für die Ablehnung:
Deprecation
( https://tools.ietf.org/html/draft-dalal-deprecation-header-00 ) undSunset
.Um Benutzer über die geplante Ablehnung zu informieren, sollte der
Deprecation
HTTP-Header verwendet werden. Dies zeigt an, dass der Endpunkt wird fallen gelassen werden einige Zeit in der Zukunft. Außerdem können Sie das Datum angeben, an dem dies angekündigt wurde, und alternative Ressourcen beschreiben.Um Benutzer über das geplante Verfallsdatum der veralteten Ressource zu informieren, sollte der
Sunset
Header zusätzlich zum Header "Veraltet" verwendet werden. Dies wird in Abschnitt 5 https://tools.ietf.org/html/draft-dalal-deprecation-header-00#section-5 beschrieben .Der Entwurf Nr. 11 https://tools.ietf.org/html/draft-wilde-sunset-header-11 des
Sunset
Headers verdeutlicht diesen Aspekt auch in Abschnitt 1.4 https://tools.ietf.org/html/draft-wilde -sunset-header-11 # section-1.4 .quelle
Es wird ein HTTP-Headerfeld aufgerufen,
Sunset
das eine bevorstehende Abwertung einer Ressource signalisieren soll. https://tools.ietf.org/html/draft-wilde-sunset-header befindet sich in den letzten Phasen der RFC-Entwicklung. Im Idealfall sollte Ihre API dokumentieren, dass sie verwendet wirdSunset
, damit Clients danach suchen und darauf reagieren können, wenn sie dies möchten.quelle