Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rest“指南”使API设计变得困难_Rest_Restful Url_Restful Architecture - Fatal编程技术网

Rest“指南”使API设计变得困难

Rest“指南”使API设计变得困难,rest,restful-url,restful-architecture,Rest,Restful Url,Restful Architecture,我正在尝试为我的Rest服务创建一个API,我正在努力遵守我试图遵循的设计规则。总的来说,我试图遵循以下准则: 不要在URI中使用动词 更改状态时不要使用查询参数 用复数 不要使用驼峰案例 现在,我必须建立如下模型: GET company/departments GET company/departments/<department-id> DELETE company/departments DELETE company/departments/<departm

我正在尝试为我的Rest服务创建一个API,我正在努力遵守我试图遵循的设计规则。总的来说,我试图遵循以下准则:

不要在URI中使用动词 更改状态时不要使用查询参数 用复数 不要使用驼峰案例 现在,我必须建立如下模型:

GET company/departments  
GET company/departments/<department-id>  
DELETE company/departments  
DELETE company/departments/<department-id>  
获取公司的所有部门 获得公司的一个部门 删除公司的所有部门 删除公司的一个部门 我正在尝试这样的事情:

GET company/departments
GET company/departments/<depName>
DELETE company/departments
DELETE company/departments  {body: department name}
以上内容遵循了我提到的指导原则,但我真的不认为结果URI是好的。尤其是第四个,它执行不同的任务,并且与第三个具有相同的URI

这对我来说是一个常见的问题,在设计REST服务时我多次遇到这个问题。其结果是,我总是打破一些设计原则来实现我想要的或制作更丑陋的URI,例如:删除公司/部门/部门

因此,实际问题是:


在我的设计中,如何删除具有类似Restfull URI的单个部门?

RESTful URI的更好设计是为资源使用标识符。在这种情况下,资源是部门

因此,您的URI可能如下所示:

GET company/departments  
GET company/departments/<department-id>  
DELETE company/departments  
DELETE company/departments/<department-id>  

通过使用标识符而不是部门名称,可以避免URI中出现空格,这是不可取的。关于部门名称,我假设您指的是用户友好的显示名称,例如人力资本管理

RESTful URI的更好设计是为资源使用标识符。在这种情况下,资源是部门

因此,您的URI可能如下所示:

GET company/departments  
GET company/departments/<department-id>  
DELETE company/departments  
DELETE company/departments/<department-id>  

通过使用标识符而不是部门名称,可以避免URI中出现空格,这是不可取的。关于部门名称,我假设您指的是用户友好的显示名称,例如人力资本管理

URL由几个部分组成:

http://example.com/company/departments/12345?arg1=this&arg2=that
http:这是一个方案//example.com是主机/company/departments/12345是路径,arg1=this&arg2=this是查询字符串,由两个参数组成:arg1和arg2。还有另一个方面,叫做矩阵参数,这里不讨论

当REST谈论URL时,它指的是整个内容。不是它的一部分。为了休息,整个URL被视为一个不透明的blob

这意味着REST不关心任何特定部分:方案、主机、路径或参数

ftp://127.0.0.1/E280F814-1524-41D5-8735-43D8414AE242 就REST而言,这是一个完美的URL

所以,就REST而言,它不会给出您在URL中使用的路径或是否使用参数的rip

也就是说,针对URL中参数的建议是因为有时缓存不能正确缓存参数化的URL。因此,对/company/department/12345的偏好超过了/company/department?id=12345

路径中的12345不是参数。它是资源的名称。就像上面的starwars.mp4不是参数一样,E280F814-1524-41D5-8735-43D8414AE242也不是参数。它们只是名字。真正关心的人只有人。电脑不在乎,互联网不在乎,其他人不在乎。对他们来说,这只是点点滴滴


所以,这听起来像是一个简单的沟通失误,你正在战斗。试着不要为它太紧张。不管怎样,当资源及其表示形式真正重要时,URL命名的重要性就太大了。

URL由几个部分组成:

http://example.com/company/departments/12345?arg1=this&arg2=that
http:这是一个方案//example.com是主机/company/departments/12345是路径,arg1=this&arg2=this是查询字符串,由两个参数组成:arg1和arg2。还有另一个方面,叫做矩阵参数,这里不讨论

当REST谈论URL时,它指的是整个内容。不是它的一部分。为了休息,整个URL被视为一个不透明的blob

这意味着REST不关心任何特定部分:方案、主机、路径或参数

ftp://127.0.0.1/E280F814-1524-41D5-8735-43D8414AE242 就REST而言,这是一个完美的URL

所以,就REST而言,它不会给出您在URL中使用的路径或是否使用参数的rip

也就是说,针对URL中参数的建议是因为有时缓存不能正确缓存参数化的URL。因此,对/company/department/12345的偏好超过了/company/department?id=12345

路径中的12345不是参数。它是资源的名称。就像上面的starwars.mp4不是参数一样,E280F814-1524-41D5-8735-43D8414AE242也不是参数。它们只是名字。真正关心的人只有人。电脑不在乎,互联网不在乎,其他人不在乎。对他们来说,这只是点点滴滴

所以,这听起来像是一个简单的沟通失误,你正在战斗。试着不要为它太紧张。
不管怎么说,URL命名的重要性太大了,而资源和它们的表示才是真正重要的。

我同意。您应该使用如下URL删除部门。这样的URL标识一个部门,并可用于对其执行HTTP操作。不要在请求的有效负载中提供部门id或名称

DELETE company/departments/58491
以下链接可以为您提供有关设计RESTful服务的更多详细信息:

希望它能帮助你,
蒂埃里我同意。您应该使用如下URL删除部门。这样的URL标识一个部门,并可用于对其执行HTTP操作。不要在请求的有效负载中提供部门id或名称

DELETE company/departments/58491
以下链接可以为您提供有关设计RESTful服务的更多详细信息:

希望它能帮助你,
Thierry

这就是我想要做的,但这样做违反了一条非常重要的规则:“2.在更改状态时不要使用查询参数”。我错了吗?“/58491”不是查询参数。删除公司/部门?id=58491-这是一个查询参数。但这仍然是url中的一个参数。也许我不应该使用术语“查询参数”。总的来说,我试着遵循我收集的规则,但有太多的限制。你认为我不应该把它们看得太严重吗?这就是我想做的,但这样做违反了一条非常重要的规则:“2.改变状态时不要使用查询参数”。我错了吗?“/58491”不是查询参数。删除公司/部门?id=58491-这是一个查询参数。但这仍然是url中的一个参数。也许我不应该使用术语“查询参数”。总的来说,我试着遵循我收集的规则,但有太多的限制。你觉得我不该吃得太严重吗?