REST api、GET 和时区作为参数还是标题?

Kam*_*zic 5 rest timezone http-headers

什么是正确/首选的 REST api 设计来获取取决于时区的数据?

我正在考虑简单地将时区添加为 URL 参数,因此:

$ curl www.api.example.com/data?timezone="Europe/Amsterdam"
Run Code Online (Sandbox Code Playgroud)

但是有人建议以类似于 github 的方式使用自定义标头:

$ curl -H "X-Time-Zone: Europe/Amsterdam" www.api.example.com/data
Run Code Online (Sandbox Code Playgroud)

https://developer.github.com/v3/#using-the-time-zone-header

我想知道在这里使用 header 而不是 param 有什么好处?这样的决定背后是否有任何设计模式?

Mat*_*int 5

无论您希望在路径、查询字符串、标题还是内容正文中接受输入参数,这完全取决于您。

但是,有人可能会争辩说,当标题不是您正在调用的 api 的主要关注点时,它是有意义的。例如,如果您的 api 专门用于检索时区的属性,那么我建议将它传递到 url 上,或者在您在问题中建议的查询字符串上,或者在路径上(www.api.example.com /时区/欧洲/阿姆斯特丹)。

另请注意,您提供的在标头中使用参数的示例是 POST 调用。虽然它没有被禁止,但在 POST 中传递查询字符串参数通常没有多大意义。通过将时区作为标题传递,消息的正文可以专注于发布的内容。