在什么情况下,客户端应该为REST URI选择唯一的资源ID,服务器应该在哪个位置指定它?

时间:2011-06-08 20:02:29

标签: api http rest uri

看起来我有两种方法可以制作我的REST API。我可以使用POST创建用户而不指定URI,它将创建用户并返回URI或者我可以创建具有PUT的用户并指定URI 他们自己

何时应该使用另一个?这里的关键区别在于,在一种方法中,我的系统决定了资源的唯一ID和URI,在另一种情况下,他们正在指定创建时应该是什么。

4 个答案:

答案 0 :(得分:2)

这主要取决于您是否愿意放弃对客户端的资源命名控制。

最大的问题只是处理冲突(如果我PUT /photo.png和你PUT /photo.png,那可以吗?)。

回答这些问题,然后你就开始了。

答案 1 :(得分:0)

当您的用户指定资源ID时,他们可以PUT到URI;他们执行PUT的ID是资源ID的规范。

当您指定资源ID时,他们可以POST到父/组的URI;您的系统将为资源分配一个URI,并将其返回给客户端,以便他们可以引用其创建的资源。

答案 2 :(得分:0)

这个问题的答案取决于两个更具体的问题:

  • 客户是否知道要创建的资源的位置? (例如,如果用户是通过用户的名称而不是服务器分配的ID访问的,则可能就是这种情况。)
  • 客户是否有要创建的资源的完整表示? (如果资源的某些部分由服务器计算,则可能。)

如果这两个问题的答案都是“是”,那么PUT可能是合适的。如果您对其中任何一个回答“否”,那么您应该坚持使用POST。

答案 3 :(得分:0)

  

我可以通过POST创建用户   没有指定URI,它会   创建用户并返回URI OR   我可以用a创建用户   PUT 并自己指定URI

     

何时应该使用   其他

使用第一个。

在RESTful HTTP中,客户端从不构造URI。该服务应该连接良好,这意味着客户端应该只遵循服务器给出的URI并向这些URI发出请求。

它可以在客户端和服务器之间创建更好的分离,并且可以在不破坏现有客户端的情况下更轻松地对服务进行更改。

(是的,现有API的很多错误)

Fielding有一篇非常好的帖子与此主题相关:

http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven