我可以发明当实体更新为自己的HTTP状态代码和服务器返回更新实体的表示?

问题描述 投票:-5回答:2

注意哦

我认为这将是一个明显的因为www.restapitutorial.com不是,事实上,标准组织,负责HTTP状态代码的网站,而仅仅是一个方便的网站,比www.iana.orgwww.ietf.org更好的UI。

显然,这是由于我的错误的假设。因此,在科学精神,如果你是默认的蓝色,快递和页面滚动的粉丝,只要你需要收拾午饭,然后检查了www.iana.org。或者,如果你也有破碎的图片链接的神物,你可以找到的(可能)完全相同的在www.ietf.org表示的信息。

否则,我发现www.restapitutorial.com是一个非常方便的网站,在某种程度上,这只是一个可爱的小欢乐,否则寒冷多雪的二月天给出准确的信息。

它使我官方HTTP Status Codes Spec似乎涵盖所有人们可能会遇到的情景坚果,但对任何类型的UPDATE/PATCH真的瘸又靠不住的选项要求你的系统将需要处理。

的(缺乏)选项

200 OK 客户:“嘿服务器,这一请求发生了什么事我刚刚给你吗?” SERVER: “没有什么不好!”

这是如此含糊它的危险没用。对于客户,对于系统,日志记录,用于分析,整个互联网。但是,这是我发现的,实际上返回更新资源的表示的UPDATE唯一的选择。

202已接受 客户:“嘿服务器,这一请求发生了什么事我刚刚给你吗?” SERVER:“我收到了。”

再次,也许有点更详细的在这里?这是可以理解的,这可以用于长时间运行的任务作为竖起大拇指给客户时,他们首先提交长时间运行的任务,但随后一旦长时间运行的任务完成后,我们又回到了默认的200 OK。但同样,无用的“标准”的更新(如更新您的帐户的生物,例如)。

204无内容 客户:“嘿服务器,那是什么更新请求我刚刚发送的状态?” SERVER:“我得到的,而且完全没有更新时,您应该更新您的最终实体太大。” 客户端:“伟大的,但你没有通过您发送响应的实体。” SERVER:“当然不是,我并不需要我给你留在标题的提示。” 客户:“?好了,所以我可以再看看你的响应报头,并得到我需要发送另一个请求给您获得更新的实体元信息好像你可能只是给我发更新后的实体。” SERVER:“我没有更多的在这个问题上说的。”

我的意思是,服务器有更新的实体就在那里。为什么非法它发回的响应的身体吗?再次,无用的一个简单的更新请求。

205重置内容 客户:“嘿服务器,什么是对UPDATE请求我发送的状态?” SERVER:“我得到了我完全没有更新你应该更新它在你结束了。” 客户端:“真棒但是你没有发送更新的实体还给我?” SERVER:“当然不是,这是非法的!” 客户:“是吗?因为它好像你可以很容易地只是附加更新的实体您回应的身体,然后我就不必只发送另一个请求获得更新的实体。”

这就是所有的人。他们没有一个人是有用的,充分说明一个账户生物UPDATE和返回更新实体的成功结果。

该问题

  • 所以,我能弥补我自己的HTTP状态代码?
  • 209实体更新? The numeric code seems to be available
  • 这显然不是很“安全”方面做的如何将各种客户端(浏览器,软件开发工具包等),具有处理状态代码烤入规则。
  • 任何其他人做过呢?
  • 我知道Twitter的返回他们的超级臀420 Enhance Your Calm。我们都非常深刻的印象,他们的智慧,它似乎并没有打破互联网。但它也可用于速率限制,不是一个典型的成功代码是“罕见的”错误代码。
  • 什么是与官方HTTP Status Codes Spec的线外着色来沿陷阱?
rest http api-design http-status-codes
2个回答
2
投票

首先,状态代码信任列表是从IANA的一个(而不是你在你的问题中使用的一个)。

现在,回到你的问题......一旦HTTP status codes是可扩展的,你可以创建一个新的状态代码。不过,这并不意味着你应该。


状态代码是为了描述服务器的尝试理解和满足客户端的相应请求的结果。在200定义,下面引用的RFC 7231状态代码涵盖了你在你的问题中描述的场景。有没有需要定义另一个状态代码的目的。

6.3.1. 200 OK

200(OK)状态码表示请求成功。在一个200响应发送的有效载荷依赖于请求方法。对于由本说明书所限定的方法中,所述有效载荷的预期含义可以概括为:

  • GET:目标资源的表示;
  • HEAD:相同的表示为GET,但没有表示数据;
  • POST:的从,动作获得,或者结果的状态的表示;
  • PUTDELETE:的操作的状态的表示;
  • OPTIONS:的通信选项的表示;
  • TRACE:由端服务器接收到的请求消息的表示。

现在指的是描述RFC 7231方法的语义PUT的部分:

如果目标资源没有电流表示和PUT成功地创建一个,则原始服务器必须通过发送201(创建)响应通知用户代理。如果目标资源确实有当前表示并表示是按照封闭式表示的状态成功修改,则原始服务器必须发送无论是200(OK)或204(无内容)响应,表示成功完成请求。

以类似的方式,200也适合作为返回表示对已经修补了资源PATCH请求的结果。

如果客户不要求已经修改了资源的表示,返回204


为了获得最佳的解决方案,您可能要允许客户端决定表示是否需要与否。为了这个目的,可以使用与Prefer偏好,其中所述值可以是RFC 7240returnrepresentation定义的minimal头:

4.2. The "return=representation" and "return=minimal" Preferences

所述return=representation偏好表示客户端偏好,服务器包括代表在响应于成功的请求的资源的当前状态的实体。

return=minimal偏好,在另一方面,表明客户端希望服务器只返回一个成功的请求的最小响应。典型地,这样的响应将利用204(无内容)状态,但是其它的代码可以适当地使用,例如用一个零长度响应实体200(OK)状态。何谓适当的最小响应确定是仅在服务器的自由裁量权。


附注:新状态代码应遵循requirements描述的RFC 7231


1
投票

你可能需要在这里重新规划一些。 HTTP状态代码不表达业务逻辑的反应,他们是从HTTP协议的观点。 200 OK意味着服务器已经进行了,你给它要求的要求。这是故意广阔,因为请求可能是商业逻辑要求的几乎无限数量的一个。这里不可能对每一个可能的各种要求或行动的服务器采取了独特的代码,因为这是唯一的每个应用程序。

如果你要求的服务器更新与PUT请求一些数据,然后200 OK的意思是“我已成功更新的数据,作为要求”。有没有特别需要区分与更具体的代码。想必你知道你所请求的服务器什么,200 OK意味着请求已完成。

该做的更具体的2xx存在的代码从HTTP的视角独特表达的东西。 201 Created意味着一个新的URI的新资源现在可用,并且URI已在Location头被退回。 202 Accepted意味着服务器将(可能)满足你的要求,但并没有那么做,所以没有新的资源给你看在这一刻和/或变化不会反映到当前的资源呢。 204 No Content指在服务器上完成您的请求,但响应不包含任何机构的数据,因此客户端不需要/不应该试图处理响应体以任何方式。

所有这些反应意味着同样的事情:你的请求时已成功采取行动。他们只表示在响应这一要求,它有无关的要求表达的动作稍有不同的细微差别。所有这些响应代码也同样适用于任何类型的操作,无论是更新,创建,删除,或任何其他类型的操作。

锤这个家,服务器可能与DELETE /user/42一个201 Created请求作出响应;这将使意义,如果删除可能要花费一段时间才能真正开展,并为你有一个新的URI现在,你可以对运行状态进行检查。 201 Created并不意味着“一个新​​的用户创建”,它的意思是“请求被接受(因为它在2xx范围内),并有相对于该请求,您可能想看看新的HTTP资源。”

© www.soinside.com 2019 - 2024. All rights reserved.