【发布时间】:2014-07-26 02:52:10
【问题描述】:
对于提出“将某些功能操作塞进 RESTful 思维方式的最佳方法是什么”问题提前道歉。无意在此展开辩论;我想看看是否有可接受的模式来执行特定任务。
假设我想在 API 中使用一个端点来为用户/附属公司对创建“推荐代码”。我可以的
POST /referral_codes
{"user":1, "affiliate":88}
并使用 201 CREATED 和带有新代码的正文进行响应。
但如果代码已经存在,我会退回现有的推荐代码。在这种情况下,201 是不合适的(没有创建任何内容)。如果您大大扩展了 409 的意图,则 200 OK 可能有意义,并且 409 CONFLICT 有意义 - 但是要求已经存在的代码并不是真正的错误;我试图模仿的操作称为“查找或创建”。
另一个选项是使端点成为 GET(即GET /referral_codes?customer=1&affiliate=88),因为客户端不需要知道服务器是否必须创建资源来满足请求。而且由于它仍然是幂等的(后续调用将返回第一次创建的代码),我不会做任何让 Restafarian 反对的事情,或者我会反对吗?
是否存在可接受的“查找或创建”模式?
【问题讨论】:
-
Find 通常是 GET,create 通常是 POST,因此您不会以 REST 方式对该操作进行建模。我会将其拆分为 2 个请求,或者为操作提供更好的名称...正如 Will 所写,POST 是您唯一的选择,因为 afaik 它适用于您将使用新的 HTTP 方法建模的操作。
标签: rest