Rest 当一个请求需要先执行另一个请求时,我可以使用HTTP响应424吗?

Rest 当一个请求需要先执行另一个请求时,我可以使用HTTP响应424吗?,rest,http,http-status-codes,Rest,Http,Http Status Codes,例如,我有一个实体的层次结构,由于一些问题,我在创建父对象的请求之前收到了创建子对象的请求 在这种情况下,使用代码424是否正确?我想,您应该怎么做,问题是这个状态代码的知名度有多高。我得先看看维基百科 然而,我要说的是,即使客户机在默认情况下不处理此代码,也很容易猜测这是一个客户机错误 如果可能的话,我会添加一个提示,说明缺少了什么调用。424是在WebDAV中定义的;这不是问题,但WebDAV用于描述状态代码409(冲突)的错误情况。这就是我要用的。在这个问题上肯定有一些意见的余地。RFC4

例如,我有一个实体的层次结构,由于一些问题,我在创建父对象的请求之前收到了创建子对象的请求


在这种情况下,使用代码424是否正确?

我想,您应该怎么做,问题是这个状态代码的知名度有多高。我得先看看维基百科

然而,我要说的是,即使客户机在默认情况下不处理此代码,也很容易猜测这是一个客户机错误


如果可能的话,我会添加一个提示,说明缺少了什么调用。

424是在WebDAV中定义的;这不是问题,但WebDAV用于描述状态代码409(冲突)的错误情况。这就是我要用的。

在这个问题上肯定有一些意见的余地。RFC4918将HTTP状态代码424定义为(强调):

424(失败的依赖项)状态代码表示无法对资源执行该方法,因为请求的操作依赖于另一个操作,并且该操作失败。例如,如果PROPPATCH方法中的一个命令失败,那么至少其他命令也会失败,出现424(失败的依赖项)

我认为这不适合您的情况,因为从属操作尚未发生,而此状态代码似乎表示已收到从属操作但失败

Julian Rechke对409冲突的回答在RFC2616中定义为

由于与资源的当前状态冲突,无法完成请求。只有在预期用户可能能够解决冲突并重新提交请求的情况下,才允许使用此代码。响应主体应包含足够的信息,以便用户识别冲突的来源。理想情况下,响应实体将包括足够的信息,供用户或用户代理修复问题;然而,这可能是不可能的,也不是必须的

但是,仅当接收此响应的客户端能够修复问题(在本例中,创建父级)时,才应使用此响应。如果不是这种情况,我可能会推荐一个422不可处理实体,同样来自RFC4918:

422(不可处理实体)状态代码意味着服务器理解请求实体的内容类型(因此415(不支持的媒体类型)状态代码不合适),并且请求实体的语法正确(因此400(坏请求)状态代码不合适),但无法处理包含的指令。例如,如果XML请求体包含格式正确(即语法正确)但语义错误的XML指令,则可能会出现这种错误情况


或者只是一个好的老式的400坏的请求,因为在请求的时候,创建一个不存在的父母的孩子是没有意义的。

我想你给出了最详细的答案。我正式不同意的唯一一件事是使用400错误请求——我觉得它不适合格式良好但逻辑上无效的请求,例如,支持我使用422。最后,我决定在我的案例中使用424,尽管我同意在形式上它可能有点不受支持(依赖请求没有失败)。然而,如果它失败了,结果无论如何都是一样的——所以我觉得这有点合适。