所有文章 > API设计 > 如何使用 Azure Functions 和 RapidAPI 构建无服务器 Web 应用程序

如何使用 Azure Functions 和 RapidAPI 构建无服务器 Web 应用程序

无服务器计算是云开发中的一种流行趋势,它允许开发人员创建可扩展、经济高效且事件驱动的应用程序,而无需管理服务器。本文将指导您使用 Azure FunctionsRapidAPI 构建无服务器 Web 应用。

什么是无服务器计算?

无服务器计算是一种云计算模型,其中云提供商动态管理服务器的分配和配置。无服务器应用程序在无状态计算容器中运行,这些容器由事件触发、短暂存在且完全由云提供商管理。

快速API

RapidAPI 是一个将开发人员与数千个不同类别的 API 相连接的平台。以下是注册和获取 API 密钥的方法。

  1. 访问 RapidAPI 网站:转到RapidAPI。
  2. 注册:点击首页右上角的“注册”按钮。你可以使用你的 Google、GitHub 或 Facebook 帐户注册,也可以使用你的电子邮件地址创建新帐户。
  3. 验证您的帐户:注册后,您将收到一封电子邮件以验证您的帐户。点击电子邮件中的链接即可验证您的帐户。
  4. 访问您的信息中心:验证您的帐户并登录后,单击信息中心右上角的个人资料图片,然后单击“我的应用程序”。这将带您进入一个包含您的应用程序列表的页面。
  5. 获取您的 API 密钥:默认情况下,RapidAPI 会为您创建一个名为“默认应用程序”的默认应用程序。单击此应用程序可查看您的 API 密钥。API 密钥位于“安全”部分下。

在 RapidAPI 上查找 API 密钥

找到您的 API 密钥以使用 RapidAPI。

请注意,API 密钥属于敏感信息,应妥善保管。请勿公开分享您的 API 密钥。当您使用来自 RapidAPI 的 API 时,您将使用此 API 密钥来验证您的请求

Terraform

Terraform 是 HashiCorp 开发的一款开源基础设施即代码 (IaC) 工具。它允许您使用声明式配置语言定义和提供数据中心基础设施。这意味着您描述所需的基础设施状态,Terraform 将找出如何实现该状态。

为什么使用 Terraform?

Terraform 的主要功能包括:

  • 与平台无关:您可以使用 Terraform 来管理各种服务提供商以及定制的内部解决方案。
  • 状态管理:当您创建基础设施时,Terraform 会创建一个状态文件。此文件可帮助 Terraform 跟踪您的资源,并且对于修改和销毁您的资源必不可少。
  • 不可变基础设施:Terraform 将基础设施视为不可变的,这意味着它不会修改基础设施中的实际资源。相反,它会根据配置的变化用新资源替换旧资源。

请记住,HaschiCorp 已将 Terraform 许可证切换为源代码可用的商业源代码许可证 (BSL)。开源分支OpenTofu是一种具有类似功能的可行替代方案。

Dataflow

下图说明了使用 Azure FunctionsRapidAPI的无服务器 Web 应用的数据流。

该应用程序由三个主要组件组成:

  • 前端:托管在 Azure 存储上的静态网页,向用户显示天气信息。该网页使用 C# 调用 Azure 函数端点,并以用户的位置作为参数。
  • Azure Function:一种无服务器函数,充当前端和 RapidAPI Weather API 之间的代理。该函数验证用户的位置,使用 API 密钥构建 RapidAPI 请求,并将天气数据返回到前端。
  • RapidAPI 天气 API:提供全球任意地点天气信息的 API。该 API 需要 API 密钥来验证请求。

该图显示了用户与 Web 应用交互时数据在这些组件之间的流动方式。该应用利用了无服务器计算的优势,例如可扩展性、可靠性和成本效益。

使用 Terraform 设置开发环境

以下是使用 Terraform 设置开发环境的基本流程概述:

  1. 安装 Terraform:在本地机器上下载并安装 Terraform。
  2. 配置您的提供商:在您的 Terraform 配置文件中,指定您想要与之交互的提供商(如 AWS、GCP、Azure)。
  3. 编写配置:使用 HCL 在配置文件中定义您的基础设施。
  4. 初始化 Terraformterraform init在您的终端中运行。这将下载必要的提供程序插件。
  5. 规划和应用:运行terraform plan以检查将进行哪些更改。然后,运行terraform apply以创建定义的基础设施。

请记住用实际值替换占位符,并根据您的要求调整代码。

Azure 函数

Azure Functions 是一种无服务器解决方案,可让您编写更少的代码、维护更少的基础架构并节省成本。以下是如何使用 Terraform 添加帐户和开发环境来设置我们的基本基础架构。

# Terraform code for setting up Azure Functions
# Define the provider
provider "azurerm" {
features {}
}

# Create a resource group
resource "azurerm_resource_group" "rg" {
name = "example-resources"
location = "West Europe"
}

# Create a storage account
resource "azurerm_storage_account" "sa" {
name = "examplestorageacc"
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
account_tier = "Standard"
account_replication_type = "LRS"
}

# Create an app service plan
resource "azurerm_app_service_plan" "asp" {
name = "example-appserviceplan"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name

sku {
tier = "Standard"
size = "S1"
}
}

# Create a function app
resource "azurerm_function_app" "fa" {
name = "example-functionapp"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
app_service_plan_id = azurerm_app_service_plan.asp.id
storage_connection_string = azurerm_storage_account.sa.primary_connection_string
}

让我们深入研究上述 Terraform 代码及其创建的资源。

  1. 资源组:在 Azure 中,资源组是部署在 Azure 订阅中的资源的逻辑容器。这意味着您的所有资源都组织起来,可以作为一个组进行管理,而不是单独管理。在代码中,azurerm_resource_group用于定义资源组。
  2. 存储帐户:Azure 存储是一种在云中为数据提供可扩展且安全的存储的服务。存储帐户在 Azure 中为您的数据提供唯一的命名空间。在代码中,azurerm_storage_account用于定义存储帐户。
  3. 应用服务计划:在 Azure 中,应用服务计划是一组用于运行 Web 应用的计算资源。这些计算资源类似于传统 Web 托管中的服务器场。在代码中,azurerm_app_service_plan用于定义应用服务计划。
  4. 函数应用程序:Azure Functions 是一种无服务器计算服务,可让您运行事件触发的代码,而无需明确配置或管理基础结构。函数应用程序可让您将函数分组为逻辑单元,以便于管理、部署和共享资源。在代码中,azurerm_function_app用于定义函数应用程序。

在提供的代码中,您可以将占位符替换为实际值,以便在 Azure 环境中创建这些资源。例如,您可以将“example-resources”替换为资源组的名称,将“West Europe”替换为要使用的 Azure 区域,将“examplestorageacc”替换为存储帐户的名称,等等。

要创建基础设施,我们只需执行:terraform apply

Terraform 应用输出

输出应如下所示。

构建无服务器 Web 应用程序

现在我们有了工具,让我们开始构建无服务器 Web 应用程序。

使用 RapidAPI 查找和测试 API

如果您使用 RapidAPI,则需要执行以下手动流程。找到要在 RapidAPI 上使用的 API 后,您通常会使用注册 RapidAPI 时获得的API 密钥来验证您对 API 的请求。

  1. 访问 RapidAPI 网站:前往 RapidAPI。这是一个可以找到各种类别的数千个 API 的平台。
  2. 搜索 API:使用页面顶部的搜索栏查找符合您需求的 API。您可以按 API 名称、您要查找的功能或 API 类别进行搜索。
  3. 选择 API:单击搜索结果中的 API 以查看其详细信息。这包括 API 的端点、它接受的参数、它返回的响应以及展示如何使用该 API 的各种语言的代码片段。
  4. 测试 API:在 API 页面上,您可以直接测试 API。选择要使用的端点,填写任何必需的参数,然后单击“测试端点”按钮。RapidAPI 将向 API 发出请求并向您显示响应。
  5. 获取 API 密钥:如果您决定使用 API,则需要订阅它并获取 API 密钥。API 密钥用于验证您对 API 的请求。要获取 API 密钥,请点击仪表板右上角的个人资料图片,然后点击“我的应用”。点击您的应用(默认为“默认应用”)即可查看 API 密钥。

下面是一个示例 Python 代码片段,展示了如何使用 API 密钥在 RapidAPI 上请求 API:

import requests

url = "https://weatherapi-com.p.rapidapi.com/current.json"
querystring = {"q": "53.1,-0.13"}
headers = {
"X-RapidAPI-Key": "your-api-key",
"X-RapidAPI-Host": "weatherapi-com.p.rapidapi.com"
}

response = requests.get(url, headers=headers, params=querystring)
print(response.json())

在此代码片段中,将“ api – name . p . rapidapi . com ”替换为您要使用的 API 的主机,“api-endpoint”替换为 API 的端点,“your-api-key”替换为您实际的 API 密钥。这将向 API 发送 GET 请求并打印响应。

代码片段的示例输出

代码片段的示例输出。

注意:请确保您订阅了在 RapidAPI 上使用的 API

创建 Azure 函数应用程序

这是用于创建 Azure 函数应用和 HTTP 触发器函数的 Terraform 代码。这对于创建 Azure 函数应用是必需的。

# Define the provider
provider "azurerm" {
features {}
}

# Create a resource group
resource "azurerm_resource_group" "rg" {
name = "example-resources"
location = "West Europe"
}

# Create a storage account
resource "azurerm_storage_account" "sa" {
name = "examplestorageacc"
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
account_tier = "Standard"
account_replication_type = "LRS"
}

# Create an app service plan
resource "azurerm_app_service_plan" "asp" {
name = "example-appserviceplan"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name

sku {
tier = "Standard"
size = "S1"
}
}

# Create a function app
resource "azurerm_function_app" "fa" {
name = "example-functionapp"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
app_service_plan_id = azurerm_app_service_plan.asp.id
storage_connection_string = azurerm_storage_account.sa.primary_connection_string
}

以下是代码中的组件:

  • 提供商:指定 Azure 是云提供商。
  • 资源组:保存相关资源的组。
  • 存储账户:用于存储功能代码。
  • 应用服务计划:定义 Web 应用运行的计算资源集。
  • 函数应用:在 Azure 中托管函数的执行。它使用资源组、存储帐户和应用服务计划。

创建一个简单的Web应用程序

这是一个 C# Azure 函数的简单示例,它从 RapidAPI 调用 OpenWeatherMap API。此函数将由 HTTP 请求触发,并返回指定城市的当前天气。

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System.Net.Http;
using System.Threading.Tasks;

public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");

string city = req.Query["city"];

using (var client = new HttpClient())
{
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri($"https://api.openweathermap.org/data/2.5/weather?q={city}&appid=YOUR_API_KEY"),
Headers =
{
{ "x-rapidapi-key", "YOUR_RAPIDAPI_KEY" },
{ "x-rapidapi-host", "community-open-weather-map.p.rapidapi.com" },
},
};

using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
dynamic data = JsonConvert.DeserializeObject(body);
return new OkObjectResult($"Temperature in {city}: {data.main.temp}°C");
}
}
}

在此代码中:

  • 该功能由 HTTP 请求触发。
  • 它从查询字符串中读取城市参数。
  • 它向 OpenWeatherMap API 发送带有指定城市的 GET 请求。
  • 它读取 API 响应,反序列化 JSON,并返回温度。

请记住将“YOUR_API_KEY”替换为您在 OpenWeatherMap 中获得的实际 API 密钥,将“YOUR_RAPIDAPI_KEY”替换为您的 RapidAPI 密钥。另请注意,出于安全原因,您通常不会在代码中直接公开 API 密钥。在实际情况下,您会将这些密钥安全地存储在 Azure Key Vault 中或使用托管标识。

部署和测试 Azure 函数应用程序

如果您已经拥有 Azure 函数应用,那就太好了!您可以跳过创建步骤,直接将代码部署到现有函数应用。以下是使用 Azure CLI 执行此操作的方法:

  • 登录 Azure:使用命令az login从 CLI 登录到您的 Azure 帐户。
  • 部署函数应用程序:导航到本地项目目录并使用func azure functionapp publish <FunctionAppName>命令将本地项目部署到现有函数应用程序。 替换为现有函数应用程序的名称。

以下是示例脚本:

# Login to Azure
az login
# Navigate to your local project directory
cd path-to-your-local-function-app
# Deploy the function app
func azure functionapp publish your-existing-function-app-name

用您的实际值替换“path-to-your-local-function-app”和“your-existing-function-app-name”。

成功上传的示例输出

成功上传的示例输出。

测试 Azure 函数应用

部署函数应用后,可以通过向函数的 URL 发出 HTTP 请求来测试它。URL 通常采用以下格式:https://<Your Function App>.azurewebsites.net/api/<Your Function Name>?code=<your access code>&name=<Enter a name here>

结论:技巧和最佳实践

与传统的 Web 开发相比,无服务器计算是一种不同的模式。了解其优点和局限性将有助于您充分利用它。例如,无服务器函数是无状态的,并且具有最大执行时间,这会影响您设计应用程序的方式。以下是一些其他需要考虑的提示:

  • 使用 Terraform 实现基础设施即代码 (IaC):Terraform 允许您使用声明性配置语言定义和提供数据中心基础设施。此方法支持配置的版本控制、重用和共享,从而更轻松地管理和扩展应用程序。
  • 保护您的 API 密钥:使用 RapidAPI 的 API 时,请始终保护您的 API 密钥。请勿在客户端代码中公开它们或将它们签入源代码管理。考虑使用 Azure Key Vault 安全地存储和管理您的机密。
  • 妥善处理错误:您的 Azure Functions 应妥善处理错误并向客户端返回有用的错误消息。这在调用 API 时尤其重要,因为可能会出现网络问题、 API 速率限制和其他问题。
  • 优化函数性能:Azure Functions 根据执行时间计费,因此优化函数性能可以降低成本。这可能涉及高效使用 API、优化代码或使用 Azure 的扩展和部署槽功能。
  • 在本地测试您的函数:Azure Functions Core Tools 允许您在将函数部署到 Azure 之前在本地运行和调试它们。这可以加快开发速度并帮助尽早发现问题。
  • 监视应用程序:使用 Azure Monitor 和 Application Insights 跟踪函数在生产中的执行情况。它们可以提供有关应用程序性能和使用模式的宝贵见解。
  • 不断学习和探索:无服务器计算、API 和基础设施即代码的格局在不断发展。不断学习和探索新功能、服务和最佳实践。

使用 Azure FunctionsTerraformRapidAPI 构建无服务器 Web 应用是一种强大而有效的应用程序开发方式。通过遵循这些提示和最佳实践,您可以确保您的应用程序安全、可扩展且可维护。

文章来源:How to Build a Serverless Web App with Azure Functions and RapidAPI

#你可能也喜欢这些API文章!