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/2https://myapi.mysite.com/appname2/v1/customer/2,您的 appname 可能类似于 @987654328 @ 与 test。看看this simple example

您也可以将它们完全托管在不同的服务器中,这会导致您的 fqdn 在测试版本和实时版本之间发生变化(例如 server.com/v1/customer/2testserver.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 测试版的主要内容,如果未能解决你的问题,请参考以下文章

如何在本地测试 twitter API?

selenium-web自动化测试

Web API接口

开发测试数据-通过API批量生成

Web API接口

接口测试2-开发WEB接口