2013-09-23 7 views
24

バージョニングのRESTfulサービスに関する多くのStack Overflow(およびその他の)記事を読んでいます。 正直言って、圧倒しています。ベンダーのMIMEタイプ(APIのバージョン管理用)

クライアントが特定のバージョンのリソースをリクエストできるように、私は(縁どりの)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. これは意味をなさないものですが、既存のタイプを使用することはできますが、バージョンを追加することは可能ですか?バージョンおよびタイプを追加するために許容可能なフォーマット(例えば-V2 + JSON)がある何

    Accept: application/json-v2 
    
  5. (現在のAPIは、 "アプリケーション/ JSON" を返します)。

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

追加の提案があります。もちろん、目標は、特定のリソースに対してサービスが返すものに変更を許可することですが、既存のクライアントを破ることはありません。

+1

x-接頭辞は推奨されていません。それがまだ使用されている場合は、実際に両方が必要になります。 "vnd。"ベンダープレフィックスです。それでも有効です。ベンダー固有のMIMEタイプを使用する場合は、常に使用する必要があります。 – yam655

答えて

3

私はjsonapi.org標準に従うことを決めたように、私はあなたの例が示すだけで何行うことを決めました。ご質問については

  1. あなたのMIMEタイプは、彼らがユニークな種類がありますように記載されているよう
  2. x-プレフィックスが推奨されていません、私は各バージョンとタイプが登録されるべきであると信じている
  3. 登録する必要がありますコメント
  4. application/json-v2はあなたが415 Unsupported Media Typeまたは単に400 Bad Requestを返すことができ
  5. 有効ではありません
+1

あなたは 'application/vnd.mycompany.myapp.customer + json;のようなものを考えましたか?バージョン= 2.0' –

+2

[415](https://tools.ietf.org/html/rfc7231#section-6.5.13)は、**要求ペイロード**がサーバーによってサポートされていない形式であることを意味します。 [406](https://tools.ietf.org/html/rfc7231#section-6.5.6)よりOPのニーズに合っている。 – sp00m