非推奨のAPIをクライアントに通知するためのHTTP応答ヘッダーの規則


84

REST APIエンドポイントをアップグレードしており、非推奨になるエンドポイントを呼び出しているときにクライアントに通知したいと思います。
「このAPIバージョンは非推奨です。最新のドキュメントを参照してエンドポイントを更新してください」というメッセージとともに、応答でどのヘッダーを使用する必要がありますか

回答:


72

下位互換性を保つために、ステータスコードの内容は変更しません。応答に「警告」ヘッダーを追加します:

Warning: 299 - "Deprecated API"

警告を発する「エージェント」で「-」を指定し、警告テキストでより明確にすることもできます。

Warning: 299 api.blazingFrog.com "Deprecated API: use betterapi.blazingFrog.com instead. Old API maintained until 2015-06-02"

警告ヘッダーはここで指定されます:https//tools.ietf.org/html/rfc7234#section-5.5。警告コード299は一般的であり、「非推奨」は標準ではありません。

HTTP警告をログに記録して監視するようにAPIクライアントに指示する必要があります。

今まで使ったことがありませんが、Rest APIで会社が成熟したら、統合します。

編集(2019-04-25):@ Harry Woodが述べたように、警告ヘッダーはドキュメントのキャッシュに関連する章にあります。ただし、RFCは明確ですWarnings can be used for other purposes, both cache-related and otherwise.

別の方法をご希望の場合は、このドラフトhttps://tools.ietf.org/html/draft-dalal-deprecation-header-00で新しいヘッダー「Deprecation」を提案しています


1
警告値の最後にある警告日はここでは目的を果たさないため、省略することをお勧めします。そうしないと、クライアントを混乱させるリスクがあります。。。Date同じメッセージの値とは異なる警告日を受信した場合、受信者は警告値を除外する必要があります。。。前 。。。メッセージを使用します。」
Vasiliy Faronov 2016年

警告日を含める場合は、Dateヘッダーと同じ方法でフォーマットする必要があります"Thu, 02 Apr 2015 12:25:32 GMT"
Vasiliy Faronov 2016年

@VasiliyFaronov:その通りです。その場合(非推奨のAPI)、この警告メッセージは将来常に真になるからです。したがって、応答(警告メッセージ付き)がプロキシのキャッシュによって送信され、メッセージの日付が異なる場合、警告は無視されますが、引き続き有効です。応答を編集します
BenC 2017年

しかし、その「警告」ヘッダーはキャッシュに関連していませんか?ドキュメントのリンクでキャッシュについて言及しているだけでなく、RFCドキュメント全体がキャッシュに関連しているようです。しかし、Warningヘッダーは非推奨を説明するためのフリーテキストの場所として見栄えがします。DeprecationそしてSunset他の回答で述べたヘッダは、タイトより潜在的に機械可読な方法で廃止を記述するための新たな標準ソリューションであるように思われます。
ハリーウッド

1
Warningヘッダーはキャッシュのみに関連していません。このWarningセクションの最初の文は、「警告は、キャッシュ関連とそれ以外の両方の目的で使用できます」です。
チェレビミュラ

37

410(Gone)を使用できます。

W3Cのステータスコード定義は次のように説明しています。

410(なくなった)

要求されたリソースはサーバーで使用できなくなり、転送アドレスは不明です。この状態は永続的であると見なされると予想されます。リンク編集機能を備えたクライアントは、ユーザーの承認後にRequest-URIへの参照を削除する必要があります。サーバーが状態が永続的であるかどうかを認識していないか、判断する機能がない場合は、代わりにステータスコード404(見つかりません)を使用する必要があります。この応答は、特に明記されていない限り、キャッシュ可能です。

410応答は、主に、リソースが意図的に使用不可であり、サーバー所有者がそのリソースへのリモートリンクを削除することを望んでいることを受信者に通知することにより、Webメンテナンスのタスクを支援することを目的としています。このようなイベントは、期間限定のプロモーションサービスや、サーバーのサイトで作業しなくなった個人に属するリソースでよく見られます。永続的に利用できないすべてのリソースを「なくなった」とマークしたり、マークを長期間保持したりする必要はありません。これは、サーバー所有者の裁量に任されています。


36
410の問題は、「非推奨になる」要件に一致しないことです... APIがなくなっても正常に機能しますが、将来的になくなるわけでありません。
Julien Genestoux 2014

3
410を返すと、下位互換性が
失われ

4
410 Goneそれは非推奨についてではなく、もはや利用できない方法についてです。@BenCが言ったように、より良い方法は警告ヘッダー
sempasha 2016年

2
これは、非推奨のAPIの次のフェーズになる可能性があります
Shiplu Mokaddim 2018年

16

私は301(永久に移動)を使用していました。300シリーズのコードは、クライアントに実行するアクションがあることを通知することになっています。


4
エンドポイントが実際に削除されたら、おそらくこれを使用しますが、必要な変更を加えることができるように、しばらくの間通知を受ける機会を与えたいと思います(応答のHTTPヘッダーを確認することを前提としています)。彼らの終わり。
BlazingFrog 2012

2
引っ越しのステータスは実際にはありません。302(要求されたリソースは一時的に別の場所にありますが、それでも要求されたURIで見つけることができます。)...
u07ch 2012

1
ステータスを探しているのではなく、応答に追加する「標準」ヘッダーを探しています。
BlazingFrog 2012

1
この種の応答には標準のヘッダーはありません。独自のヘッダーを作成し、独自のAPIのドキュメントで説明する必要があります。
ブライアンケリー

300以上の応答コードは問題を解決するはずだと思います。299を使用すると、クライアントは、必要な変更を加えている間、APIが無効になるまでアプリケーションを存続させることができます。
devlord 2016

6

207 Multi-Status応答が成功したことを示す応答をお勧めしますが、2番目の非推奨ステータスになる可能性もあります。


1
面白い。それについては知りませんでしたが、実際には、200の範囲内であっても、別の応答コードに交換することで、一部のクライアントに重大な変更を導入する危険性が高いと思います。私はあなたが圧力の一種の穏やかなラチェットをするかもしれないと思います。Deprecationヘッダー(クライアントは残念ながら無視する可能性があります)から始めて、後でこの207コードを使用し、後で301を移動し、最後に410を削除します。
ハリーウッド

4

@dretの応答を調整します。非推奨に関連する2つのHTTPヘッダーがあります:Deprecationhttps://tools.ietf.org/html/draft-dalal-deprecation-header-00)とSunset

計画されている非推奨についてユーザーに通知するには、DeprecationHTTPヘッダーを使用する必要があります。これは、エンドポイントがドロップされることを示しているいくつかの時間を未来に。また、これが発表された日付を示したり、代替リソースを説明したりすることもできます。

非推奨のリソースの廃止予定日をユーザーに通知するには、非Sunset推奨ヘッダーに加えてヘッダーを使用する必要があります。これについては、セクション5https://tools.ietf.org/html/draft-dalal-deprecation-header-00#section-5で説明されています

ヘッダーのドラフト#11 https://tools.ietf.org/html/draft-wilde-sunset-header-11は、Sunsetセクション1.4https ://tools.ietf.org/html/draft-wildeでもこの側面を明確にしています。 -sunset-header-11#section-1.4


3

Sunsetリソースの今後の非推奨を通知することを目的とした、呼ばれるHTTPヘッダーフィールドがあります。https://tools.ietf.org/html/draft-wilde-sunset-headerは、RFCになる最終段階にあります。理想的には、APIは、使用することを文書化してSunset、クライアントが必要に応じてAPIを探し、それに基づいて行動できるようにする必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.