在开发/测试/生产环境中使用带有Swagger的API应用程序

时间:2015-10-15 00:53:12

标签: azure azure-web-sites azure-api-apps

我正在将一个组合的Azure网站(包含控制器和ApiControllers)迁移到拆分的Web应用程序和API应用程序。我们称之为MyApp。

我已经创建了MyAppDevApi,MyAppTestApi和MyAppProductionApi API应用程序(在不同的应用程序服务中)来托管这三种环境,期望将代码从一个环境推广到另一个环境。

到目前为止,我刚刚部署到MyAppDevApi,因为我刚刚开始。

当我{i}}到我的仅限UI项目开始引用API应用程序时,我将其指向MyAppDevApi,它使用AutoRest在我的代码中创建类。这些类现在都具有名称MyAppDevApi,而不仅仅是MyAppApi,它是我正在部署到每个环境的代码的实际命名空间。显然,我无法检查...我怎样才能通过Test and Prod推广?

Swagger JSON中没有任何内容引用此名称,因此它必须位于AutoRest端(我认为)。

有没有人提出策略或解决方案来处理API应用程序的多环境推广问题?

修改

到目前为止,我提出的最好的事情是将Swagger从API应用程序下载到本地文件(同样,它只包含原始代码中的命名空间,而不是API应用程序的名称) ,然后将其导入Web App。这将在Web App中生成具有我期望命名的类。

问题是我必须编辑生成的MyAppApi.cs文件的_baseUri属性以从AppSetting中提取,使用不同的web.config.dev,.test,.prod,然后执行web.config转换。我的意思是,这会起作用,但每次我更改API App的界面时,我都会重新生成......然后我会记得再次更改_baseUri ...而某人,有时候会忘记这样做,然后部署到生产。这真的非常脆弱。

所以......任何人都有更好的主意吗?

2 个答案:

答案 0 :(得分:0)

我不太清楚你为什么要创建三个不同的应用程序,每个应用程序对应一个环境?一个应用程序很好,并为每个环境使用web.config转换。这是我执行所有应用程序的一般方式,并且工作正常。

可以找到有关如何应用web.config转换的信息here,这可能对您的情况有所帮助。

希望有所帮助。

答案 1 :(得分:0)

嗯,这就是我解决这个问题的方法:

  1. 将Swagger文件从API App下载到本地硬盘。
  2. 将本地Swagger文件导入Web App,以生成具有代码命名的类,而不是来自环境。
  3. 使用AppSettings指定特定于环境的设置以指向API App。这可以是web.config转换,也可以在应用程序设置中的Web应用程序的Azure门户中指定它们。
  4. 使用构造函数实例化生成的API App Client,该构造函数接收指向API App的URL(这些是在类级别,因此是静态的):
  5.     private readonly static Uri apiAppUrl = new Uri(CloudConfigurationManager.GetSetting("ApiAppUrl"));
        private readonly static MyAppApi myAppApi = new MyAppApi(apiAppUrl);
    

    我仍然喜欢这个不需要下载Swagger文件的解决方案,但是,总而言之,如果这是唯一必要的解决方法,那就不是那么糟糕了。