39

RESTful サービスのバージョン管理に関する Stack Overflow (およびその他) の投稿を多数読みました。正直なところ、少し圧倒されます。

クライアントがリソースの特定のバージョンを要求できるように、(わずかに) RESTful サービスに Accept: ヘッダーを使用することにしました。私がはっきりしていないのは、 Accept ヘッダーで何を指定するかです。

私がよく目にする例は次のとおりです。

Accept: application/vnd.mycompany.myapp.customer-v2+json

私の質問は次のとおりです。

  1. すべての vnd タイプを登録する必要があるというのは正しいですか? ( http://www.iana.org/cgi-bin/mediatypes.pl )

  2. バージョンとタイプ (つまり -v2+json) はタイプの一部なので、各バージョンとタイプを登録する必要がありますか?

  3. 登録する必要のない「x-」サブタイプの代わりに vnd を使用する理由はありますか? 例えば:

    Accept: application/x-mycompany.myapp-v2+json
    

    既存の API は内部のみですが、将来的には顧客に公開される予定です。

  4. これが理にかなっているかどうかはわかりませんが、既存のタイプを使用してバージョンを追加することは可能ですか? (現在の API は「application/json」を返します)

    Accept: application/json-v2
    
  5. バージョンとタイプを追加するために使用できる形式は何ですか (例: -v2+json)。

  6. クライアントがサポートされていないバージョンを要求した場合はどうなりますか? 正しい応答は 406 ですか? クライアントは任意のバージョンを要求できますか? または、より一般的には、クライアントが Accept ヘッダーまたは Accept: */* を提供しない場合はどうなるでしょうか?

追加の提案を歓迎します。もちろん、目標は、特定のリソースに対してサービスが返すものを変更できるようにすることですが、既存のクライアントを壊さないようにすることです。

以下は、私が最近見たリソースの短いリストです。

4

1 に答える 1

4

私はjsonapi.org標準に従うことにしたので、あなたの例が示すことだけを行うことにしました。

ご質問について:

  1. MIME タイプを登録する必要があります
  2. 固有のタイプなので、各バージョンとタイプを登録する必要があると思います
  3. x-コメントに記載されているように、プレフィックスは廃止されました
  4. application/json-v2有効ではありません
  5. 戻る415 Unsupported Media Typeか、単に400 Bad Request
于 2014-07-22T14:27:49.477 に答える