对于我们的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}的完全限定域名的最佳做法是什么?
答案 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
并且不要忘记安全性,在给予实时api访问权限之前,请务必检查客户并进行验证。
答案 4 :(得分:0)
作为选项,您可以使用自定义标题。如果请求包含自定义标头 - >重定向请求以测试API的版本。