これは何度も繰り返し議論されていることを知っています。私はこれまでのところどこに行っても最終的なハードルを乗り越えることはできません。リソースコレクションにAtomを使用する場合のREST APIのバージョン管理
私はアプリケーション用のカスタムREST APIを設計しており、メディアタイプを使用してバージョンを変更したいと決めました。アプリケーション/ vnd.mycompany.resource.v2 + xml。私はこのモデルのプロとコンセプトを理解しており、最も柔軟な体重を計るようです。
次のようにそれゆえ私のGETはなります
=== REQUEST ===>
GET /workspaces/123/contacts?firstName=Neil&accessID=789264×tamp=1317611 HTTP/1.1
Accept: application/vnd.mycompany.contact-v2+xml
<== RESPONSE ===
HTTP/1.1 200 OK
Content-Type: application/vnd.mycompany.contact-v2+xml
<contact>
<name>Neil Armstrong</name>
<mobile>+61456838435</mobile>
<email>[email protected]</email>
</contact>
問題は、私は私のリソースのコレクションを表すためのAtomフィードとentrysを使用したいということです。こうすることで、私のリソースやAPI構造に感染していないAtomの検索とページ設定を利用できます。資源の私のコレクションを表現するためにアトムを使用し
=== REQUEST ===>
GET /workspaces/123/contacts HTTP/1.1
Accept: application/atom+xml; type=feed;
<== RESPONSE ===
HTTP/1.1 200 OK
Content-Type: application/atom+xml; type=feed;
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Contacts Feed</title>
<link rel="self" href="https://api.mycompany.com/workspaces/contacts"/>
<updated>2011-11-13T18:30:02Z</updated>
...
<entry>
<title>Neil Armstrong</title>
...
<content type="application/vnd.mycompany.contact-v2+xml">
<contact>
<name>Neil Armstrong</name>
<mobile>+61456838435</mobile>
<email>[email protected]</email>
</contact>
</content>
</entry>
</feed>
、私はメディアタイプを使用してバージョンに能力を失う:私は私の要求のためのAtomを使用している場合
は、私の要求の構造は今のように見えます。メディアタイプがAtomエントリの内容の中に隠されるようになりました。
<content type="application/vnd.mycompany.contact-v2+xml">
まだ資源回収管理のためにアトムの力を利用しながら、私のリソースのメディアタイプのバージョンを決定するためのベストプラクティスは何ですか?
私はACCEPTヘッダーにそれを渡すことができると考えています。
Accept: application/atom+xml; type=feed; version=1.0
しかし、あなたはAtomフィードではなく、リソース自体のバージョン1.0を求めているとして、これは混乱しています...
本当にいただければ幸いですすべてのヘルプ!
非常に詳細な対応をありがとうございます。このユースケースでバージョン管理を有効にするためのきれいな方法はないと思われます。私のURI(/ v1/workspaces)を汚染したり、リクエストパラメータ(?version = 1.0)を汚染したり、メディアタイプ(application/vnd.mycompany.resource.v1-xml)をバージョンで汚染します。 私は、このAPIの設計が必要な時代と状況を考えれば、方向を選択してそれに固執する必要があると思います。 Atomフィード/エントリを使ってコレクションを表現することは良い考えです。これをバージョン管理されたメディアタイプと組み合わせて、バージョンパラメータを使って選択します。 –