我可以向 vnd.error 添加其他字段吗?

Can I add additional fields to vnd.error?

在 Spring HATEOAS 中,您可以 return 一个 VndError 对象,如下所示:

[
  {
    "logref" : "some request id",
    "message" : "your request was incorrect."
  }
]

mime type specification提到了一些可选和必填的字段,但没有谈到添加额外的字段。

如果我将 vnd.error 有效负载扩展为如下所示:

[
  {
    "logref" : "some request id",
    "message" : "your request was incorrect.",
    "additional" : {
      "some" : "additional",
      "payload" : "fields"
    }
  }
]

根据规范格式是否仍然有效?

没有提到 xsd:any 的等效项(已记录 here)。即似乎没有办法扩展架构。如果它只是您控制的一个客户端,那么您可以 'fork' 架构并添加客户端将知道存在的其他内容。但是,如果任何客户端可以访问它并且期望 vnd.error,这是它在看到 application/vnd.error+json 时所期望的,并且如果它不忽略其解析器中的未知属性,则它可能无法解析并且不会甚至得到错误。

此外,如果客户不关心错误但想要 Retry-After header,那么请求将包含不需要的内容。

你能不能创建一个新的端点 /logref/?客户端可以发送 vnd.error logRef 并获取更多信息,您可以发送任何您需要的信息,因为它不会是 vnd.error 响应。

最终,logRef 用于服务器端。任何客户端都只对向其用户和 logRef 显示消息感兴趣,如果他们希望跟进错误,但我怀疑 ThreadLocal 错误可能对客户端没有任何意义。 logRef 指向的内容只对服务器有意义。

确实,通过 ThreadLocal 错误向客户端公开实现细节可能是一个安全问题。内部服务器错误应该足够详细,以便服务器开发人员修复问题,而详细依赖于客户端看不到这些错误,这些错误可能包含敏感的实现细节。