提前道歉,询问"将一些功能操作塞进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会反对的事情,或者我会做什么?
是否有可接受的模式"查找或创建"?
答案 0 :(得分:4)
我会使用位置POST和200到现有资源。语义更容易。
至于GET选项,它只是SECOND时间的幂等,第一次确实是创建资源。
如果您有任何类型的聚合资源可以获得所有状态"并且你会发现新的不存在,但是如果你直接获取它,Shazam就是那里的那个,这是一个错误。
在这种情况下,使用200的POST是最有效的,我认为。