什么是正确的/首选的REST api设计来获取依赖于时区的数据?
我正在考虑简单地添加时区作为URL参数,所以:
$ curl www.api.example.com/data?timezone="Europe/Amsterdam"
但是有人建议使用自定义头以类似github的方式:
$ curl -H "X-Time-Zone: Europe/Amsterdam" www.api.example.com/data
https://developer.github.com/v3/using-the-time-zone-header
我想知道在这里使用header而不是param的好处是什么?这样的决定背后有什么设计模式吗?
是否接受路径、查询字符串、标题或内容体中的输入参数,这完全取决于您。
然而,有人可能会说,当头文件不是你所调用的api的主要关注点时,头文件是有意义的。例如,如果您的api专门用于检索时区的属性,那么我建议将其传递到url上,或者在您在问题中建议的查询字符串上,或者在路径(www.api.example.com/timezone/europe/amsterdam)上。
还请注意,您给出的在头中使用参数的示例是POST调用。虽然没有禁止,但在POST中传递查询字符串参数通常没有多大意义。通过将时区作为消息头传递,消息体可以关注所发布的内容。