ruby-on-rails - 在这种情况下如何命名 RESTFUL 资源

标签 ruby-on-rails rest

我正在开发一个使用 RESTFul 技术的请愿网站。

例如:/petition/1 标识某个 petiton(资源)。

我该如何命名

a) 签署请愿书?

/请愿书/签名/1 或者 /请愿书/1/签名 或者 ???

b) 根据术语(例如,rich)搜索请愿书

/请愿/搜索/丰富 /请愿?搜索=丰富

最后

c) 仅查看特定类别

/请愿书/类别/1 /请愿书?category=1

谢谢。

最佳答案

正如 @BrianDriscoll 在他的评论中提到的,在 REST 架构中创建资源的 URL 时,您必须小心保持 URL 只是名词(事物 在您的应用程序中),动词是 HTTP 方法。

既然这一点已经解决了,我们可以开始深入了解应用程序中的名词到底是什么。从表面上看,您的域中基本上有 3 个“事物”(或名词):

  1. 请愿书
  2. 请愿书签名
  3. 请愿类别

假设请愿书签名只能应用于一个请愿书,我希望以下 URL 模式能够代表您的资源:

  • /petitions - 所有请愿书的列表(请愿书根)
  • /petitions/5 - 单个请愿书
  • /petitions/5/signatures - 单个请愿书的所有签名列表
  • /petitions/5/signatures/7 - 单个请愿书上的单个签名
  • /categories - 所有类别的列表(类别根)
  • /categories/3 - 单个类别(可能是该类别中所有请愿书的列表)

然后,有了这些资源,您就可以使用 HTTP 动词来操作资源:

  • POST/petitions - 创建新的请愿书
  • POST/petitions/9/signatures - 在请愿书上创建新签名
  • 等等

最后,为了进行搜索,您只需将查询字符串传递到您的 /petititions URL,如下所示:

GET /petitions?query=blah

查询可以是搜索引擎所需的任何内容,并且它应该返回与该查询匹配的请愿书列表。这同样适用于搜索请愿书中的签名或类别中的请愿书。

这应该足以让您现在启动并运行。最终,归根结底是决定应用程序需要什么“事物”以及这些事物的表示形式,然后 URL 只是这些事物的“名称”,就像地址是房屋的“名称”一样。与这些资源(事物)的交互是通过不同的 HTTP 动词完成的。

这只是 REST 架构真正威力的冰山一角,其中包括定义内容类型等内容,以便客户端知道如何导航您的域,以及使用超文本作为应用程序状态引擎,以便客户端实际上可以< em>在服务器上进行导航。

关于ruby-on-rails - 在这种情况下如何命名 RESTFUL 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9787963/

相关文章:

ruby-on-rails - Rails 模板 - 将索引添加到 :created_at using generate

java - HQL 查询在运行 SQL 查询时抛出 QueryException

javascript - 使用 React.js 存储在 fetch() 上生成的 token

rest - 为什么我们关心分布式系统中的幂等性

ruby-on-rails - Rails 新的 "-T"选项,它是否创建了一个没有测试的应用程序?

ruby-on-rails - ActiveRecord 验证唯一性,范围允许范围为零

ruby-on-rails - 跨多个环境的 Rails 测试

ruby-on-rails - Rspec:ActionMailer::Base.deliveries 总是空的

rest - 从 Netsuite Web 服务 (Suitetalk) 请求销售订单数据

c# - RabbitMQ,REST API,Docker和Kubernete最佳实践问题