RESTAPI返回

RESTAPI返回,rest,Rest,我正在构建一个RESTAPI,并对返回错误感到疑惑。目前,我的计划是使用http状态码,但也总是返回结果。无论是否发生错误,结果如下所示 { "Data":[the data]," Errors":[the errors] } 基本上,如果发生错误,将返回4xx或5xx的Http状态代码,返回的JSON中的Errors集合将包含有关错误的更多详细信息,数据部分为null。如果调用成功,将返回Http状态代码200,其中数据元素包含请求的数据,错误元素将为空 这是返回包含错误信息的数据的好方法吗

我正在构建一个RESTAPI,并对返回错误感到疑惑。目前,我的计划是使用http状态码,但也总是返回结果。无论是否发生错误,结果如下所示

{
"Data":[the data],"
Errors":[the errors]
}
基本上,如果发生错误,将返回4xx或5xx的Http状态代码,返回的JSON中的Errors集合将包含有关错误的更多详细信息,数据部分为null。如果调用成功,将返回Http状态代码200,其中数据元素包含请求的数据,错误元素将为空


这是返回包含错误信息的数据的好方法吗

在我的设计中,我没有在响应JSON对象中同时包含“data”和“errors”属性

如果API成功,我将只返回“数据”。http状态代码为2XXX

如果API失败,我将返回一个“error”对象。http状态遵循RFC 2616第10节中定义的规范

下面是我的错误对象的一个示例

HTTP/1.1 404 Not Found
X-Powered-By: Express
Content-Type: application/json; charset=utf-8
Content-Length: 100
Date: Thu, 08 Nov 2012 07:07:05 GMT
Connection: keep-alive

{
  "type": "error",
  "status": 404,
  "message": "Not Found",
  "help_url": "/api/help.html"
}

我也在使用这种方法。我知道这不符合标准惯例。但不管怎样。我认为这两种说法都有道理。就我个人而言,我的API不是公开的(它们都由我的应用程序内部使用)。所以我认为这是一种“视情况而定”的情况

我的所有API都返回相同的数据结构和T模板负载。数据结构本身很好,因为消费者拥有他们所需要的一切(成功状态、错误代码、错误详细信息,当然还有数据负载本身)


这样,我的表示层可以以友好的方式统一处理所有http响应。

您应该更新对RFC 2616的引用,以指向RFC 7231(或其配套的RFC 7230-7235之一),因为http的工程师之一Mark Nottingham指出,这里的问题是,您将元数据与实际内容混合,这可能会分散客户对其实际任务的注意力。对于内部内容,不需要REST(真正意义上的REST),因为它通常同时控制客户端和服务器。对于拥有大量客户机的API,尤其是那些不在您控制之下的API,情况看起来有所不同。以
application/problem+json
(或xml)的名称指定自己的错误消息格式,如果HTTP状态代码不足,则该格式可标准化将错误详细信息返回给客户端的方式enough@RomanVottner-谢谢。现在我真的在考虑撤销我认为是个好主意的事情。现在,我应该能够将响应类型转换为类协定了,对吗?我想我可以使用类似Postman的东西检查我的API响应,并对原始响应进行处理。REST中最常见的失败之一是资源被认为返回类型,这就是!客户机和服务器应该使用内容类型协商来商定一种既能理解又能支持的表示格式。其他所有内容都需要带外信息(在外部文档中或其他内容中),并且可能会导致以后的互操作性问题,这可能是由于自定义或扩展,也可能是由于缺乏对该语法的一般支持。