我会部分不同意米兰关于将请求的表示形式嵌入URI的建议。
如果可能,URI应该仅用于寻址资源,而不用于隧道HTTP方法/动词。最终,如果仅创建(POST)或更新(PUT)不能达到目的,则可以将特定的业务操作(编辑,锁定等)嵌入URI:
POST http://shonzilla.com/orders/08/165;编辑
在请求URI中的特定表示形式的情况下,您将需要破坏URI设计,最终使其变得更丑陋,在同一位置(即URI)混合两个不同的REST概念,并使在服务器端进行一般处理请求变得更加困难。米兰在暗示什么,许多人正在这样做,包括。Flickr,就是这样。
取而代之的是,更RESTful的方法是使用单独的位置通过使用Accept
HTTP头对首选表示进行编码,该HTTP头用于内容协商,其中客户端告诉服务器它可以处理/处理的内容类型,服务器尝试满足客户端的请求。此方法是HTTP 1.1标准的一部分,该标准也与网络浏览器兼容并受其支持。
比较一下:
GET /orders/08/165.xml HTTP / 1.1
要么
GET / orders / 08/165&format = xml HTTP / 1.1
对此:
GET / orders / 08/165 HTTP / 1.1
接受:application / xml
在Web浏览器中,您可以使用objectsetRequestHeader
方法请求任何内容类型XMLHttpRequest
。例如:
函数getOrder(year,AnnualOrderId,contentType){
var client = new XMLHttpRequest();
client.open(“ GET”,“ / order /” +年+“ /” + AnnualOrderId);
client.setRequestHeader(“ Accept”,contentType);
client.send(orderDetails);
}
总结一下:地址,即资源的URI应该独立于其表示形式,并且XMLHttpRequest.setRequestHeader
方法允许您使用Accept
HTTP标头请求任何表示形式。
干杯!
肖纳斯