HTTP标头,用于指示响应正文所需的样式属性

时间:2016-03-24 15:42:12

标签: json rest http http-headers rfc

我应该使用什么HTTP标头来指定HTTP响应的样式属性,特别是JSON对象中的键的情况?注意:我正在开发REST API,我希望客户提供预期的案例,例如camelCasesnake_case

指定camelCase后,响应将如下所示:

{
  "peopleUrl": "…",
  "postsUrl": "…"
}

指定snake_case后,响应将如下所示:

{
  "people_url": "…",
  "posts_url": "…"
}

我一直关注的标题是ExpectPreferExpect被描述为服务器必须遵守的强制配置或错误,Prefer被描述为可选配置。我正在研究的具体语法是:

Expect: case=camel

或:

Prefer: case=camel

目前,我觉得Expect是最好的,因为它需要配置。但是,在RFC 2616中提供了Expect的扩展机制,但在RFC 7231中,此扩展机制已被删除,只允许100-continue字段(滚动到下一页看到提供权证的说明)。在RFC 7240中指定了Prefer标头,而 似乎具有扩展机制。

哪个标头最适合此配置选项?我是否使用ExpectPrefer找错了方向?

1 个答案:

答案 0 :(得分:1)

正如一些评论所指出的那样,可能没有HTTP RFC中定义的现有HTTP头名称,它将覆盖/处理您的用例。使用ExpectPrefer,定义明确的语义并不能完全满足您的需求,可能会导致比您更喜欢的痛苦/挫折感;这些标头可能由您不希望/期望的方式由现有客户端,服务器和代理专门处理。

也就是说,没有什么可以阻止您使用自己的自定义X-标头来处理请求响应,例如 X-JSON-KeyStyle

GET /path/to/resource HTTP/1.1
Host: ...
X-JSON-KeyStyle: camel
...

然后您的回复将指示返回数据中使用的样式:

HTTP1/1 200 OK
...
X-JSON-KeyStyle: camel
...

根据规范,任何以X-开头的标题名称都是故意不被处理/覆盖的,并且用于此类用途。通过这种方法,您只需要记录自定义HTTP标头,供REST API的客户端使用。

希望这有帮助!