2017-05-05 28 views
2

我有一个RESTful API方法,它创建/更新实体(例如POST /classesPUT /classes/:id)几个参数。其中一个参数(例如teacher)是另一种其他实体的ID。当参数实体不存在(或访问被拒绝)时,RESTful API方法[POST/PUT]的适当响应代码

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

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

  • 404如果从参数实体不存在,
  • 403,如果我们从参数到实体没有访问(但关于此实体存在的信息不是秘密),
  • 404如果我们没有从参数访问实体(万一关于此实体的信息应该保密)。

我觉得这是非常具有描述性和清晰的(以及一些错误信息)。但是,我想考虑潜在的替代方案或确认我的方法不是一个糟糕的设计。

回答

2

404(未找到)状态代码表示原始服务器并 找不到的目标 资源当前表示或者是不愿意透露的一个存在。
- RFC 7231

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

0

事实上,你的情况并未在RFC中指定。每个状态都应该指向URL请求的实体(资源)。如果不存在的资源是一个参数,那么它不是“目标实体”。最充分的状态是400.