我正在创建一个 Web 服务,但我对路径名有一些疑问。如何在 RESTful Web 服务中指定对资源的操作?
例如:测验资源。您有正常的 CRUD 操作,并且您还想对测验做一些事情。比如生成一个新的测验。那是一个动作。您是否使用类似/quiz/top5
or/quiz?type=top5
或什么的路径?
我不明白您在创建 RESTful 服务时如何编写对资源执行操作的路径。
我正在创建一个 Web 服务,但我对路径名有一些疑问。如何在 RESTful Web 服务中指定对资源的操作?
例如:测验资源。您有正常的 CRUD 操作,并且您还想对测验做一些事情。比如生成一个新的测验。那是一个动作。您是否使用类似/quiz/top5
or/quiz?type=top5
或什么的路径?
我不明白您在创建 RESTful 服务时如何编写对资源执行操作的路径。
这是你喜欢的。我个人喜欢 last.fm API 的工作方式:
但是,如果您正在寻找一些不错的标准,请查看以下帖子:
我会推荐来自apigee的这本电子书:Web API 设计:制作开发人员喜爱的界面。
听从他们的建议:
+------------+-------------------+--------------+----------------------------------------+------------------+ | 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 个项目)的资源,然后提供分页/更改项目数量的能力。
这完全取决于您 - RESTful 模式不规定命名约定。
什么是最好的/常见的 RESTful url 动词和动作?这可以帮助你吗?
只需让路线合理:例如 quiz/show/{id}、quiz/top/{number} 等...
编辑:添加对路由操作命名评论的答案,取自 Rails Convention。 http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions
我建议阅读此答案https://stackoverflow.com/a/11170376/300886来回答类似的问题。
一般来说,您应该考虑 API 的哪些部分应该通过 GET 可用,哪些通过 POST 可用。通过 GET 获得的资源通常应该用名词来描述,动作(比如可能发布一个测验的答案)应该通过 POST(或者 DELETE,也许)使用动词来描述,也许在名词之后 - 资源的名称采取行动。
如本文所述,最好对 REST URL使用类似目录的结构。
像这样的网址/{type}/{operation}/{param1}/{param2}...
看起来更直观和可维护(如果参数太多,可以作为经典传递?=
)
所以在你的情况下它可以是/quiz/top/5
或者如果明天它应该是前 100 名,那么同样可以重复使用/quiz/top/100
URL 标识您的对象。HTTP 方法指定服务器应该对对象执行的操作(或操作)。
例如:
/quiz/top5