我部分不同意 Milan 关于将请求的表示嵌入到 URI 中的建议。
如果可能的话,URI 应该only用于寻址资源和not用于隧道 HTTP 方法/动词。最终,如果单独创建 (POST) 或更新 (PUT) 不能达到目的,则可以将特定业务操作(编辑、锁定等)嵌入到 URI 中:
POST http://shonzilla.com/orders/08/165;edit
在请求 URI 中的特定表示的情况下,您需要破坏您的 URI 设计,最终使其变得更加丑陋,在同一位置(即 URI)混合两个不同的 REST 概念,并使服务器端的一般处理请求变得更加困难。米兰的建议以及许多人正在做的事情,包括。 Flickr,正是这样。
相反,更 RESTful 的方法是使用单独的位置来编码首选表示通过使用Accept
HTTP 标头用于内容协商,其中客户端告诉服务器它可以处理/处理哪些内容类型,并且服务器尝试满足客户端的请求。该方法是HTTP 1.1 标准 http://www.w3.org/Protocols/rfc2616/rfc2616-sec12.html、软件兼容并受网络浏览器支持。
比较一下:
GET /orders/08/165.xml HTTP/1.1
or
GET /orders/08/165&format;=xml HTTP/1.1
to this:
GET /orders/08/165 HTTP/1.1
Accept: application/xml
从网络浏览器中,您可以使用以下命令请求任何内容类型setRequestHeader
的方法XMLHttpRequest
目的。例如:
function getOrder(year, yearlyOrderId, contentType) {
var client = new XMLHttpRequest();
client.open("GET", "/order/" + year + "/" + yearlyOrderId);
client.setRequestHeader("Accept", contentType);
client.send(orderDetails);
}
总结一下:地址,即资源的 URI 应该独立于它的表示和XMLHttpRequest.setRequestHeader
方法允许您使用以下方式请求任何表示Accept
HTTP 标头。
Cheers!
尚齐拉