在这种情况下如何命名RESTFUL资源

时间:2012-03-20 13:42:07

标签: ruby-on-rails rest

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

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

我该如何命名

a)签署请愿书?

/请愿/签名/ 1 要么 /请愿/ 1 /符号 要么 ???

b)根据条款(例如,丰富)搜索请愿书

/请愿/搜索/富 /上访?搜索=富

最后

c)仅查看某个类别

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

谢谢。

2 个答案:

答案 0 :(得分:4)

正如@BrianDriscoll在他的评论中提到的,在为REST架构中的资源创建URL时,必须小心保持URL 只是名词( thing < / em>在你的应用程序中)和动词是HTTP方法。

现在我们可以开始深入研究你的应用程序中的名词究竟是什么了。从它的外观来看,你的域中基本上有3个“东西”(或 nouns ):

  1. 请愿
  2. 请愿签名
  3. 请愿类别
  4. 假设请愿签名只能应用于一份请愿书,我希望以下网址格式代表您的资源:

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

    然后,使用这些资源,您可以使用HTTP谓词来操纵资源:

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

    最后,对于搜索,您只需将查询字符串传递到/petititions网址,如下所示:

    GET /petitions?query=blah
    

    查询可以是搜索引擎所需的任何内容,它应返回与该查询匹配的请愿列表。对于在一个类别中的请愿书或请愿书中搜索签名也是如此。

    这应该足以让你现在开始运行。最终,它归结为决定你的应用程序需要的那些东西的“东西”和表示,然后URL只是这些东西的“名称”,就像地址是房子的“名称”。与这些资源(事物)的交互是通过不同的HTTP动词完成的。

    这只是揭示了REST体系结构的真正力量的表面,其中包括定义内容类型以便客户端知道如何导航域,以及使用超文本作为应用程序状态的引擎以便客户端实际< em> 服务器上的导航。

答案 1 :(得分:1)

我愿意

  • POST到/ petitions / 1 /签名
  • GET to / petitions?query = rich
  • 获取/类别/ 1 /请愿(假设您需要一个类别中的请愿列表)

对于铁路线路,它将是:

resources :categories do
  resources :petitions
end

resources :petitions do
  resources :signatures
end