我正在帮助为Drupal CMS设计RESTful API(http://drupal.org/)。作为其中的一部分,我们希望在给定的数据对象(资源)上支持多种格式(mime类型)。一切都很好。
但是,我们不确定错误处理的最佳做法是什么。具体来说,在403,404或500错误的情况下,我们应以何种格式返回错误消息,以及它在多大程度上重要?
我最初的想法当然是“以所要求的格式,呃”。但是,这意味着需要进行大量的每格式工作才能确保正确的信封。例如:
应用/ JSON:
{'错误':“弗拉米斯顿破了,我们找不到那个对象。” }
应用/ JSON-LD + JSON
{'@ context':{something here},'@ error':“framistan破了,我们找不到那个对象。” }
应用/ XML
<error>
<message>The framistan broke and we cannot find that object.</message>
</error>
应用/原子+ xml的 [与application / xml相同,但有20行Atom包装器标记]
应用/ SVG + xml的
<svg>
<text>The framistan broke and we cannot find that object.</text>
</svg>
等等。当然,我们API的消费者需要知道我们如何格式化错误消息有效负载。这对于向系统添加新格式以及与我们的API集成来说是一个相当大的障碍。
或者,我们可以说普通格式(即不是HTML)上的错误总是返回未格式化的文本/纯字符串。因此,如果系统在请求任何非HTML格式时死亡,您将始终返回带有正文的文本/纯文本消息“framistan已破坏,我们无法找到该对象。”
开发更容易,客户端更容易支持,但这意味着请求application / atom + xml的客户端可以在text / plain中获取响应。怎么了?
还有其他人遇到过这个问题吗?你是怎么解决的?对于如何处理这种情况,是否有事实上的最佳做法?在某个地方是否有规范要求我们可以遵循的做法?基本上我想尽可能避免“做我们自己的事情”,特别是在REST API方面。