编写需要访问不同环境(如实验室/测试数据库和生产数据库)的RESTful API时,设置API的最佳做法是什么?
是否应该有@PathParam
?:
/employee/{emp_id}/{environment}
/{environment}/employee/{emp_id}/
是否应该有@QueryParam
?:
/employee/{emp_id}/?environment="test"
/employee/{emp_id}/?environment="prod"
有效载荷中是否应该有字段?:
{"emp_id":"123","environment":"test"}
{"emp_id":"123","environment":"production"}
答案 0 :(得分:1)
事实上,我认为有两种方法可以解决这个问题。使用其中一个的原因对应于在RESTful应用程序中最方便实现的内容。
使用路径参数
使用这种方法,它应该是资源路径最开始的路径参数。所以URL就像这样:/{environment}/employee/{emp_id}
。如果在不同的根路径下部署了多个应用程序,则此方法很方便。例如:
/test
:与测试环境配置一起打包的应用程序
/prod
:与生产配置一起打包的应用程序
在这种情况下,每个环境的应用程序都是隔离的。
使用自定义标题
您还可以使用自定义标头指定要路由的环境。 Github使用类似的东西来选择要使用的API版本。请看这个链接:https://developer.github.com/v3/#current-version。这不完全相同,但你可以有类似的东西:
GET /employee/{emp_id}
x-env: test
反向代理可以处理此标头并将请求路由到正确的环境。
由于字段environment
实际上不是元素资源employee
的表示的一部分,因此我不相信有效负载内的方法。关于查询参数方法,它类似,因为这些参数适用于资源上的请求。
希望它可以帮到你,