使用 Azure Functions 上的 REST API 从 0 到 11

2025-06-08

使用 Azure Functions 上的 REST API 从 0 到 11

Skyler Hartle 是Azure Functions团队的成员,专注于 API、增长黑客和其他有趣的事情。

函数 + Skyler

*唱片刮擦*
*定格*

没错,就是我。你可能想知道,一位前 JavaScript 开发人员最终是如何将 Azure Functions 用于所有与 API 相关的项目的。

在加入微软之前,我大部分时间都在使用 Node.js 开发与 API 相关的应用程序,或者更具体地说,我利用 MERN 堆栈(MongoDB、Express、React 和 Node)来创建不同的应用程序,当时这仍然很流行。

和我们许多人一样,我被 Node.js + Express 这类工具带来的简洁性所吸引。它真的好用,而且上手很快,可以根据需要轻松启动新项目和服务。随着时间的推移,我最终被下一个热门项目——JAMstack(JavaScript、API、Markdown)所吸引,因为它也有类似的吸引力:独立的层级、速度、易用性,以及一个对我来说很有意义的、开发新应用程序的吸引人的思维模型。

所涉及的技术都有类似的主题:

无处不在的 API

加入微软(随后又加入 Azure Functions 团队)后,我发现了一个令人毛骨悚然的事实。许多人都在使用 Azure Functions 等无服务器平台来开发 API 相关的应用程序。事实证明,构建 API 是 Azure Functions 最受欢迎的用例之一,而且理由充分。

我立即开始调查这对我这样的人来说意味着什么,我是一个对 API 充满热情、具有良好 API 开发和 API 设计的开发人员,这就是我在此过程中发现的。

为什么使用 Azure Functions 开发 API 是一件好事

Azure Functions 的编程模型要求您创建小型的、单一的计算单元,这些单元非常适合 API 中的路由。如果您之前使用过其他框架,例如 ASP.NET、Django、Flask、Express、Koa 等,那么您已经熟悉了这种应用程序模型,它有一种固定的 API 路由创建方式。从这种思维模型过渡到使用 Azure Functions 之类的工具并不困难,而且它更像是对现有工作方式的演进,而非完全背离。

如果您不熟悉 Azure Functions,下面是简要概述:

  • Azure Functions 是一个“函数即服务”平台,允许您在云中运行代码而无需管理服务器。
  • 在 Azure Functions 中,您可以创建函数应用程序。
  • 在函数应用程序中,有一系列函数。
  • 在这些函数内部,就是您的代码所在的地方。
  • 因此,函数应用程序只是函数的集合,每个函数都包含一些代码,就是这样!

与 Flask(用于 Python)或 Express(用于 Node)等框架为您生成脚手架代码和文件的方式非常相似,Azure Functions 更进一步,提供脚手架和托管环境来运行您的 API。

以下是如何使用 Azure Functions 创建 API 的示例:

  1. 您创建一个名为“UserAPI”的函数应用程序(多个函数的分组)。
  2. 在这个函数应用程序中,您可以创建四个函数,每个函数以不同的方式响应 HTTP 请求:GetUser、CreateUser、ModifyUser、DeleteUser。
  3. 在每个单独的函数内编写业务逻辑,对应每个特定的路由。
  4. 每个函数(而不是每个函数应用!)都会生成一个新的 URL,您可以将特定请求定向到该 URL,例如 GET、POST、PATCH 和 DELETE 请求。例如,GET 请求可以定向到 GetUser,POST 请求可以定向到 CreateUser,PATCH 请求可以定向到 ModifyUser,DELETE 请求可以定向到 DeleteUser。

每个函数都是独立的,允许您修改函数内的业务逻辑,向函数添加额外的依赖项,而不会污染其他路由的范围,也不会在应用程序的全局范围内的其他位置引入不必要的复杂性。

每个功能的业务逻辑可能不同,但创建新功能的方式是相同的。

下图反映了与上面编号步骤中概述的相同的函数应用程序结构。

替代文本

总结一下为什么这一切都是一件好事:

  • 函数是一个离散的计算单元,它被封装并存在于其自身的上下文中。这允许你只引入所需的依赖项,以满足你尝试运行的精确逻辑。
  • 与虚拟机等其他方法相比,通过 VS Code 启动新功能无疑是创建新的外部 API 的最快方法。
  • Azure Functions 不仅提供了用于编写 API 的现成脚手架,还提供所有必要的托管。
  • 无服务器模型支持基于消费的定价,这意味着当没有流量冲击您的 API 时您无需支付任何费用。
  • 当大量流量冲击您的 API 时,功能将根据需求自动扩展,确保您的应用程序基础架构中这个通常至关重要的层不会出现中断。

“Hello, world”教程,HTTP 端点风格

如果您想亲自测试 Azure Functions,可以按照下面非常简单的说明,只需四步即可亲自尝试。下面的简化教程将为您预置一个新的函数应用,其中包含一个函数,并以 HTTP 端点的形式公开给外界。

  1. 先决条件:安装Azure Functions VS Code 扩展
  2. 安装后,打开 Azure Functions 扩展并单击“创建新项目”,为您的项目选择一个文件夹。
  3. 出现提示时,选择“HTTP 触发器”作为模板并按几次回车键(不要担心那些令人讨厌的细节)。
  4. 单击“部署到函数应用程序”。
  5. 部署完成后,您可以浏览资源组,找到该函数,然后右键单击复制新创建的函数 URL。
  6. 将其放入您最喜欢的浏览器中,然后查看结果!

Azure Functions 扩展上的“创建新项目”按钮。
替代文本

Azure Functions 扩展上的“部署到 Function App”按钮。
替代文本

找到新部署的功能的 URL。

上面的例子只是一个简短的介绍,但它确实有效!您的应用程序目前无法执行任何有意义的操作,但如果您想使用刚刚创建的函数应用执行更多操作,现在就可以使用现有的结构,以最少的努力将业务逻辑添加到您的 API 中。

如果您想要更全面的教程,您可以阅读我们的快速入门来了解如何在各种不同的环境中执行此操作。

根据 OpenAPI 规范生成函数应用程序

让我们把这个吸盘调到 11。

如果您已经熟悉 API,那么您可能正在使用或至少熟悉 OpenAPI 规范 (Swagger)。OpenAPI 规范是描述 RESTful API 服务的机器可读文档,它具有许多实用用途。

关于何时/如何使用 OpenAPI 规范主要有两种观点:

  1. 代码优先,您在其中开发 API,然后生成文件(例如 OpenAPI 规范),或者...
  2. 设计优先,编写文档(例如 OpenAPI 规范)来描述 API 的预期功能。

最近,以设计为先的 API 开发越来越受到关注,尤其是在利用诸如 OpenAPI 规范之类的描述性文档时。该文档实际上成为了一份契约;团队可以根据商定的 OpenAPI 规范进行开发,因为他们知道这份文档反映了 API 的真实情况。OpenAPI 规范充当 API 的契约、文档和真实来源,使其成为规划服务 API 的绝佳方式。

为了支持设计用例,我们最近发布了 Azure Functions VS Code 扩展的更新,允许您根据 OpenAPI 规范生成函数应用。这是一项全新功能(预览版),支持 TypeScript、Python、Java 和 C#。JavaScript 和 PowerShell 即将推出!

对于熟悉 Flask 或 Express 等框架的开发者来说,此功能基本上创建了构建 API 所需的所有脚手架,类似于使用上述框架的方式。此外,它还能从 OpenAPI 规范中推断出重要的路由信息​​,并在函数中自动生成与路由相关的详细信息,例如参数。您可以查看 GitHub 仓库获取更多文档,或者参考这个简化的快速入门指南:

要检查这一点,您需要做的就是:

  1. 先决条件:确保您已安装最新版本的 Azure Functions VS Code 扩展。
  2. 先决条件:您还需要为要创建的函数应用程序类型安装正确的语言运行时。
  3. 先决条件:安装 AutoRest,它是插件的依赖项。
  4. 创建一个新的函数应用程序并选择“来自 OpenAPI V2/V3 规范的 HTTP 触发器”。
  5. 选择您喜欢的语言(TypeScript、Python、C# 或 Java)。
  6. 选择您的 OpenAPI 规范,然后轰隆隆!奇迹开始发生!

为了看到神奇的发生,下面的 gif 将引导您完成 Python 应用程序的这个过程,并显示最终结果:

替代文本

Azure API 管理 VS Code 扩展中也即将推出一项补充功能,让您能够从 API 管理中管理的现有 API 生成函数应用。如果您想了解更多关于如何结合使用 Azure Functions 和 Azure API 管理的信息,我们最近在 GitHub 上发布了一个关于无服务器 API 的新研讨会

我们还支持通过 CLI 命令执行此操作,如下例所示:



autorest --azure-functions-typescript 
--input-file:C:\\path\\to\\spec.json 
--output-folder:./generated-azfunctions 
--version:3.0.6314 
--no-namespace-folders:true


Enter fullscreen mode Exit fullscreen mode

有关更多示例,请参阅此新功能的 GitHub 存储库。

总结一下

对于那些广泛使用 API 相关用例并正在考虑转换的人,我强烈建议您研究一下 Azure Functions 之类的工具能为您的开发流程带来的价值(以及对您生活质量的改善)。我是 Azure Functions 的付费推销员,所以当然,请谨慎对待我的说法。但作为一名终身开发者和技术爱好者,我绝不会提倡我不相信的东西。

请告诉我们如何改进 Functions,以便更好地为您服务。请在 Twitter 上关注我们: @azurefunctions ,或者,如果您想聊天,也可以在 Twitter 上给我发消息:@skylerhartle 。

链接地址:https://dev.to/azure/going-from-0-to-11-with-rest-apis-on-azure-functions-f2n
PREV
你好,CodeLand!我们是微软,我们希望赋能你,让你做更多。
NEXT
关于 VS Code 的五件事