我正在尝试为我的Rest服务创建一个API,我正在努力应对我试图遵循的设计规则。一般来说,我试图遵循(以及其他)这些指导方针:
现在,我必须建模如下:
我正在尝试这样的事情:
GET company/departments
GET company/departments/<depName>
DELETE company/departments
DELETE company/departments {body: department name}
以上,遵循我提到的指南,但我真的不认为结果URI是好的。特别是第四个,做不同的工作,并且具有与第三个相同的URI。
这对我来说是一个常见的问题,我在设计REST服务时遇到过很多次。结果是我总是打破一些设计原则来实现我想要的或制造更丑陋的URI(例如:DELETE公司/部门/部门)。
所以实际的问题是:
在我的设计中,如何删除具有类似Restfull的URI的单个部门?
答案 0 :(得分:4)
RESTful URI的更好设计是使用资源的标识符。在这种情况下,资源就是部门。
所以你的URI可能如下所示:
GET company/departments
GET company/departments/<department-id>
DELETE company/departments
DELETE company/departments/<department-id>
例如......
DELETE company/departments/58491
通过使用标识符而不是部门名称,这可以避免URI中的空格,这是不可取的。按部门名称,我假设您的用户友好显示名称,例如&#34;人力资本管理。&#34;
答案 1 :(得分:3)
网址由以下几部分组成:
http://example.com/company/departments/12345?arg1=this&arg2=that
http:
是计划。 //example.com
是房东。 /company/departments/12345
是路径,?arg1=this&arg2=that
是查询字符串,由两个参数组成:arg1和arg2。还有另一个方面,称为矩阵参数,这里不再讨论。
当REST谈论URL时,它指的是整个事物。不是它的一部分。要将REST整个URL视为不透明的blob。
这意味着REST不关心任何特定部分:方案,主机,路径或参数。
就REST而言, ftp://127.0.0.1/E280F814-1524-41D5-8735-43D8414AE242
是一个非常好的URL。
就REST而言,它不会给你在URL中使用的路径或是否使用参数。
也就是说,针对URL中的参数的建议是因为有时,缓存不会正确地缓存参数化的URL。因此,/company/department/12345
优先于/company/department?id=12345
。
路径中的12345
不是参数。它是资源的名称。就像上面的starwars.mp4
不是参数一样,也不是E280F814-1524-41D5-8735-43D8414AE242
。他们只是名字。唯一真正关心的人是人。电脑不关心,互联网不关心,REST不关心。对他们来说,这只是一切。
所以这听起来像是一个简单的错误传达,你正在战斗。尽量不要过分强调它。无论如何,当URL资源及其表示实际上很重要时,会对URL命名施加过多的权重。
答案 2 :(得分:0)
我同意。您应该使用如下所示的URL删除部门。此类URL标识部门,可用于对其执行HTTP操作。请勿在请求的有效内容中提供部门ID或名称。
DELETE company/departments/58491
以下链接可为您提供有关设计RESTful服务的更多详细信息:https://templth.wordpress.com/2014/12/15/designing-a-web-api/。
希望它可以帮到你, 亨利