RESTAPI-将项作为关系资源添加到另一个资源

RESTAPI-将项作为关系资源添加到另一个资源,rest,http,relationship,Rest,Http,Relationship,我一直在想,当添加链接到另一个资源的资源时,最好的方法是什么 我有两个目标: +雇员:IT公司的雇员 +技能:员工的一套技术技能;例如,Java 有人可以通过REST通过以下路径创建员工: POST:/employee 虽然有人可以自己创建技能对象,类似于创建员工对象,但它需要链接到员工,因此 PATCH:/employee/{employeeId}/skill 此路径将为Employee对象创建一个新的Skill,但这就是我怀疑自己是否做错了什么的地方 通常在创建新资源时,您使用POST动词,

我一直在想,当添加链接到另一个资源的资源时,最好的方法是什么

我有两个目标: +雇员:IT公司的雇员 +技能:员工的一套技术技能;例如,Java

有人可以通过REST通过以下路径创建员工:
POST:/employee

虽然有人可以自己创建
技能
对象,类似于创建
员工
对象,但它需要链接到
员工
,因此

PATCH:/employee/{employeeId}/skill

此路径将为
Employee
对象创建一个新的
Skill
,但这就是我怀疑自己是否做错了什么的地方

通常在创建新资源时,您使用
POST
动词,但同时我也在更新
Employee
资源的一部分,因此它的作用类似于
PATCH
动词。另外,
POST
动词应该没有任何参数,比如
{employeeId}

在使用此场景记录RESTAPI时,最佳的方法/实践是什么

在使用此场景记录RESTAPI时,最佳的方法/实践是什么

它可能值得回顾;简而言之,如果您在做REST,那么您就是在传递文档——在域模型上执行的有用工作是文档操作的副作用

如果您使用的是
PUT
/
PATCH
,那么您基本上是在执行远程创作,也就是说,您要求服务器接受文档的本地副本。这很好,即使服务器在接受您的编辑时,也会更改其他资源的表示形式

您可以改为设计应用程序域协议,以便直接对员工文档进行远程编辑,甚至对该资源进行
后期编辑,这反过来可能会对技能资源产生副作用

记住,第一个使用REST架构风格设计的应用程序是万维网;定义域应用程序协议最常见的媒体类型是HTML,而HTML本机支持的唯一不安全的请求方法是
POST
——这是一次灾难性的成功

所以
POST
就可以了


当您试图支持想要利用的通用组件时,事情往往变得棘手。然后,在设计协议时,需要考虑使缓存数据无效的规则。

POST
被定义为根据有效负载自身的语义处理有效负载。它可以创建一个新资源,在这种情况下,它应该创建一个
位置
头来指示资源的创建,但它不必这样做。如果你把技能设计成他们自己的资源,那么就使用
POST
吧。如果你认为技能是员工数据的子集,而不是代码>补丁< /代码>它。进一步注意,根据定义,形式为
/employee/{empId}/skill
的URI不一定表示父子关系,因为整个URI本身以一个特定端点为目标,并在检索尝试时用作缓存键。