【发布时间】:2017-04-13 13:43:37
【问题描述】:
我正在设计一个 REST API,它有一个与另外两个资源相关的 Banner 资源:Placeholder 和 Page。
虽然与Placeholder 的关系可以是null,但Banner 必须与Page 相关。业务规则定义页面始终是独立创建的。然后,对于新的Banner 资源,页面确实存在,并且可以将页面的 id 作为参数传递。这同样适用于Placeholder,尽管这可能是null。
所以,我决定也可以独立创建Banner 资源(而不是嵌套资源),如下所示:
POST https://api.example.com/banners
{
"name": "banner's name",
"page": "PAGE_ID",
"placeholder": "PLACEHOLDER_ID",
... other parameters
}
如果提供的page 或placeholder 不存在,API 应该返回什么错误代码?
我返回的是 HTTP 404,但感觉很奇怪。我想过 409,但这看起来不像是冲突。
PD:如果我将嵌套 URL 用作 POST /pages/<page_id>/banners,则 404 对于不存在的 page 是有意义的,但对于 placeholder 仍然存在同样的问题。
【问题讨论】:
-
@CássioMazzochiMolin 这在以 post 请求正文的形式传递参数时可能被视为重复,但在使用
POST /pages/page_id/banners时不会被视为重复。并且您是否使用其中一种取决于您希望如何访问资源。所以这不是完全重复的。 -
@andih 我又读了一遍这个问题,但我仍然认为它是重复的。 OP 关心请求正文中发送的 ID。对于在 URL 中发送的那些,
404将完成问题中提到的 OP 的工作。 -
@CássioMazzochiMolin 只要您首先想到的是固定/给定的横幅资源。作者似乎不确定这是否是正确的形式,因为他提出了第二种方式。对于第二种方法,他并不真正知道如何处理占位符。还可以解释为什么要使用一种或其他方法以及如何将占位符添加到第二种方法中,....
-
@andih 来自@CássioMazzochiMolin 在另一篇文章中的回答,我得出结论,使用
POST /pages/<page_id>/banners时,如果page_id不存在,则会返回404,而如果页面是好的,但placeholder没有,将返回 422。您有替代解决方案吗? -
我正在重新提出问题,但这应该是要走的路。是什么阻止您采用这种方法?
标签: rest restful-url api-design