在REST中,假设客户端调用了findAll方法(GET) - 它只是将实体列表(DTO)返回到HTTP状态码为200的客户端。现在,让我们说客户端已经调用了DELETE方法removeObject(Object object)。参数中的对象不存在于数据库中,并且通常它将返回HTTP状态代码400.我希望客户端以更易于管理的方式(较少恐慌)知道400的真正原因。现在需要一个状态代码/描述,这在GET方法中是不必要的。
我希望客户端为所有消息获得一致的RESPONSE。是否有基于REST的API返回的指南/最佳实践?
答案 0 :(得分:1)
REST是什么意思?我们假设,我们引用Roy Fielding和Http 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节