对于我们的Web API项目,我们使用以下URL版本控制系统:
https://{fqdn}/{apiversion}/{apiresourcename}/{resourcepath}?{parameters}
例如,我们可以拥有以下内容:
https://myapi.mysite.com/v1/customer/2
现在考虑到上述,假设您想向客户发布两个版本(实时测试)。一个实时版本(使用实时数据),另一个是测试(使用用于客户开发测试的测试数据)。
对于现场直播,我可以轻松地使用我提到的:https://myapi.mysite.com/v1/customer/2。
您如何命名上述API的测试版本?API URL版本V1的测试版本是什么?可以指定测试API url?
使用URL版本启动时,API {fqdn}的完全合格域名的最佳实践是什么?
实际上有几种方法可以做这个。
一种方法,例如,只需使用属性路由即可为其提供不同的路径。创建一个单独的方法,为其提供/vtest/customer/2
的路径,例如用户访问此/vtest/
版本(或V2或3或其他),然后返回测试数据/新版本。请参阅此问题中的示例
另一种方法是在服务器中的另一个应用程序中托管您的"测试数据" API,并具有您的Web.config点来测试数据库/源数据的版本。使用IIS,您将配置两个不同的应用程序(一个用于测试,另一个用于实时),并且基本URL将有所不同,例如: https://myapi.mysite.com/appname1/v1/customer/2
vs https://myapi.mysite.com/appname2/v1/customer/2
,而您的 AppName 可能与live
相比test
。看看这个简单的示例
您也可以完全将它们托管在不同的服务器中,这将导致您的{fqdn}在测试和实时版本之间进行更改(例如server.com/v1/customer/2
与testserver.com/v1/customer/2
) - 这是我当前工作中所做的,我发现它非常非常有效,因为它可以隔离实时/测试数据(和API版本),以避免它们之间的混淆。
我还找到了此博客文章,详细介绍了如何使用名称空间
换句话说,不仅仅是一种最好/正确的方法来完成您想要的事情,这一切都归结为您(或您的公司/老板/团队)想要在API中构造和控制测试与实时数据。看看这些选项以查看哪种选项在您的情况下是最好的,希望我能够提供帮助。
我认为您的问题的标题是误导。您要解决的问题不是版本化(因为您的客户端正在连接到应用程序的同一版本: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进行测试以对抗。每个节点都会获取自己的一组测试数据集。您不应该使用不同版本的API端点,而应在此类环境中使用不同的服务器:
for 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
随着我在API开发的经验,我发现有两种制作服务器(test/developer)/live的方法我将以您的链接类型展示一个示例 https://{fqdn}/{apiversion}/{apiresourcename}/{resourcepath}?{parameters}
在您的情况下,您可以使用或基于设置和链接基于测试类型
什么是基于设置?
基于设置的是您的服务器,例如https://rest.mysite.com/v1/customer/2如果您或您的客户将在HE的设置服务器状态中设置为 test> test ,并且作为live -live- live ,将充当测试。在某些情况下,此方法很好,但是为了进行测试和同时生活,不建议这种类型。
什么是链接| url | uri基于?
此方法具有2种识别请求类型是测试或实时
- 一种方法是将测试设置为参数https://api.mysite.com/ test/v1/customer/2,没有测试就可以实时
- 第二种方法是将API设置为tentapi或apitest,例如https:// testapi .mysite.com/v1/customer/2或https://https:// apitest mysite.com/v1/customer/2。这样,客户可以进行测试和现场测试,他也可以进行测试和实时项目。
和不要为安全忘记,请务必检查客户并在提供实时API访问之前进行验证。
作为一个选项您可以使用自定义的标头。如果请求包含自定义标头 ->重定向请求到测试版本的API。