访问多个环境的REST API的最佳实践

时间:2015-03-26 23:35:25

标签: rest convention

编写需要访问不同环境(如实验室/测试数据库和生产数据库)的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"}

1 个答案:

答案 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的表示的一部分,因此我不相信有效负载内的方法。关于查询参数方法,它类似,因为这些参数适用于资源上的请求。

希望它可以帮到你,