【发布时间】: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