Rest 当参数中的实体不';不存在(或访问被拒绝)

Rest 当参数中的实体不';不存在(或访问被拒绝),rest,restful-architecture,http-response-codes,Rest,Restful Architecture,Http Response Codes,我有一个RESTful API方法,它使用一些参数创建/更新实体(例如POST/classes或PUT/classes/:id)。其中一个参数(例如,教师)是另一种实体的ID 我的问题是,当参数指示的实体不存在(或者用户无权访问此实体)时,此方法的正确响应代码是什么 我的选择是(对于POST和PUT方法): 404如果参数中的实体不存在 403如果我们无法从参数访问该实体(但有关该实体存在的信息不是秘密) 404如果我们无法从参数访问该实体(以防有关该实体的信息应保密) 我觉得这是非常描述性

我有一个RESTful API方法,它使用一些参数创建/更新实体(例如
POST/classes
PUT/classes/:id
)。其中一个参数(例如,
教师
)是另一种实体的ID

我的问题是,当参数指示的实体不存在(或者用户无权访问此实体)时,此方法的正确响应代码是什么

我的选择是(对于POST和PUT方法):

  • 404如果参数中的实体不存在
  • 403如果我们无法从参数访问该实体(但有关该实体存在的信息不是秘密)
  • 404如果我们无法从参数访问该实体(以防有关该实体的信息应保密)
我觉得这是非常描述性和清晰的(以及一些错误消息)。但是,我想考虑潜在的替代品,或者确认我的方法不是一个糟糕的设计。 404(未找到)状态代码表示源服务器未找到 找不到目标的当前表示形式 资源或不愿意披露其存在。
--


我的
404
在您描述的用例中是一个非感官错误,因为目标资源的当前表示形式当然不存在——您正在尝试创建它。更好的状态代码,以及解释引用对象不存在的响应对象。

事实上,RFC中没有指定您的案例。每个状态都应该引用URL请求的实体(资源)。如果不存在的资源是参数,则它不是“目标实体”。最合适的状态是400