【问题标题】:Error response body format from a request with specific "Accept" header来自具有特定“接受”标头的请求的错误响应正文格式
【发布时间】:2023-03-15 17:47:01
【问题描述】:

我的 HTTP/Rest API 有一个资源端点,可以处理通过请求的“Accept”标头指定的“application/json”和“text/csv”响应正文格式。

如果出现错误,例如 HTTP 400、500 响应等,我想知道应该使用什么响应正文格式来返回错误信息。如果与application/json 一起使用,很明显错误信息必须是 JSON 格式。但是在 text/csv 或任何其他“异国情调”的 mime 类型的情况下使用什么格式?

【问题讨论】:

  • 我不确定这里是否有正确/错误的答案,但我认为无论请求如何,错误消息正文都应该是一种类型(即application/json)。这是为了简化消费者的错误处理。根据您的服务,您的消费者可能对一个请求使用 CSV,对另一个请求使用 XML,以及 JSON。最后,当确实发生错误时,处理一致的错误响应是理想的。
  • @MoA 我想知道关于这个主题是否有某种“最佳实践”。这对我来说似乎也是最好的解决方案。
  • 刚刚环顾四周,发现 UK Land Registry API(相当成熟的 API)可以以 CSV、XML、JSON 等方式响应。它们根据格式返回错误,而不是设置为一种类型(即与我建议的相反)。在GET http://landregistry.data.gov.uk/data/ppi/address.json?town=LONDON 周围玩一玩。您可以将.json 更改为.csv.xml。我知道它并不完全在您指定的标题上,但结果可能是相关的。也许根据类型设置错误响应是正确的方法。
  • 似乎此 API 在错误时返回“text/javascript”内容类型,无论文件扩展名是什么(这是另一种格式检测方法)。至少出现这种错误:GET http://landregistry.data.gov.uk/data/ppi/address.json?ggre=gregr。此查询字符串错误的请求以“text/javascript”格式返回 HTTP 500,响应正文中包含 HTML。
  • 没错。另一个灵感来源是 Oracles API,它返回 JSON 或 XML - https://docs.oracle.com/en/cloud/iaas/messaging-cloud/csmes/using-rest-api.html#GUID-5EA9CC73-0639-4560-8699-706D5A96FB03(错误响应)。

标签: rest http httpresponse


【解决方案1】:

如果没有任何格式可用,HTTP 服务器可以随意忽略 Accept 标头。

鉴于没有真正的“标准”CSV 错误响应,我会默认为application/problem+jsontext/html 甚至text/plain

【讨论】:

  • 似乎是 ihmo 的最佳解决方案。正如用户“Mo A”在原始问题的 cmets 中所说,无论接受请求和内容类型响应如何,对于整个 API 都具有相同格式的错误响应更容易让客户端处理。
  • @sgt-hartman 我不会普遍同意这一点。我们根据接受标头使用 text/html 错误或 application/problem+json 错误。浏览器得到一个漂亮的错误响应,而 api 客户端得到一个可解析的响应 =)
猜你喜欢
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多