2012-03-20 31 views
2

我正在开发使用RESTFul技术的请愿网站。如何在这种情况下命名RESTFUL资源

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

我该如何命名

a)签署请愿书?

/请愿/签名/ 1 或 /请愿/ 1 /签署 或 ???

b)中搜索基于术语(丰富的请愿书,例如)

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

并且最后

c)中仅看到某一类

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

谢谢。

+0

在REST中,URI代表名词,而不是动词。 – 2012-03-20 13:47:26

回答

1

我会做

  • POST到/请愿书/ 1 /签名
  • GET到/请愿?查询=丰富
  • GET到/分类/ 1 /请愿书(假设你想要的清单在一个类别请愿)

对于轨道路线将是:

resources :categories do 
    resources :petitions 
end 

resources :petitions do 
    resources :signatures 
end 
4

正如@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架构,其中包括像定义内容类型,让客户知道如何浏览您的域,并使用超文本作为应用程序状态引擎的真正力量的表面,使客户能实际服务器上的导航。