我担心在以下情况下需要使用哪个状态代码:
假设我具有以下端点:
https://my-restaurant.api.com/v1/orders
然后我发出了POST
请求,请求中包含一些体内元素以开始新的订单:
{
date: "2018-08-10T09:00:00.000-03:00",
order: 12345
}
响应如下:
{
require_additional_data: true,
customers: [],
waiter: "Jon Doe"
}
在这里,该服务告知在关闭订单之前需要更多数据。下一步将以相同的正文重复该请求,但要提供有关订单的更多数据。
在这种情况下,响应状态代码应为200 OK
?我猜一旦服务告诉订单已完成并获得所有必需的信息,那将是200 OK
。
在此之前,将使用哪个状态代码?
答案 0 :(得分:0)
在这种情况下,请勿使用200
。请记住,2xx
状态码表示服务器已成功接收,理解并接受了请求。那不是你的情况。
4xx
状态代码将更适合您的问题中描述的情况。您可以按照评论中的说明使用422
。它表明由于语义错误而无法处理请求实体(但是从语法上来说是正确的)。请参见下面的定义:
11.2. 422 Unprocessable Entity
422(不可处理实体)状态代码表示服务器 了解请求实体的内容类型(因此
415
(不受支持的媒体类型)状态码不正确),并且 请求实体的语法正确(因此400
(错误请求) 状态代码不正确),但无法处理其中的内容 说明。例如对于如果XML可能会出现此错误情况 请求正文包含格式正确(即语法正确)的内容,但 语义错误的XML指令。
答案 1 :(得分:0)
这取决于状态周期或订单资源的限制:
两个都是好的答案。 如果创建订单对您来说是一个漫长的过程,需要多个请求,那么该订单可能为空。
例如:
如果创建订单是一个基本请求,或者您不想在基础中看到任何空订单,则该订单不能为空。