Web API的测试版本URL

7
我们的Web API项目采用以下URL版本控制系统:
https://{fqdn}/{apiVersion}/{apiResourceName}/{resourcePath}?{parameters}
例如,我们可以有如下内容:

https://myapi.mysite.com/v1/customer/2

现在考虑到上述情况,假设您想向客户发布两个版本(live和test)。一个是live版本(使用实时数据),另一个是test版本(使用测试数据进行客户开发测试)。
对于live版本,我可以轻松地使用我提到的这个:https://myapi.mysite.com/v1/customer/2
如何命名上述api的test版本?v1版本的test api url是什么?能否指定test api url?
此外,在使用url版本控制时,API {fqdn}的完全限定域名的最佳实践是什么?

test.myapi.mysite.com听起来是一个不错的方法,但是使用“请求头来区分测试和生产环境”的做法会破坏使用“URL版本控制视觉优势”的初衷,因为与头部版本控制相比,它在视觉检查方面并不占优势。客户要求像URL一样简单地将其放入其生产/测试配置文件中,而不需要操作头部信息。 - MHOOS
你是否考虑过使用功能开关?这样,大多数用户可以使用实时数据,但开发人员可以切换到测试数据。此外,你还可以让开发人员有能力在不更改任何URL的情况下自行打开或关闭测试数据。 - Woot
5个回答

3
有几种方法可以实现这个功能。
例如,一种方法是使用属性路由来为其提供不同的路径。创建一个单独的方法,例如将其路径设置为/vtest/customer/2,如果用户访问此/vtest/版本(或v2或v3等),则返回测试数据/新版本。请参见此问题中的示例
另一种方法是在服务器上的不同应用程序中托管您的“测试数据”API,并使您的web.config指向数据库/源数据的测试版本。使用IIS,您将配置两个不同的应用程序(一个用于测试,另一个用于生产),基本URL将不同,例如:https://myapi.mysite.com/appname1/v1/customer/2https://myapi.mysite.com/appname2/v1/customer/2,而您的appname可能是livetest之类的东西。请查看这个简单的例子
您还可以将它们直接托管在不同的服务器上,这将导致您的{fqdn}在测试和生产版本之间发生更改(例如server.com/v1/customer/2testserver.com/v1/customer/2)。这就是我在目前的工作中所做的,我发现它非常有效,因为它隔离了实时/测试数据(和API版本),避免了它们之间的混淆。
我还发现这篇博客文章详细介绍了如何使用命名空间实现此目的。
换句话说,没有一种最佳/正确的方法来实现您想要的功能,这完全取决于您(或您的公司/老板/团队)希望如何在API中结构化和控制测试与生产数据。请查看这些选项,看看哪个在您的情况下最好,希望我能够帮助到您。

1

大多数现场项目在不同的环境中使用不同的服务器。 与其使用不同版本的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。


1
我认为你的问题标题有误导性。你试图解决的问题不是版本控制(因为你的客户端连接的是同一个应用程序版本: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进行测试)。每个节点都有自己的一组测试数据。

0

根据我在API开发方面的经验,我发现有两种制作服务器(测试/开发者)/实时的方法。我将以您的链接类型为例进行说明。

在您的情况下,您可以使用基于设置基于链接的测试类型。

什么是基于设置的?

基于设置的方法是,例如您的服务器https://rest.mysite.com/v1/customer/2将在您或您的客户将服务器状态设置为测试时充当测试服务器,如果设置为实时,则充当实时服务器。这种方法在某些情况下很好,但是为了同时进行测试和实时操作,不建议使用此类型。

什么是基于链接| URL | URI的?

此方法有两种类型来识别请求是测试还是实时。

  1. 一种方法是将测试设置为参数https://api.mysite.com/test/v1/customer/2,没有测试则进入实时模式。
  2. 第二种方法是将API设置为testApi或apiTest,例如https://testapi.mysite.com/v1/customer/2或https://apitest.mysite.com/v1/customer/2。这样客户既可以进行测试,又可以拥有实时项目。

并且不要忘记在提供实时API访问之前始终检查客户并进行验证以确保安全性。


0

作为一种选择,您可以使用自定义定义的标头。如果请求包含自定义标头,则将请求重定向到API的测试版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接