Rest 第三方API返回500错误,我的API应该返回什么代码

Rest 第三方API返回500错误,我的API应该返回什么代码,rest,http-status-codes,laminas-api-tools,Rest,Http Status Codes,Laminas Api Tools,我在一个基于ZF2(Zend framework 2)的框架中编写了一个称为Apigility的API 我的服务可以查询第三方API。偶尔,我会收到500条错误信息。。要么是由于过期的代币,要么是一些这样的代币 我的API应该如何回复我的客户? 起初我以为我应该还500英镑,但实际上这似乎是错的。我不想返回指示我已崩溃的错误。。这是第三方拥有500个d 更新:下面是我从第三方看到的 我想我喜欢503服务不可用的想法。。带有一条错误消息,提示用户出了什么问题,以及如何修复 显示第三方响应的更新:

我在一个基于ZF2(Zend framework 2)的框架中编写了一个称为Apigility的API

我的服务可以查询第三方API。偶尔,我会收到500条错误信息。。要么是由于过期的代币,要么是一些这样的代币

我的API应该如何回复我的客户?

起初我以为我应该还500英镑,但实际上这似乎是错的。我不想返回指示我已崩溃的错误。。这是第三方拥有500个d

更新:下面是我从第三方看到的

我想我喜欢
503服务不可用的想法。。带有一条错误消息,提示用户出了什么问题,以及如何修复

显示第三方响应的更新:

Error performing request to OAuth Provider. 
HTTP/1.1 500 Internal Server Error
Server: nginx/1.1.19
Date: Fri, 22 Aug 2014 20:24:40 GMT
Content-Type: text/html
Content-Length: 20
Connection: close
X-Powered-By: PHP/5.3.10-1ubuntu3.1
Set-Cookie: lang_select_language=en; Expires=Sun, 21-Aug-2016 20:24:42 GMT; Path=/
X-WI-SRV: FR-EQX-WEB-03
Vary: Accept-Encoding
Content-Encoding: gzip
想法

/**
 * Status titles for common problems
 *
 * @var array
 */
protected $problemStatusTitles = array(
    // CLIENT ERROR
    400 => 'Bad Request',
    401 => 'Unauthorized',
    402 => 'Payment Required',
    403 => 'Forbidden',
    404 => 'Not Found',
    405 => 'Method Not Allowed',
    406 => 'Not Acceptable',
    407 => 'Proxy Authentication Required',
    408 => 'Request Time-out',
    409 => 'Conflict',
    410 => 'Gone',
    411 => 'Length Required',
    412 => 'Precondition Failed',
    413 => 'Request Entity Too Large',
    414 => 'Request-URI Too Large',
    415 => 'Unsupported Media Type',
    416 => 'Requested range not satisfiable',
    417 => 'Expectation Failed',
    418 => 'I\'m a teapot',
    422 => 'Unprocessable Entity',
    423 => 'Locked',
    424 => 'Failed Dependency',
    425 => 'Unordered Collection',
    426 => 'Upgrade Required',
    428 => 'Precondition Required',
    429 => 'Too Many Requests',
    431 => 'Request Header Fields Too Large',
    // SERVER ERROR
    500 => 'Internal Server Error',
    501 => 'Not Implemented',
    502 => 'Bad Gateway',
    503 => 'Service Unavailable',
    504 => 'Gateway Time-out',
    505 => 'HTTP Version not supported',
    506 => 'Variant Also Negotiates',
    507 => 'Insufficient Storage',
    508 => 'Loop Detected',
    511 => 'Network Authentication Required',
);

嗯,我想这取决于你,你将使用哪种错误代码。但是,如果API的实际功能依赖于第三方API,我会考虑使用HTTP代码<强> >代码> 503服务不可用 ,因为直到第三方API无法工作,无论第三方API返回什么HTTP代码,您的服务将不可用。我还将在响应负载中包含一些细节(错误消息)

当然,您也可以返回HTTP代码
200 OK
,并将自定义错误代码和消息作为响应负载发送,因为对API的HTTP请求实际上是成功的。但是我更愿意使用HTTP代码来指示API端点的状态


我会将HTTP代码从第三方API镜像到用户,但前提是您的API充当代理而没有任何附加功能。

当客户端调用您的API时,它是否直接或间接指定希望您的API与第三方服务通信

  • 否-那么对于客户端,它将是500,因为它仍然是内部的 从客户端的角度来看,服务器错误。除非您的API可以从中解释错误消息 第三方服务,并派生更具体的错误代码

  • 是的,那么 503似乎是这里最合适的。可能会显示错误消息 指定不可用的服务


    • 我认为第一步是确定范围。4xx意味着用户有机会修复请求,但这里的情况并非如此。2xx听起来也不正确,因为请求未成功。这就给我们留下了几乎在5xx范围内的东西


      在5xx范围内,有两个选项适合我。一个简单的500就可以了:“有一个未指定的服务器错误”。503听起来也不错,意思是“我们现在无法完成这项任务,但以后可以完成(可以选择在标题中指定重试范围).

      这实际上取决于您的API消费者的期望。您的API结果是否包含
      错误
      字段?@Mr.Llama我将用第三方给我的示例响应进行更新。我想我需要一种方式在REST中说,‘嗨,我收到了您的请求,并转发了它,但它失败了,这就是为什么……’我们已经包含了一个错误字段。。200是不可接受的,因为用户希望发生操作(并获取一些数据)我想我会做400..或503,谢谢你的提醒,但你应该考虑你返回的HTTP代码,作为描述用户和你之间请求的代码。如果你返回HTTP 400,我会理解,我的请求做错了,我会尝试修复它。我不认为返回400会起作用。我认为返回status代码503将是一个不错的选择。@Athar您刚刚重复了我写的内容,但没有任何解释。@Dawiderency我正在寻找类似的东西,以便在第三方api之一关闭时返回相关响应。是的,我同意您的意见,只是附和您的观点,即返回503将更有意义。这就是我如何实现的。它是d直接请求第三方,按名称。