我正在设计一个JSON API,我想使用某种内容协商来对API进行版本控制.我目前正计划使用Vendor MIME Types来做到这一点.
虽然我绝对可以在应用程序级别执行此操作,但我认为最好在HTTP服务器级别实现此目的. Apache或nginx可以实现吗?
Content-Type看起来像:application / vnd.vendorname-v1 json
或者可能使用参数:application / vnd.vendorname json; v = 1
Nginx对这类问题的惯用方法是通过地图.请参阅my answer at StackOverflow.
基本上,您在http部分中定义一个地图
map $any_variable $my_upstream {
# Default value:
default upstream1;
# Exact match:
application/vnd.vendorname+json;v=1 upstream2;
# Regexp:
~^application.*vnd.vendorname-v1\+json upstream3;
}
您可以在一个地图中混合完全匹配和正则表达式.
然后你只需在你的服务器或位置部分使用$my_upstream:
location / {
proxy_pass http://$my_upstream$uri;
}
Nginx懒惰地评估地图变量,只有一次(每个请求)以及何时使用它们.