RESTful サービスのバージョン管理に関する Stack Overflow (およびその他) の投稿を多数読みました。正直なところ、少し圧倒されます。
クライアントがリソースの特定のバージョンを要求できるように、(わずかに) RESTful サービスに Accept: ヘッダーを使用することにしました。私がはっきりしていないのは、 Accept ヘッダーで何を指定するかです。
私がよく目にする例は次のとおりです。
Accept: application/vnd.mycompany.myapp.customer-v2+json
私の質問は次のとおりです。
すべての vnd タイプを登録する必要があるというのは正しいですか? ( http://www.iana.org/cgi-bin/mediatypes.pl )
バージョンとタイプ (つまり -v2+json) はタイプの一部なので、各バージョンとタイプを登録する必要がありますか?
登録する必要のない「x-」サブタイプの代わりに vnd を使用する理由はありますか? 例えば:
Accept: application/x-mycompany.myapp-v2+json
既存の API は内部のみですが、将来的には顧客に公開される予定です。
これが理にかなっているかどうかはわかりませんが、既存のタイプを使用してバージョンを追加することは可能ですか? (現在の API は「application/json」を返します)
Accept: application/json-v2
バージョンとタイプを追加するために使用できる形式は何ですか (例: -v2+json)。
クライアントがサポートされていないバージョンを要求した場合はどうなりますか? 正しい応答は 406 ですか? クライアントは任意のバージョンを要求できますか? または、より一般的には、クライアントが Accept ヘッダーまたは Accept: */* を提供しない場合はどうなるでしょうか?
追加の提案を歓迎します。もちろん、目標は、特定のリソースに対してサービスが返すものを変更できるようにすることですが、既存のクライアントを壊さないようにすることです。
以下は、私が最近見たリソースの短いリストです。
- API のバージョン管理のベスト プラクティスは?
- REST URI をバージョン管理する方法
- REST API のバージョン管理 (リソース自体ではなく、表現のみをバージョン管理する)
- http://www.lexicalscope.com/blog/2012/03/12/how-are-rest-apis-versioned/
- http://www.subbu.org/blog/2008/05/void-versioning-please
- http://www.informit.com/articles/article.aspx?p=1566460
- http://en.wikipedia.org/wiki/Internet_media_type#Prefix_vnd
- http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1