我正在创建一个Web服务,我对路径名有一些疑问。如何在RESTful Web服务中的资源中指定操作?命名RESTful路径
例如:测验资源。你有正常的CRUD操作,你也想在测验中做些事情。如产生一个新的测验。这是一个行动。你使用类似/quiz/top5
或/quiz?type=top5
的路径还是什么?
我不明白在创建RESTful服务时如何编写对资源执行操作的路径。
我正在创建一个Web服务,我对路径名有一些疑问。如何在RESTful Web服务中的资源中指定操作?命名RESTful路径
例如:测验资源。你有正常的CRUD操作,你也想在测验中做些事情。如产生一个新的测验。这是一个行动。你使用类似/quiz/top5
或/quiz?type=top5
的路径还是什么?
我不明白在创建RESTful服务时如何编写对资源执行操作的路径。
我就从apigee推荐这本电子书:Web API Design: Crafting Interfaces that Developers Love。
按照他们的建议:
+------------+-------------------+--------------+----------------------------------------+------------------+ | Resource | POST create | GET read | PUT update | DELETE delete | | /quizzes | Create a new quiz | List quizs | Bulk update quizs | Delete all quizs | | /quizes/12 | Error | Show Quiz 12 | If exists update Quiz 12, if not Error | Delete Quiz 12 | +------------+-------------------+--------------+-----------------------------------------+------------------+
关于你想要的顶级目录,也许类似于他们的“分页和部分缓解”一节中勾勒出一个解决方案可满足您的需求:
quizzes/top?limit=5
通过这种方式,您可以首先制作具有默认值(5或10个项目)的资源quizs/top
,然后提供分页/更改项目数量的功能。
这真的取决于你 - RESTful模式不要求命名约定。
What are the best/common RESTful url verbs and actions?这可能对你有帮助吗?
只要路线合理:例如测验/显示/ {编号},测验/顶部/ {编号}等...
编辑:添加回答评论围绕路线行动命名,取自Rails公约。 http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions
那么如何编写在资源上触发“进程”的路径呢?我的意思是像一个动作,而不仅仅是CRUD路径? – LuckyLuke 2013-04-09 15:03:34
查看编辑abouve ... – diagonalbatman 2013-04-09 15:04:21
在另一个答案他说,你应该使用URL来指定对象,而不是动作。嗯...所以你使用“top”指定对象的例子? – LuckyLuke 2013-04-09 15:07:10
这是你喜欢的。我个人比较喜欢的方式,last.fm API的工作原理:
但是,如果你在寻找一些不错的标准,看看这个帖子:
我推荐阅读这个回答https://stackoverflow.com/a/11170376/300886到类似的问题。
一般来说,你应该考虑你的API的哪些部分应该可以通过GET获得,哪些通过POST获得。通过GET可用的资源通常应该使用名词来描述,动作(比如可能发布测验的答案)应该可以通过使用动词描述的POST(或DELETE,可能)来描述,可能在名词 - 资源的名称之后该行为已被采纳。
如this文章中所解释的,其更适于使用目录结构作为REST URL。
的URL像/{type}/{operation}/{param1}/{param2}...
看起来更加直观和maitainable(帕拉姆可以作为经典?=
,如果他们有太多的传递)
所以在你的情况下,可以/quiz/top/5
或者明天应该是前100,则同样能为/quiz/top/100
我会使用'/ quiz/generate/123'作为id'123' – 2013-04-09 15:00:08
我会使用'/ quiz/{id}' – 2013-04-09 15:00:41