访问多个环境的 REST API 的最佳实践
Best practices for REST API that access multiple environments
在编写需要访问不同环境(例如 lab/test 数据库和生产数据库)的 RESTful API 时,设置 [=25= 的最佳实践是什么? ]?
应该有@PathParam
吗?:
/employee/{emp_id}/{environment}
/{environment}/employee/{emp_id}/
应该有一个@QueryParam
吗?:
/employee/{emp_id}/?environment="test"
/employee/{emp_id}/?environment="prod"
payload中是否应该有字段?:
{"emp_id":"123","environment":"test"}
{"emp_id":"123","environment":"production"}
事实上,我看到了两种处理方法。使用一个或另一个的原因对应于在您的 RESTful 应用程序中最方便实施的内容。
使用路径参数
使用这种方法,它应该是资源路径最开头的路径参数。所以 URL 会是这样的:/{environment}/employee/{emp_id}
。如果您在不同的根路径下部署了多个应用程序,则这种方法很方便。例如:
/test
: 为测试环境打包的应用程序
/prod
:与生产配置打包的应用程序
在这种情况下,每个环境的应用程序都是隔离的。
使用自定义 header
您还可以自定义 header 来指定要路由的环境。 Github 使用类似于 select 版本的 API 来使用。请参阅此 link:https://developer.github.com/v3/#current-version。这不是完全一样的东西,但你可以有类似的东西:
GET /employee/{emp_id}
x-env: test
反向代理可以处理这个 header 并将请求路由到正确的环境。
我不相信有效负载中的方法,因为字段 environment
实际上不是元素资源 employee
表示的一部分。关于查询参数的方法,它是类似的,因为这些参数适用于对资源的请求。
希望对你有帮助,
在编写需要访问不同环境(例如 lab/test 数据库和生产数据库)的 RESTful API 时,设置 [=25= 的最佳实践是什么? ]?
应该有@PathParam
吗?:
/employee/{emp_id}/{environment}
/{environment}/employee/{emp_id}/
应该有一个@QueryParam
吗?:
/employee/{emp_id}/?environment="test"
/employee/{emp_id}/?environment="prod"
payload中是否应该有字段?:
{"emp_id":"123","environment":"test"}
{"emp_id":"123","environment":"production"}
事实上,我看到了两种处理方法。使用一个或另一个的原因对应于在您的 RESTful 应用程序中最方便实施的内容。
使用路径参数
使用这种方法,它应该是资源路径最开头的路径参数。所以 URL 会是这样的:
/{environment}/employee/{emp_id}
。如果您在不同的根路径下部署了多个应用程序,则这种方法很方便。例如:/test
: 为测试环境打包的应用程序/prod
:与生产配置打包的应用程序在这种情况下,每个环境的应用程序都是隔离的。
使用自定义 header
您还可以自定义 header 来指定要路由的环境。 Github 使用类似于 select 版本的 API 来使用。请参阅此 link:https://developer.github.com/v3/#current-version。这不是完全一样的东西,但你可以有类似的东西:
GET /employee/{emp_id} x-env: test
反向代理可以处理这个 header 并将请求路由到正确的环境。
我不相信有效负载中的方法,因为字段 environment
实际上不是元素资源 employee
表示的一部分。关于查询参数的方法,它是类似的,因为这些参数适用于对资源的请求。
希望对你有帮助,