API 互換性ポリシーおよび非推奨ポリシー
この文書は、API(Application Programming Interfaces)の新バージョンが旧バージョンとの互換性を保つことを保証するために、 IBM Verify が従う一連のガイドラインとプラクティスを定義している。 さらに、APIの段階的な廃止に対応するために実施されたプロセスの概要も記載されている。
互換性ポリシー
可能な場合は、REST リソースおよびその表現は、以前のバージョンと互換性のある形で維持されます。 以前のバージョンと互換性のない形でコントラクトを変更する必要がある場合は、新しい表現で新しいリソース、メディア・タイプ、またはバージョンが作成されます。 古いリソースまたはメディア・タイプは、API 非推奨ポリシーに従って維持されます。注: API の動作は、セキュリティーの脆弱性を構成する場合、警告なしで変更される可能性があります。 変更に関する通知は 「新着情報」 に含まれています。
以前のバージョンとの互換性がある変更または非破壊的な変更
- 既存の API リソースを拡張できるリソース URI の追加
- この変更は一般的に安全です。 ただし、この変更では、この変更と競合するコードを生成する可能性がある一般的なクライアント・フレームワークについて考慮する必要があります。 以下の例に、クライアントで生成されるコードを破壊する可能性のある、避ける必要がある変更のタイプを示します。
- API が /v1.0/foo/bar に存在しているものとします。 コード生成プログラムは、クライアント・メソッドとして
GetBarを生成する可能性があります。 新しい API が /v1.0/foo/{param} ({param}は任意のストリング) で導入されると、コード生成プログラムが新しいクライアント・メソッドをGetFoo(String param)として生成する可能性があります。 この変更により、GetBarで組み込まれていたロジックが呼び出されなくなるため、クライアントで破壊的な変更が生じる可能性があります。 - 現行パス /v1.0/foo/bar で、クライアントで生成されたコード
GetBarおよびGetBarAsyncが生じることがあるものとします。 API /v1.0/foo/Async を追加すると、この生成されたコードと競合します。
- API が /v1.0/foo/bar に存在しているものとします。 コード生成プログラムは、クライアント・メソッドとして
- API インターフェースへの HTTP メソッドの追加
- この変更は、この変更前の要求ペイロードが引き続き存在し、同じように動作するという条件の下で安全です。 既存の API 要求本文に、あるいは照会ストリング・パラメーターとして、オプションのフィールドが追加されることがあります。
- オプションの要求ヘッダーの追加
- この変更は、この変更前の要求が引き続き同じように応答するという条件の下で安全です。
- 既存のプロパティーへの許可値の追加
- API では、ストリングを使用してプロパティーを表し、制約された値のリストを許可します。 例えば、リソース内の
typeを文書化して、リソース・タイプの現行リストを列挙できます。 クライアントは、明確に適宜されたenum型の厳密なデシリアライゼーションを使用するのではなく、これらのタイプの汎用ストリングを使用する必要があります。 複数の可能な値を持つプロパティーを受け入れるリソースは、追加の値を許可するように拡張されることがあります。 この新しい値により、対応する新しいプロパティーおよび検証ルールが導入されることがあります。 クライアントは、無効なenum値が含まれた要求を行ってエラー応答を予期するなどして、存在しないenum値に対して検証しないようにする必要があります。存在するプロパティー値では引き続き、既存の動作がサポートされます。 リソース・タイプでの分岐ロジックなどが含まれているクライアント・コードは、以前と同様に機能します。
- 応答へのオプションのフィールド/ヘッダーの追加
いつでも、オプションのフィールドおよびヘッダーが API 応答に追加されることがあります。 クライアントは、そのような変更に合わせて調整する必要があります。
- API 応答でのエラー・メッセージおよびリソース説明の変更
- エラー応答内の
messageIdフィールドは変更不能とみなされ、エラー状態または事例の記述されたリストを常にカバーする必要があります。 このメッセージに関連した説明は変更されることがありますが、ユーザーに対するメッセージの意味は変更されません。クライアントは、
messageDescription属性に基づいたロジックを構築してはなりません。 - エラー・メッセージ ID のスコープの増大
messageIdフィールドは、1 つ以上のエラー状態を指します。 このmessageIdは、いつでも、さらに多くのエラー状態をカバーするように拡張されることがあります。 ただし、そのような拡張は、恣意的ではなく、論理的でなければなりません。 新しいエラー状態は、当該メッセージによってカバーされている既存のエラー状態と密接に関係している必要があります。- レート制限のヘッダーおよびエラー
API の存続期間において API エンドポイントでレート制限が調整されることがあり、これにはバージョンの更新は不要です。
要求が多すぎることを示す HTTP 状況コード 429 を受け取るクライアントは、調整を行う必要があります。
破壊的な変更
- API リソース・エンドポイントまたは HTTP メソッドの削除または名前変更
- このタイプの変更は、API を使用しているクライアントを破壊するため、許可されません。ただし、強いセキュリティー上のニーズのためにこの変更を行う必要がある場合を除きます。 このような変更を回避するためにあらゆる努力が行われています。
enum値の削除または名前変更enumの値は追加されることはありますが、削除することはできません。- フィールドの
typeの変更 一般的に、フィールドの
typeは変更してはなりません。 ただし、API 実装で以前のtypeを受け入れ、以前のtypeで応答できる場合は、この変更は以前のバージョンとの互換性があるものとみなされます。- 既存の要求の可視の動作の変更
以前に要求の結果として特定のアクションまたは応答が生じていた場合、引き続き、同様に動作する必要があります。 唯一の例外は、新しいエラー・メッセージ、HTTP 状況コード、要求フィールド、応答フィールドの形で既存のコントラクトに許可される拡張です。
非推奨ポリシー
API が非推奨になった場合の潜在的な問題を緩和するために、以下の通知が出されます。 非推奨の期間は 12 カ月です。
- 非推奨化の通知
- 示されている有効期限日の少なくとも 12 カ月前に、以下のチャネルを使用して API 非推奨化の通知が出されます。
- Swagger
- Swagger は、利用者に対する API コントラクトを定義します。 非推奨になる API は、タグ
deprecatedでマークされます。 - サンセットAPI HTTP レスポンスヘッダー
- 廃止予定のAPIは、リソースが利用できなくなる日付を示す
SunsetHTTP を返します。LinkHTTP レスポンスヘッダーは、API 終了ポリシー情報への URI を提供します。SunsetHTTP に対するAPIコールを監視し、廃止予定のAPIからの移行に十分な時間を確保してください。 - IBM Documentation
- 「新機能」セクションに、非推奨化に関する通知が、詳細情報へのリンクとともに記載されます。 この情報は、API、非推奨化されるバージョン、置き換えのバージョン、および有効期限日を示します。 この通知は、API が有効期限日に達するまで続けられます。
- 非推奨化日
- 冗長になった IBM Documentation コンテンツはすべて削除されます。
- 非推奨になった API のすべての Swagger 資料が削除されるか、非表示になります。