Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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_Api - Fatal编程技术网

用于创建资源的REST API修补程序方法

用于创建资源的REST API修补程序方法,rest,api,Rest,Api,使用JSONAPI1.0标准设计API没有PUT方法。只有用于创建资源的POST方法和用于部分更新的修补程序。我们有一个用例,用户可以向服务器发送请求,如果资源不存在,则必须创建,否则必须更新。RFC将这种方法描述为PUT。下一步引用提到的RFC 5789修补程序标准,信息如下: “如果请求URI未指向现有资源,服务器可能会创建新资源, 取决于修补程序文档类型(是否可以在逻辑上修改空资源)和权限等。“ 使用补丁方法更新和创建资源是好主意吗?应该使用哪种标准来支持PUT和PATCH方法(可能是Op

使用JSONAPI1.0标准设计API没有PUT方法。只有用于创建资源的POST方法和用于部分更新的修补程序。我们有一个用例,用户可以向服务器发送请求,如果资源不存在,则必须创建,否则必须更新。RFC将这种方法描述为PUT。下一步引用提到的RFC 5789修补程序标准,信息如下:

“如果请求URI未指向现有资源,服务器可能会创建新资源, 取决于修补程序文档类型(是否可以在逻辑上修改空资源)和权限等。“

使用补丁方法更新和创建资源是好主意吗?应该使用哪种标准来支持PUT和PATCH方法(可能是OpenApi)

如何解释RFC描述


最好的问候

根据
Postel定律
一个人应该
在你做的事情上保持保守,在你接受别人的事情上保持自由

PATCH
一起使用的两种常见媒体类型是(又称JSON补丁)和(又称MergePatch)

MergePatch定义了两个规则,用于确定是否需要添加、删除或更新零件。规范定义了接收到的该类型的请求需要通过调用、目标资源和接收的表示来处理。目标本身可能是JSON值或未定义。如果该资源尚不存在,则该资源尚未定义,并将导致将收到的修补程序文档中的所有值添加到尚未定义的资源中。这基本上就是你的资源创造

与MergePatch不同,JSON补丁被指定只对JSON文档进行操作。没有提到在没有可用资源的情况下需要如何应用修补程序。如果您查看提供的操作,例如
test
remove
replace
move
,这些操作只有在原始JSON文档中存在对应项时才起作用,那么这在某种程度上是有意义的。这种媒体类型与实际定义非常接近,因为客户机发送一组之前由客户机计算的指令,这些指令需要由服务器原子地应用。要么应用所有更改,要么不应用任何更改。在这里,客户机应该已经预先获取了目标资源的当前状态,否则它将无法计算将当前表示转换为所需表示所需的必要更改。因此,只有在已有可用资源的情况下,应用该媒体类型的表示才有意义。如果客户机发现没有可用的目标资源,它只需使用
POST
即可创建资源。如果客户端发送的补丁文档只包含
add
操作,我会创建一个JSON表示,并相应地添加所有字段


正如您所见,在HTTP中如何进行修补有两种不同的方式。其中一种方法非常接近于几十年来在软件工程中如何进行修补的原始想法,而另一种方法则是对远程资源进行部分更新的更为实用的方法。你可以选择使用或支持哪一个(最好两者都支持)。

根据
Postel定律
一个人应该
在你所做的事情上保持保守,在你接受他人的事情上保持自由

PATCH
一起使用的两种常见媒体类型是(又称JSON补丁)和(又称MergePatch)

MergePatch定义了两个规则,用于确定是否需要添加、删除或更新零件。规范定义了接收到的该类型的请求需要通过调用、目标资源和接收的表示来处理。目标本身可能是JSON值或未定义。如果该资源尚不存在,则该资源尚未定义,并将导致将收到的修补程序文档中的所有值添加到尚未定义的资源中。这基本上就是你的资源创造

与MergePatch不同,JSON补丁被指定只对JSON文档进行操作。没有提到在没有可用资源的情况下需要如何应用修补程序。如果您查看提供的操作,例如
test
remove
replace
move
,这些操作只有在原始JSON文档中存在对应项时才起作用,那么这在某种程度上是有意义的。这种媒体类型与实际定义非常接近,因为客户机发送一组之前由客户机计算的指令,这些指令需要由服务器原子地应用。要么应用所有更改,要么不应用任何更改。在这里,客户机应该已经预先获取了目标资源的当前状态,否则它将无法计算将当前表示转换为所需表示所需的必要更改。因此,只有在已有可用资源的情况下,应用该媒体类型的表示才有意义。如果客户机发现没有可用的目标资源,它只需使用
POST
即可创建资源。如果客户端发送的补丁文档只包含
add
操作,我会创建一个JSON表示,并相应地添加所有字段

正如您所见,在HTTP中如何进行修补有两种不同的方式。其中一种方法非常接近于几十年来在软件工程中如何进行修补的原始想法,而另一种方法则是对远程资源进行部分更新的更为实用的方法。您选择使用或支持哪一个(在最好的情况下两者都支持)

我们有一个用例,用户可以向服务器发送请求,如果资源不存在,则必须创建,否则必须更新

在本例中,正确的答案几乎肯定是将您的请求发布到集合资源,并让服务器找出“正确”的东西
POST /photos HTTP/1.1
Content-Type: application/vnd.api+json

...

HTTP/1.1 201 Created
Location: http://example.com/photos/550e8400-e29b-41d4-a716-446655440000
PUT /photos/550e8400-e29b-41d4-a716-446655440000 HTTP/1.1
Content-Type: application/vnd.api+json

HTTP/1.1 201 Created