测试Web API网址的版本

时间:2016-12-28 14:37:53

标签: rest api asp.net-web-api restful-architecture restful-url

对于我们的Web api项目,我们使用以下url版本控制系统:

的https:// {FQDN} / {apiVersion} / {apiResourceName} / {resourcePath} {参数}

? 例如,我们可以使用以下内容:

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

现在考虑上面,假设您要向客户发布两个版本(实时,测试)。一个实时版本(使用实时数据),另一个是测试(使用测试数据进行客户开发测试)。

对于现场直播,我可以轻松使用我提到的那个:https://myapi.mysite.com/v1/customer/2

您如何命名上述API的测试版?什么是api url版本v1的测试版本?可以指定测试api url吗?

使用网址版本控制时,API {fqdn}的完全限定域名的最佳做法是什么?

5 个答案:

答案 0 :(得分:2)

有几种方法可以做到这一点。

例如,一种方法是简单地使用属性路由为其提供不同的路径。创建一个单独的方法,例如给它一个/vtest/customer/2的路径,如果用户访问此/vtest/版本(或v2或3或其他),则返回测试数据/新版本。查看example in this question

另一种方法是托管您的测试数据" API位于服务器的不同应用程序中,并使您的web.config指向测试数据库/源数据的版本。使用IIS,您可以配置两个不同的应用程序(一个用于测试,另一个用于实时),基本URL会有所不同,例如:https://myapi.mysite.com/appname1/v1/customer/2 vs https://myapi.mysite.com/appname2/v1/customer/2 appname 可能类似live vs test。看看this simple example

您也可以将它们完全托管在不同的服务器中,这会导致您的{fqdn}在测试版和实时版之间发生变化(例如server.com/v1/customer/2 vs testserver.com/v1/customer/2) - 这就是我在我的工作当前的工作,我发现它非常有效,因为它隔离了实时/测试数据(和API版本),避免了它们之间的混淆。

我还发现this blog post详细说明了如何使用命名空间

换句话说,没有一种最佳/正确的方法可以做你想做的事情,这一切都归结为你(或你的公司/老板/团队)想要如何构建和控制测试与实时数据你的API。看看这些选项,看看哪一个最适合你的情况,希望我能够提供帮助。

答案 1 :(得分: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进行测试。每个节点都拥有它自己的节点一组测试数据。

答案 2 :(得分:0)

大多数实时项目针对不同的环境使用不同的服务器。 您应该为不同的环境使用不同的服务器,而不是使用不同版本的API端点:

对于Prod / live:https://myapi.mysite.com/v1/customer/2

对于测试:https://myapi.mysitetest.com/v1/customer/2

对于Dev:https://myapi.mysitedev.com/v1/customer/2

您需要为正在命中的不同后端端点配置特定于环境的属性。例如:test.properties/dev.properties/live.properties

答案 3 :(得分:0)

凭借我在API开发方面的经验,我发现有两种制作服务器(测试/开发人员)/ live的方法 我将以您的链接类型显示示例 的的https:// {FQDN} / {apiVersion} / {apiResourceName} / {resourcePath} {参数}

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

什么是基于设置?

基于设置的是您的服务器,例如https://rest.mysite.com/v1/customer/2 如果您或您的客户将其设置服务器状态设置为测试,并且如果处于实时状态,则将生活设置为测试。 这种方法在某些情况下很好,但为了测试和同时生活,这种类型不推荐。

什么是链接|网址|基于URI?

此方法有2种类型的识别请求是test or live

  1. 一种方法是将测试设置为参数https://api.mysite.com/ 测试 / v1 / customer / 2,并且不进行测试就会生效
  2. 第二种方法是将api设置为testApi或apiTest,例如https:// testapi .mysite.com / v1 / customer / 2或https:// apitest .mysite.com / v1 / customer / 2。这样客户既可以测试也可以直播,他也可以进行测试和实时项目。
  3. 并且不要忘记安全性,在给予实时api访问权限之前,请务必检查客户并进行验证。

答案 4 :(得分:0)

作为选项,您可以使用自定义标题。如果请求包含自定义标头 - >重定向请求以测试API的版本。