我有一个用于PHP应用程序的RESTful API的自定义实现,它返回json数据,为了传达操作的状态,即请求中是否有失败,我设置了一个自定义HTTP标头,其中包含一个(非常小的)json对象作为字符串。这很好用,因为我可以发送响应并在客户端轻松检索它们,而不会弄乱发送的实际数据。
问题是,使用这种方法是否有任何我可能没有意识到的缺点?应用程序设置自定义 http 标头似乎并不常见,所以我想知道这是一种不好的做法还是不知何故的糟糕"品味"。
这是一个有趣的问题。它不应该有任何理由成为问题,但您应该考虑一些事项:
- 标头对于应用程序必须是唯一的。不只是现在,而是永远。您应该确保在它们前面加上前缀,例如
X-MyApplication-Foo: Bar
.不这样做可能会导致将来发生冲突. - 防火墙有时(很少)对过滤未知的HTTP标头有点过分热心。这应该不是问题,但要记住.
- 与现代浏览器相比,旧版浏览器对标头字段大小的限制较小,因此您需要尽可能多地测试.
是否有理由不能使用标准HTTP错误代码?我知道您可能希望提供堆栈跟踪或其他有用的调试信息,但是在发生错误的情况下,您不会只返回包含错误信息的 JSON blob 而不是正常的"结果"JSON 数据吗?您可以根据HTTP错误代码轻松检测差异,并以不同的方式处理这两种情况。
我担心您建议的原因是标头用于更改或导致浏览器行为 - 它们不打算成为数据存储机制。
伪代码示例:
switch(httpResponseCode)
{
case 200:
parseResult(json);
break;
case 403:
parseForbidden(json);
break;
case 500:
parseServerError(json);
break;
default:
// bad response code, handle appropriately
}