仕組み
APIのバージョンは、クライアントが依存する仕様を区別します。
たとえば、同じ price でも、型を変えると既存の処理が壊れます。
v1
{
"price": 1200
}
v2
{
"price": {
"amount": 1200,
"currency": "JPY"
}
}
このような互換性のない変更を、既存利用者に強制しないための仕組みです。
代表的な3方式
| 方式 | 例 | 利点 | 注意点 |
|---|---|---|---|
| URIのパス | /v1/products |
URLを見れば分かる。ルーティングしやすい | バージョンごとにURLやリンクを管理する |
| ヘッダー | API-Version: 1 |
URLを保ったまま切り替えられる | URLだけでは判別できず、キャッシュ設定にも配慮が必要 |
| クエリ | /products?api-version=1 |
指定しやすく、URLにも現れる | 指定漏れの扱いとキャッシュキーを決める必要がある |
いずれも実際に使われる方式です。Microsoftの設計資料でも、それぞれのトレードオフが示されています。Microsoft:APIのバージョン管理
ヘッダー方式とキャッシュ
同じURLでヘッダーにより結果が変わる場合、キャッシュも区別する必要があります。
Vary: API-Version
これは、そのヘッダーの値に応じてレスポンスが異なることを伝えます。CDNなどの設定が、その区別を正しく反映しているかも確認します。
番号の置き場所より重要なこと
実務では、次を決めておく必要があります。
- どの変更を「互換性のない変更」とするか。
- 旧バージョンをいつまで維持するか。
- 廃止予定を利用者へどう伝えるか。
- 旧バージョンの利用者が残っているか、どう確認するか。
フィールド追加も、常に安全とは限りません。未知のフィールドを拒否するクライアントや、列挙値を網羅的に処理する実装では、追加でも問題が起きます。
設計上の要点
バージョン管理の目的は、番号を付けることではなく、利用者が移行できる状態を保つことです。