首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTTP状态码混淆

HTTP状态码混淆
EN

Stack Overflow用户
提问于 2014-06-30 13:13:16
回答 1查看 164关注 0票数 0

因此,我试图显示有意义的、准确的HTTP状态代码,即使在网上查看了示例之后,我也会感到困惑。以下是我的情况:

在接受查询param的URL中:

代码语言:javascript
复制
@POST query
Sample URL: /putRecord?Name=A&Age=25&house=permanent
  1. 当其中一个参数丢失时,返回的状态代码是什么?(所有三个都是强制性的)--据我所读,我猜这是一个400:糟糕的请求。但这似乎太笼统了。有什么办法让我说查询是错误的吗?来源:这里
  2. 假设我根据DB验证副本的名称,如果我得到一个副本,我应该返回什么状态代码?
  3. 因此,如果已经有一个重复的条目可用,我不能添加记录。我是显示304 (未修改)还是仅显示来自2的错误代码?澄清:对于第三种情况,另一种可能是当我无法实际提交到DB并回滚时(可能)。现在是什么状态码? 非常感谢!
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-30 13:16:38

广告1。你可以返回,除了代码本身(400)也有一个简短的信息和解释。因此,您可以使用“400Queryparamname必需”或类似的内容来响应,而不是重放“400个坏请求”。此消息称为“原因短语”,并定义为在6.1中,RFC 2616。或者,如果您需要更多的灵活性,可以返回带有说明的文档。

我会考虑使用422个不可处理的实体。来自RFC 4918

422 (非可处理实体)状态代码意味着服务器理解请求实体的内容类型,并且请求实体的语法是正确的(因此,400 (坏请求)状态代码不合适),但无法处理所包含的指令。

广告3。我会返回422,但这真的取决于这种情况是被认为是一个错误的逻辑,或它是一个常规的,预期的情况。

编辑:正如@War10ck在评论中建议的那样,HTTP409(代替HTTP422)也可能是有意义的。

关于处理副本的注意:如果新实体的名称已经在数据库中,则似乎(如果我错了请纠正我),您认为新实体是重复的。如果是这样,您可以考虑使用HTTP而不是HTTP吗?

您可以定义以下资源:

代码语言:javascript
复制
HTTP PUT /record/:name

因此,"name“将是URI的一部分。然后,如果有第二个PUT到相同的资源(相同的“名称”),最好用409/422来响应。

如果要为唯一约束使用不同的键,请适当地修改URI。

根据经验,POST适用于您可以拥有给定资源的多个实例的情况,即

代码语言:javascript
复制
HTTP POST /log  ;; Because we have many logs

并针对每种资源都是唯一的情况:

代码语言:javascript
复制
HTTP PUT /person/:name (or /person/:tax-number if :name isn't unique)

另外,请注意,我已经将资源从"putRecord“重命名为"record”- PUT是一个HTTP方法,也没有理由在URI中使用它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24490984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档