RESTful获取资源的方式,但如果它还不存在则创建它

时间:2013-09-24 08:01:46

标签: api rest restful-architecture

对于我正在创建的RESTful API,我需要一些获得资源的功能,但如果它不存在,则创建它然后返回它。我不认为这应该是GET请求的默认行为。我可以在我给GET请求的某个参数上启用此功能,但它看起来有点脏。

重点是我只想做一个请求,因为这些请求将来自可能具有较慢互联网连接的移动设备,所以我想限制需要完成的请求尽可能。

我不确定这是否适合RESTful世界,但如果没有,它会让我失望,因为这意味着我必须对REST的想法进行一些修改。

有没有人知道RESTful方式这样做,或者其他方式,一种不与REST想法冲突的美丽方式?

2 个答案:

答案 0 :(得分:1)

客户是否需要在创建过程中提供任何信息?如果是这样,那么你真的需要将GET和POST分开,否则你需要在每个GET中发送这些信息,这将非常难看。

如果您正在发送GET而没有任何其他信息,那么没有理由为后端在返回之前不能创建资源(如果它尚不存在)。根据创建资源所花费的时间量,您可能需要考虑异步并使用202作为其他答案,但这意味着您的客户端必须处理(还)另一个响应代码,因此可能会更好只是等待资源最终确定并返回。

答案 1 :(得分:0)

非常简单:

  1. 请求:HEAD,检查响应代码:404或200.如果您需要正文,请使用GET。
  2. 它不可用,执行PUT或POST,服务器应该使用204和Location头以及新创建的资源的URL进行响应。