当今网络上最令人兴奋的发展之一是公司和个人公开的公开可用api的数量不断增加。这些api允许其所有者将内部系统的数据公开到Internet,以便外部开发人员可以开始使用它们。像ProgrammableWeb这样的网站列出了所有这些api,而且这个列表每天都在增长。
所有这一切意味着,您只需发布API并让其他人创建应用程序,而不是创建利用您的数据或服务的应用程序。或者,你可以两者都做。例如,Facebook,Twitter和Google都有自己的应用程序,但也将其服务和数据发布到api。
创建这样的API是一回事,另一件事是发布,维护和记录它。您可能不希望每个人都可以无限制地访问您的开发-您可能希望拥有一个包含示例的文档站点,并且您可能也很自然地希望将其货币化。
现在有一个好消息: Azure管理API可以完成所有这些工作,还有更多!它允许您将API发布到Internet,自动生成代码示例和文档,配置访问和限制,分析API的使用情况等。
我们要展示什么?
在此博客文章中,我们将通过创建发布到Azure管理API的API将内部数据源发布到云。这涉及以下步骤:
- 创建Web API
- 将此Web API发布到Azure web应用
- 发布到Azure管理API
- 使用它在一个客户端项目
创建一个Web API来发布数据
在今天的文章中,我将创建一个ASP.NET Web API项目,以便发布一个虚构的数据源。这可能是一个内部数据库,例如测试结果,或分析数据,或任何。为简单起见,我不打算发布真正的数据源,而是创建存根来模拟数据源。在这两种情况下,采取的步骤是完全相同的。
我将把我们虚构的数据源发布到Azure,因为这是最简单的解决方案。请随时跟进-你需要一个 (免费) 活动的Azure订阅。或者,您可以将其部署到任何IIS网站,只要它可用于Internet。
所以,伸展你的肌肉,破解你的手指,让我们开始工作吧!
从打开Visual Studio开始。我使用Visual Studio 2015,但这也应该在不同的版本工作。单击 “文件”-> “新建项目”,然后选择 “Visual C #”-> “Web”-> “ASP.NET Web应用程序”。
输入有用的名称和位置,然后单击 “好”。
在下一个屏幕中,您可以选择一个模板。我正在使用ASP.NET 4.5.2中的Web API模板,并命令它在Azure中托管:
另外,单击更改身份验证并将其设置为无身份验证:
在此屏幕中单击 “好”,好在 “新建项目” 屏幕中单击。在Azure弹出窗口中,需要输入Azure Web应用的详细信息。我决定在澳大利亚东部创建一个新的Azure Web应用程序:
单击 “好”,将创建您的项目。这可能需要一分钟,所以拿一杯咖啡,这样你就可以准备下一个!
默认的Web API模板包含很多东西,其中大部分我们不需要。但我想专注于Azure API管理方面,所以我不打算清理项目。
默认模板包含一个名为ValueController的ApiController。按F5并导航到/api/values。您应该看到两个测试值:
在你的生产API,你可能不想开始使用这个模板,我建议你从头开始,只添加你需要的东西。但在我们的情况下,这个默认模板将正常工作。
Web API服务是一种RESTFUL服务。这样做的一个缺点是你没有机器可读的定义。Azure API管理将需要Swagger或WADL定义。默认情况下,这是不可用的,所以我现在要通过添加Swashbuckle来添加这个。打开NuGet包管理器,搜索Swashbuckle并将Swashbuckle.Net45添加到您的项目中:
单击F5,然后导航到/swagger以查看:
让我们创建我们的Azure管理API
在Azure可以管理我们的API之前,我们需要将其发布到Azure。右键单击API项目并选择Publish:
您可以保留所有默认设置,然后单击 “发布”。等等,等等,你的浏览器应该打开并显示你的公共网站!Woop woop!
现在,浏览到/swagger,并将文档URL复制到剪贴板或记事本。在我的情况下,这是这个URL: http:// azureapidemo955.azurewebsites.net: 80/swagger/docs/v1
接下来,转到 “旧” Azure门户 (manage.windowsazure.com),因为此功能在新的预览门户 (portal.azure.com) 中不可用。点击新建-> 应用服务-> API管理-> 创建:
选择一个名称,订阅,一个区域,然后点击下一步:
在下一个屏幕中,您需要输入联系人详细信息:
我们不需要设置高级设置,因为默认设置 (例如开发者价格层) 就足够了。点击复选标记以完成。
你可能想暂时做些别的事情,因为这可能需要30分钟。吃点东西,也许吃完后再回来!
管理Azure API管理服务
准备就绪后,选择它 (不要单击标题!),然后单击页脚中的管理。这将打开Azure API管理门户。
点击导入API,选择 “从URL” 并输入详细信息:
我已将API添加到 “无限” 产品组。出于某种原因,我收到错误:
“由于缺少订阅密钥,访问被拒绝。确保在向API发出请求时包含订阅密钥当从API门户进行测试时,因为该标头当时没有预先填充。点击保存,然后单击标题中的Developer Portal:
您现在看到的是您自己的API的公共开发人员门户!这是任何人使用你的API的起点。人们可以阅读文档,测试你的API,并注册使用它。
单击API -> Azure API演示-> Values_Get – GET 1以测试GetAll方法。点击发送,看看神奇的发生。Azure API门户调用你的Web API并显示以下结果:
我们现在已经建立了基础。API由Azure API管理管理,有一个用户可以登录的开发人员门户等等。
利用受保护的API从我们的MVC控制器
我将展示我可以使用之前创建的项目中的API并实现节流。首先,将产品 “Starter” 添加到API。在Azure API管理门户中,单击 “API”-> “AzureApiDemo”-> “产品” 并添加Starter。
接下来,转到开发人员门户并单击Administrator -> Profile。复制Starter订阅的主键:
将此值复制到记事本。
我们的Web API项目还包含呈现文档的MVC部分。我将添加一些代码以显示我们可以调用由Azure API管理的API。
接下来,打开控制器-> HomeController并将索引方法替换为以下内容:
公共ActionResult索引 () { ViewBag.Title = “主页”; var wr = WebRequest.CreateHttp(“https:// azureapidemo.azure-api.net/api/Values”); wr.Headers.Add(“ocp-apim-subscription-Key”,”b690fce8fe4a44a8b42834c1d040cd31”); 使用 (var响应 = wr.GetResponse()) { var html = new StreamReader(response.GetResponseStream()).ReadToEnd(); ViewBag.WebResponse = html; } 返回视图 ();}
将订阅密钥替换为您之前复制的密钥。
最后,在Views -> Home -> Index.cshtml的视图中添加 @ ViewBag.WebResponse
如果你现在点击F5,你将通过Azure管理API服务看到来自Web API的响应。
但是,当我刷新浏览器6次,我会得到一个异常:
这只是开始
在今天的帖子中,我希望我展示的是如何将API发布到Azure管理API,并通过使用限制来保护其使用。但这仅仅是个开始-还有很多事情可以做。这里有一些额外的功能,你一定要看看:
1. 统计
在开发人员门户中,单击管理员-> 管理
这将带您进入管理门户中的分析视图,其中包含大量分析数据。
2.产品
我们通过将我们的API添加到产品 “Unlimited” 和 “Starter” 中,简要地谈到了这一点。产品定义了谁可以使用它,以及使用频率。例如,默认组 “Starter” 允许用户每分钟最多运行5个呼叫,最长为100/周。
有关详细信息,请参阅Microsoft站点。
3.使用Azure Direct Connect连接到内部API
在我的示例中,我已将API发布到公共Azure Web应用程序。在大多数情况下,您的API驻留在内部网络上。借助Azure ExpressRoute,你可以通过VPN将API提供给Azure管理API。你的API仍将对外界隐藏,只有Azure可以访问它。有关更多信息,请参见此处。
我还建议你检查高级文档在Azure网站更真棒例子。
一切都很好,你今天已经学会了如何将API发布到公共Azure Web应用程序,并且至少喝了一杯咖啡和一顿清淡的午餐。在下面的评论部分联系并分享您的想法!
想要构建具有高性能控件的桌面、移动或web应用程序?立即下载Ultimate免费试用版看看它能为你做什么!