当前位置: 首页 > 知识库问答 >
问题:

由于存在匹配资源而导致资源创建POST失败时的HTTP响应代码

饶铭
2023-03-14

想象一下,我们有一个API,可以通过发布到

www.example.com/api/employees

员工可以被描述为:,

{
  name: "John Smith",
  tax_number: "ABC123"
}

税号对所有人类来说都是普遍唯一的。如果创建了一个记录,并且该记录已经存在,其中名称和税号与现有记录相匹配,那么可以安全地假设请求者希望返回对该记录的引用(包括其内部id和客户端可能没有的其他数据),创建于,更新于)。

返回该资源的HTTP状态码是什么?我想重定向可以只返回id,但我更愿意在响应中包含整个对象。

这种情况对于简单的复制错误来说是独一无二的,因为如果尝试复制,则意味着您希望创建的记录已经存在,而不是与现有记录冲突。

共有2个答案

李飞翼
2023-03-14

有一个409冲突响应代码,通常用于让客户端知道这样的实体已经存在于服务器上。解析错误响应的主体可能不是很直观,但是如果您在API留档中指定此项,应该不会有问题(将关于原始条目的信息放在响应主体中)。

隆芷阳
2023-03-14

我认为,如果您将资源发布到API,那么您需要一个代码201,该代码将声明该资源已创建,并且主体将(可以)包含该资源。否则,您首先必须检查资源是否已创建,但这将需要两个调用。

否则,您的状态代码为409:

由于与资源的当前状态冲突,无法完成请求。

[编辑]在阅读了阿蒙森、鲁比和理查森的Restfull Web API之后

最好是使用409状态代码,声明与服务器上存在的资源有冲突。将"冲突"资源的url放在响应的位置标题中,并在正文中添加冲突消息

 类似资料:
  • 假设有人在我的EndInt上执行请求: 是否可以使用提供的ID创建资源?因为在数据库insert上手动分配ID不是最佳实践。 如果无法创建资源,是否应该返回错误?

  • res\drawable\mylayerlistdrawable.xml ----------------------------------------------------------------------------------- 最终答案 在api 21之前的xml可提取资源中,我们不能使用?attr。由aapt在编译时创建的可提取资源。运行时用于动态连接的Attr资源。 解决方案是为

  • com.Android.builder.internal.aapt.v2.aapt2exception:Android资源编译失败/users/username/.gradle/caches/transforms-2/files-2.1/94 a628954aabd306de764f6ff2843371/res/values/values.xml:8:5-35:25:aapt:error:资源'a

  • 问题内容: 有谁知道如何检查以确保在AngularJS中无法提取资源? 例如: 有任何想法吗? 问题答案: 当出现错误时,您的第一个回调函数之后的另一个回调函数应触发。取自文档和论坛帖子: HTTP GET“类”操作:Resource.action([参数],[成功],[错误]) 非GET“类”操作:Resource.action([参数],postData,[成功],[错误]) 非GET实例操作

  • 资源路由 支持设置RESTFul请求的资源路由,方式如下: Route::resource('blog','index/blog'); 表示注册了一个名称为blog的资源路由到index模块的Blog控制器,系统会自动注册7个路由规则,如下: 标识 请求类型 生成路由规则 对应操作方法(默认) index GET blog index create GET blog/create create s

  • 我的设置:我创建了一个REST服务(Jersey/Dropwizard),可以从数据库中流式传输大量内容。在GET操作期间,服务通过连接池接入数据库,将数据打包成流,并执行一些即时转换,以各种编码(CSV、JSON等)呈现请求的数据。数据库连接的生命周期与流的生命周期相关联,只有当流关闭时,数据库连接才会被释放。 流转换由编码器类执行,该类返回StreamingOutput,然后将其传递给响应对象