如何找到或创建"操作是在RESTful服务中实现的吗?

时间:2014-07-25 18:22:06

标签: rest

提前道歉,询问"将一些功能操作塞进RESTful思维方式的最佳方法是什么?题。这里无意开始辩论;我想看看是否有一个可接受的模式来执行特定的任务。

假设我想在API中创建一个端点来创建"引用代码"对于用户/会员对。我能做到

POST /referral_codes
{"user":1, "affiliate":88}

并使用201 CREATED和带有新代码的正文进行回复。

但如果代码已经存在,我会回馈现有的推荐代码。在这种情况下,201是不合适的(没有创建)。 200 OK可能有意义,如果你大大扩展了409的意图,那么409 CONFLICT是有道理的 - 但要求代码已经存在并不是一个错误。我试图模仿的操作被称为"找到或创建"。

另一种选择是使端点成为GET(即GET /referral_codes?customer=1&affiliate=88),因为客户端不需要知道服务器是否必须创建资源来完成请求。并且因为它仍然是幂等的(后续调用将返回第一次创建的代码),我没有做任何Restafarian会反对的事情,或者我会做什么?

是否有可接受的模式"查找或创建"?

1 个答案:

答案 0 :(得分:4)

我会使用位置POST和200到现有资源。语义更容易。

至于GET选项,它只是SECOND时间的幂等,第一次确实是创建资源。

如果您有任何类型的聚合资源可以获得所有状态"并且你会发现新的不存在,但是如果你直接获取它,Shazam就是那里的那个,这是一个错误。

在这种情况下,使用200的POST是最有效的,我认为。