15

我有一个用于返回 json 数据的 PHP 应用程序的 RESTful API 的自定义实现,并且为了传达操作的状态,即请求中是否有失败,我正在设置一个自定义 HTTP 标头(非常tiny) json 对象作为字符串。这很好用,因为我可以发送响应并轻松地在客户端检索它们,而不会弄乱发送的实际数据。

问题是,使用这种方法有没有我可能没有意识到的缺点?应用程序设置自定义 http 标头似乎并不常见,所以我想知道这是一种不好的做法还是某种不好的“品味”。

4

1 回答 1

14

这是个有趣的问题。应该没有任何理由让它成为问题,但您应该考虑以下几点:

  1. 标头对于您的应用程序必须是唯一的。不只是现在,而是永远。您应该确保为它们添加前缀,例如X-MyApplication-Foo: Bar. 不这样做可能会导致将来发生冲突。

  2. 防火墙有时(很少)有点过分热衷于过滤未知的 HTTP 标头。这应该不是问题,但需要牢记。

  3. 与现代浏览器相比,旧浏览器对标头字段大小的限制更小,因此您需要尽可能多地进行测试。

您是否有理由不能使用标准的 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
}
于 2012-06-29T15:08:09.233 回答