Web API url 测试版
Posted
技术标签:
【中文标题】Web API url 测试版【英文标题】:Test version of web API url 【发布时间】:2016-12-28 14:37:52 【问题描述】:对于我们的 Web api 项目,我们使用以下 url 版本控制系统:
https://fqdn/apiVersion/apiResourceName/resourcePath?parameters
例如,我们可以有如下内容:
https://myapi.mysite.com/v1/customer/2
现在考虑到上述情况,假设您想向客户发布两个版本(live、test)。一种是实时版本(使用实时数据),另一种是测试版本(使用测试数据进行客户开发测试)。
对于现场直播,我可以轻松使用我提到的那个:https://myapi.mysite.com/v1/customer/2。
上述api的测试版怎么命名?什么是 api url 版本 v1 的测试版本?可以指定测试api url吗?
在使用 url 版本控制时,API fqdn 的完全限定域名的最佳做法是什么?
【问题讨论】:
test.myapi.mysite.com 听起来是个不错的方法,但是就使用“请求标头来区分实时和测试”而言,它违背了使用“url 版本控制视觉优势”的全部目的与标题版本控制相比的目视检查。客户需要像 url 这样简单的东西来放入他的 live/test 配置文件,而无需操作标题。 您是否考虑过使用功能切换。您可以为大多数用户提供实时数据,然后切换到开发人员的测试数据。您还可以让开发人员无需更改网址即可自行打开和关闭测试数据。 【参考方案1】:确实有几种方法可以做到这一点。
例如,一种方法是简单地使用属性路由为其提供不同的路径。创建一个单独的方法,例如给它一个/vtest/customer/2
的路径,如果用户访问这个/vtest/
版本(或v2 或3 或其他)然后返回测试数据/新版本。见example in this question
另一种方法是将“测试数据”API 托管在服务器的不同应用程序中,并让 web.config 指向数据库/源数据的测试版本。使用 IIS,您将配置两个不同的应用程序(一个用于测试,另一个用于实时),并且基本 URL 会有所不同,例如:https://myapi.mysite.com/appname1/v1/customer/2
与 https://myapi.mysite.com/appname2/v1/customer/2
,您的 appname 可能类似于 @987654328 @ 与 test
。看看this simple example
您也可以将它们完全托管在不同的服务器中,这会导致您的 fqdn 在测试版本和实时版本之间发生变化(例如 server.com/v1/customer/2
与 testserver.com/v1/customer/2
) - 这就是我目前的工作所做的,并且我发现它非常有效,因为它隔离了实时/测试数据(和 API 版本),避免了它们之间的混淆。
我还发现 this blog post 详细说明了如何使用命名空间来做到这一点
换句话说,不只是一种最佳/正确的方法来做您想做的事,这一切都归结为您(或您的公司/老板/团队)希望如何构建和控制 API 中的测试与实时数据.看看这些选项,看看哪个最适合您的情况,希望我能提供帮助。
【讨论】:
【参考方案2】:我认为您的问题的标题具有误导性。您要解决的问题不是版本控制(因为您的客户端正在连接到相同版本的应用程序:v1)。它是关于拥有多个环境:一个用于实时数据,一个(或多个)用于测试数据。
在我的公司,我们通过主机名解决了这个问题。在https://live.mysite.com/api/v1,我们托管连接到实时数据的 API 的 v1。在https://nodex.mysite.com/api/v1,我们托管连接到测试数据的 API 的 v1。我们的客户可以根据需要请求新节点(例如,client1-devnode.mysite.com/api/v1 进行开发,client1-testnode.mysite.com/api/v1 进行测试。每个节点都有自己的一组测试数据.
【讨论】:
【参考方案3】:大多数现场项目针对不同环境使用不同的服务器。 而不是使用不同版本的 API 端点,您应该为不同的环境使用不同的服务器,如下所示:
对于生产/直播:https://myapi.mysite.com/v1/customer/2
测试用:https://myapi.mysitetest.com/v1/customer/2
对于开发人员:https://myapi.mysitedev.com/v1/customer/2
您需要为您要访问的不同后端端点配置特定于环境的属性。喜欢:test.properties/dev.properties/live.properties
【讨论】:
【参考方案4】:根据我在 API 开发方面的经验,我发现有 2 种制作服务器(测试/开发人员)/实时的方式 我将展示一个带有您的链接类型的示例 https://fqdn/apiVersion/apiResourceName/resourcePath?parameters
在您的情况下,您可以使用或基于设置和基于链接测试类型
设置基于什么?
基于设置的是您的服务器,例如https://rest.mysite.com/v1/customer/2 如果您或您的客户将在他的设置中将服务器状态设置为 test 并且如果作为 live - status 设置为 live,则将充当测试。 这种方法在某些情况下很好,但为了测试和同时生活,不推荐这种类型。
什么是基于链接|URL|URI 的?
此方法有两种类型的识别请求是测试或实时
-
一种方法是将 test 设置为参数 https://api.mysite.com/test/v1/customer/2,无需测试即可上线
第二种方法是将 api 设置为 testApi 或 apiTest 例如 https://testapi.mysite.com/v1/customer/2 或 https://apitest .mysite.com/v1/customer/2 。这样,客户既可以进行测试,也可以进行实时项目,他也可以进行测试和实时项目。
为了安全起见,请务必在提供实时 API 访问权限之前检查客户并进行验证。
【讨论】:
【参考方案5】:作为一个选项,您可以使用自定义的标题。如果请求包含自定义标头 -> 将请求重定向到 API 的测试版本。
【讨论】:
以上是关于Web API url 测试版的主要内容,如果未能解决你的问题,请参考以下文章