REST插入的正确响应-完整的新记录,还是仅记录ID值?


15

我正在构建一个REST API,该API允许插入(POST,而不是幂等)和更新(PUT,幂等)请求,以向我们的应用程序添加/更新数据库。

我想知道是否有关于在POST(插入)操作的响应中将哪些数据发送回客户端的标准或最佳实践。我们需要至少发送回一个记录ID值(例如,您的新记录是记录#1234)。

我们应该以全部对象回应吗?(例如,它们基本上与从“ GET / object_type / 1234”请求中获得的响应相同)

我们是否应该仅使用新的ID值进行响应?(例如,“ {{id:1234}”,这意味着如果他们想获取整个记录,则需要执行额外的HTTP GET请求以获取完整记录)

重定向标头将它们指向完整对象的URL?

还有其他东西吗?


我不确定最佳做法,但就我个人而言,我个人可能会考虑是否成功返回新创建的ID,否则返回-1等。有兴趣看看别人怎么说
dreza 2012年

Answers:


13

好吧,在REST接口中,尽可能遵循HTTP,我将在Location标头字段中将201和URI返回到新创建的Resource。以下是状态代码定义的内容

10.2.2 201已创建

该请求已完成,并导致创建了新资源。可以通过响应实体中返回的URI引用新创建的资源,其中最具体的URI由Location头字段给出。响应应该包括一个实体,其中包含资源特征和位置的列表,用户或用户代理可以从中选择最合适的一个。实体格式由Content-Type标头字段中提供的媒体类型指定。原始服务器必须在返回201状态代码之前创建资源。如果不能立即执行该操作,则服务器应以202(已接受)响应代替。

如果出现问题,我认为您不应该-1像其他人所说的那样返回,而应该只是一个客户端或服务器错误代码(4xx或5xx)。例如,如果不允许用户创建某些新资源,则只需返回“ 401未经授权”,仅此而已。


那身体呢?空还是整个新创建的对象作为响应?
开发人员

我知道的两个常见选项是:1)将位置标头设置为可以在其中找到新实体的位置,或者2)在主体中包括新实体。出于实际原因,我个人选择后者。Somtimes结合在一起,使人更放松;)
BrunoSchäpper,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.