【发布时间】:2011-12-29 23:50:28
【问题描述】:
我知道这件事已经被反复讨论过,并且我已经进行了广泛的研究以了解我目前的情况,但似乎无法克服最后的障碍。
我正在为我们的应用程序设计一个自定义 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>neil.armstrong@space.com</email>
</contact>
问题是我想使用 Atom 提要和条目来表示我的资源集合。这样我就可以利用 Atom 的搜索和分页,而不会感染我的资源或 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>neil.armstrong@space.com</email>
</contact>
</content>
</entry>
</feed>
使用 Atom 来表示我的资源集合,我失去了使用媒体类型进行版本控制的能力。因为媒体类型现在隐藏在 Atom 条目的内容中。
<content type="application/vnd.mycompany.contact-v2+xml">
确定资源的媒体类型版本,同时仍利用 Atom 的强大功能进行资源收集管理的最佳做法是什么?
我的想法是我可以通过 ACCEPT 标头传递它,例如
Accept: application/atom+xml; type=feed; version=1.0
但这很令人困惑,因为您要求的是 Atom 提要的 1.0 版,而不是资源本身......
任何帮助将不胜感激!
【问题讨论】:
标签: rest api versioning atom-feed