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

vam*_*min 4 rest

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

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

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

Dar*_*ler 7

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

我会说以下任何一个都是非常自我解释的

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

POST http://api.example.org/RandomNumberMachine
Run Code Online (Sandbox Code Playgroud)

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

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

你可以做到

GET http://api.example.org/Summation?Values=2,4
Run Code Online (Sandbox Code Playgroud)

要么

POST http://api.example.org/AddingMachine
Run Code Online (Sandbox Code Playgroud)

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

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

很多年前人们会争论它们之间的区别

apple.bite()
Run Code Online (Sandbox Code Playgroud)

bite(apple)
Run Code Online (Sandbox Code Playgroud)

并不重要.我认为现在太多人不会忽视这种区别.