5

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

例如:测验资源。您有正常的 CRUD 操作,并且您还想对测验做一些事情。比如生成一个新的测验。那是一个动作。您是否使用类似/quiz/top5or/quiz?type=top5或什么的路径?

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

4

6 回答 6

1

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

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

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

什么是最好的/常见的 RESTful url 动词和动作?

如何创建没有动词的 REST URL?

于 2013-04-09T15:03:34.013 回答
1

我会推荐来自apigee的这本电子书:Web API 设计:制作开发人员喜爱的界面

听从他们的建议:

  • 实用 RESTful 设计的第一条原则是:让简单的事情变得简单。
  • 保持您的基本 URL 简单直观。
+------------+-------------------+--------------+----------------------------------------+------------------+
| 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

有了这个,您可以首先制作quizs/top具有默认值(5 或 10 个项目)的资源,然后提供分页/更改项目数量的能力。

于 2013-04-09T15:33:35.117 回答
0

这完全取决于您 - RESTful 模式不规定命名约定。

什么是最好的/常见的 RESTful url 动词和动作?这可以帮助你吗?

只需让路线合理:例如 quiz/show/{id}、quiz/top/{number} 等...

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

于 2013-04-09T15:00:34.253 回答
0

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

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

于 2013-04-09T15:04:50.127 回答
0

如本文所述,最好对 REST URL使用类似目录的结构

像这样的网址/{type}/{operation}/{param1}/{param2}...

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

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

于 2013-04-09T15:08:39.107 回答
0

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

例如:

/quiz/top5
  • HTTP GET:客户端请求查看测验top5,这是否意味着创建一个新的?或者这是否意味着显示现有的?这取决于您(GET 的约定是在不改变服务器状态的情况下请求对象)。
  • HTTP POST:客户端请求持久化更改
于 2013-04-09T15:22:06.047 回答