命名RESTful路径

时间:2013-04-09 14:58:16

标签: c# java web-services

我正在创建一个Web服务,我对路径名有一些疑问。如何在RESTful Web服务中指定对资源的操作?

例如:测验资源。你有正常的CRUD动作,你也想做测验。比如生成新的测验。这是一个动作。您是使用/quiz/top5/quiz?type=top5之类的路径还是使用什么?

我不明白在创建RESTful服务时如何编写对资源执行操作的路径。

6 个答案:

答案 0 :(得分:1)

这是你喜欢的。我个人喜欢last.fm API的工作方式:

http://www.last.fm/api/intro

但如果您正在寻找一些不错的标准,请查看以下帖子:

What are the best/common RESTful url verbs and actions?

How to create REST URLs without verbs?

答案 1 :(得分:1)

我会从apigee Web API Design: Crafting Interfaces that Developers Love推荐这本电子书。

遵循他们的建议:

  • 务实的RESTful设计中的首要原则是:保持简单 事情很简单。
  • 保持您的基本网址简单直观。
+------------+-------------------+--------------+----------------------------------------+------------------+
| 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,然后提供分页/更改项目数量的功能。

答案 2 :(得分:0)

这真的取决于你 - RESTful模式不会规定命名约定。

What are the best/common RESTful url verbs and actions?这对你有帮助吗?

让路线合理:例如测验/显示/ {id},测验/顶部/ {数字}等...

编辑:添加关于路线操作命名的评论答案,取自Rails Convention。 http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions

答案 3 :(得分:0)

我建议您将此答案https://stackoverflow.com/a/11170376/300886阅读为类似的问题。

通常,您应该考虑通过GET提供API的哪些部分,以及通过POST提供哪些部分。通过GET可用的资源通常应该使用名词来描述,操作(比如可能发布测验的答案)应该通过使用动词描述的POST(或DELETE,也许)来提供,也许在名词之后 - 资源名称采取行动。

答案 4 :(得分:0)

this文章中所述,最好对REST URL使用目录,如

/{type}/{operation}/{param1}/{param2}...

这样的网址

看起来更直观和可维护(如果太多,param可以作为经典?=传递)

所以在你的情况下它可以是/quiz/top/5,或者如果明天它应该前100 ,那么同样可以重用为/quiz/top/100

答案 5 :(得分:0)

网址标识您的对象。 HTTP方法指定服务器应对对象执行的操作(或操作)。

例如:

/quiz/top5
  • HTTP GET :客户端请求查看测验top5,这是否意味着创建一个新的?或者这意味着显示现有的?这取决于你(GET的约定是在不改变服务器状态的情况下请求对象)。
  • HTTP POST :客户端请求保留更改