如何处理RESTful上下文中的动态资源?

时间:2009-05-06 23:02:15

标签: rest

根据我对REST原则的理解,URL应该代表单个资源,如用户或产品。您如何处理随机或动态生成的资源?

假设我创建了一个名为api.example.com/integer的资源,它返回一个随机整数。我还会使用GET来检索整数吗? POST,PUT和DELETE在这种情况下意味着什么?

代表行为的网址怎么样?假设我创建了一个名为api.example.com/add的资源,它返回两个数字的总和。如果我想使用此资源,我是否使用GET或POST提交要添加的号码?

4 个答案:

答案 0 :(得分:7)

并不要求所有资源都支持所有动词。这就是OPTIONS动词用来找出支持的动词。

我想说以下任何一种都是非常自我解释的

GET http://api.example.org/RandomInteger

POST http://api.example.org/RandomNumberMachine

两者都有效。请注意,GET请求可能会被缓存。如果确实如此,那么您将无法获得随机结果。

REST背后的一个主要原则是你的网址模型代表名词,而不是动词。所以http://api.example.com/add不是理想的网址。

你可以做到

GET http://api.example.org/Summation?Values=2,4

POST http://api.example.org/AddingMachine

使用一些包含要添加的数字的标准格式实体主体。

从表面上看,似乎很迂腐,区分以“添加”结尾的网址和以“总结”结尾的网址。但是,这是一个非常简单的示例,REST约束可以指导您实现对分布式系统具有某些所需特性的设计。

许多年前人们会争论

之间的区别
apple.bite()

bite(apple)

并不重要。我认为太多人不会忽视这些日子的区别。

答案 1 :(得分:3)

我认为GET适合随机数。你根本就不允许对该资源进行POST,PUT或DELETE。

总之,为什么不呢:

getSum?加数= 3,5,8

回应是16。

POST is for when您希望“原始服务器接受请求中包含的实体作为请求行中Request-URI标识的资源的新下属。”

在这种情况下,服务器不需要永久接受/记住加数,因此POST不合适。

答案 2 :(得分:3)

资源是一种资源。它可以在其生命周期内改变,变异,翻转或翻转。第一种情况下的资源不是随机数,而是随机数 generator

正如Darrel所说,并非所有给定资源都支持所有HTTP的RESTful方法。哎呀,我有一个RESTful系统,它有各种收集资源,允许GET(获取集合)和POST(将新资源同时附加到集合和可能的其他集合,然后指向新创建的其他资源支持GET,PUT(用于更新)和DELETE。关于RESTful接口的关键在于它普遍适用 - 即,协议的方法可以合理地以一般方式应用于许多不同类型的资源 - 这是非常普遍使用的,这意味着所有资源都需要实现完整的界面。

HTTPs方法具有明确定义的语义。如果他们的语义以理智的方式应用于您的资源,那么实现它们。如果没有,请不要,或构建一个单独的资源。

在HTTP的上下文中,GET是一种完美的方式,可以像你的求和一样做。看看任何搜索引擎:他们都使用GET进行搜索,这完全是RESTful。请注意,虽然您的浏览器没有关于如何构建代表您的搜索的资源的URL的带外信息,但是通过下载包含表单的页面,它会下载有关如何执行此操作的说明。这是HATEOAS和自我描述的本质的一部分,当你了解更多信息时,你必然会偶然发现。

答案 3 :(得分:-2)

只需使用某种RPC。 REST并不适合各种用途。