我部分不同意 Milan 将请求的表示嵌入 URI 的建议。
如果可能的话,URI 应该只用于寻址资源而不是隧道 HTTP 方法/动词。最终,如果仅创建 (POST) 或更新 (PUT) 无法达到目的,则可以将特定的业务操作(编辑、锁定等)嵌入 URI:
发布 http://shonzilla.com/orders/08/165;编辑
在请求 URI 中的特定表示的情况下,您将需要破坏您的 URI 设计,最终使其变得更丑陋,在同一个地方(即 URI)混合两个不同的 REST 概念,并使其更难在服务器端通用处理请求。米兰的建议和许多人都在做同样的事情,包括。Flickr,正是这个。
相反,更 RESTful 的方法是使用单独的位置来编码首选表示,方法是使用Accept
HTTP 标头进行内容协商,其中客户端告诉服务器它可以处理/处理哪些内容类型,服务器尝试满足客户端的请求。这种方法是HTTP 1.1 标准的一部分,软件兼容并受 Web 浏览器支持。
比较一下:
获取 /orders/08/165.xml HTTP/1.1
或者
获取 /orders/08/165&format=xml HTTP/1.1
对此:
GET /orders/08/165 HTTP/1.1
接受:application/xml
在网络浏览器中,您可以使用对象setRequestHeader
方法请求任何内容类型XMLHttpRequest
。例如:
函数 getOrder(year, yearlyOrderId, contentType) {
var client = new XMLHttpRequest();
client.open("GET", "/order/" + year + "/" + yearlyOrderId);
client.setRequestHeader("接受", contentType);
client.send(orderDetails);
}
总而言之:地址,即资源的 URI 应该独立于其表示,XMLHttpRequest.setRequestHeader
方法允许您使用Accept
HTTP 标头请求任何表示。
干杯!
松兹拉