REST中GET和DELETE方法的响应应该是什么?

时间:2017-03-17 19:46:38

标签: rest get return response

在REST中,假设客户端调用了findAll方法(GET) - 它只是将实体列表(DTO)返回到HTTP状态码为200的客户端。现在,让我们说客户端已经调用了DELETE方法removeObject(Object object)。参数中的对象不存在于数据库中,并且通常它将返回HTTP状态代码400.我希望客户端以更易于管理的方式(较少恐慌)知道400的真正原因。现在需要一个状态代码/描述,这在GET方法中是不必要的。

我希望客户端为所有消息获得一致的RESPONSE。是否有基于REST的API返回的指南/最佳实践?

3 个答案:

答案 0 :(得分:1)

REST是什么意思?我们假设,我们引用Roy FieldingHttp 1.1标准。

根据标准,DELETE是幂等方法。即如果您多次请求DELETE,副作用将是相同的。即数据库中的所有相同记录将被标记为"已删除"或者缺席。

首先,要请求DELETE,您需要一个资源。说,http://some.url/to/resource。如果它永远不存在 - 你应该回复404。

Section" 9.7 DELETE"该标准说:

  

如果响应包含一个,那么成功的响应应该是200(OK)      描述状态的实体,202(已接受),如果操作没有      尚未颁布,或204(无内容),如果该行动已经颁布      但是回复不包括实体。

如果您没有完全从数据库中删除记录,并希望在资源被删除且不再可用的后续请求中进行通信,那么标准部分" 10.4.11 410 Gone&#34 ;,说:

  

410响应主要用于协助网络任务      通过通知收件人资源是维护      故意不可用,服务器所有者希望如此      将删除该资源的远程链接。

但是,使用此响应代码或在一段时间内提供它不是必需的,并且响应也可以是404.因此,如果要区分资源,是否已删除资源或从未存在,请使用它。

答案 1 :(得分:0)

状态代码400很好,但是你还可以返回前端可以解析和理解的一些对象(即json)。这样,您的前端可以获得有关错误的更多信息,并可选择覆盖它,然后再将其呈现给用户。一些非常基本且功能不足的伪代码:

后端:

return(status_code=400,
       body={message: {type: "error", description: "some text here"})

前端:

if (status_code >= 400):
    console.log(json.loads(response).message.description)

答案 2 :(得分:-1)

我希望Rest api在删除对象时以200响应。其他任何东西通常意味着我的要求出了问题。

如果我在删除对象后请求了一个对象,那么我会希望API返回404,或者那种性质的东西。

请参阅RFC 2616第9.7节

https://tools.ietf.org/html/rfc2616#section-9.7