我正在开发一个使用 RESTFul 技术的请愿网站。
例如:/petition/1 标识某个 petiton(资源)。
我该如何命名
a) 签署请愿书?
/请愿书/签名/1 或者 /请愿书/1/签名 或者 ???
b) 根据术语(例如,rich)搜索请愿书
/请愿/搜索/丰富 /请愿?搜索=丰富
最后
c) 仅查看特定类别
/请愿书/类别/1 /请愿书?category=1
谢谢。
最佳答案
正如 @BrianDriscoll 在他的评论中提到的,在 REST 架构中创建资源的 URL 时,您必须小心保持 URL 只是名词(事物 在您的应用程序中),动词是 HTTP 方法。
既然这一点已经解决了,我们可以开始深入了解应用程序中的名词到底是什么。从表面上看,您的域中基本上有 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/