65.9K
CodeProject 正在变化。 阅读更多。
Home

销售应用融合开发(第二部分):接收来自 Power Apps 的 API 调用

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2022年4月11日

CPOL

8分钟阅读

viewsIcon

4282

downloadIcon

64

本文我们将学习如何创建一个使用 FastAPI 构建并部署到 Azure App Service 的 Python 应用。

本系列三篇文章中的第一篇文章演示了公民开发者如何使用低代码创建 Microsoft Power App,以布置拟议业务解决方案的基本功能。

组织可以通过创建自定义 API 来公开一些功能,从而扩展 Power Apps 的功能。此外,将 Power App 与您喜欢的 Azure 系统和 API 集成也很容易。

本文将介绍专业开发人员如何使用 FastAPI 并将其部署到 Azure App Service。

为什么选择 FastAPI 和 Azure App Service?

FastAPI 是一个完全兼容的高性能 Web 框架,可帮助您使用 Python 3.6+ 构建 API 端点。FastAPI 允许您使用现代 Python 代码和类型提示编写 Web 应用。

Azure App Service 是一个受支持的环境,为构建和托管网站和 API 以及管理 Web 应用提供独特而强大的平台。它支持标准的开发工具和编程语言。

本文演示了如何为我们在第一篇文章中设计的 Power App 添加更多功能。我们将首先使用 FastAPI 创建一个 Python 应用,并将其部署到 Azure App Service。然后,我们将添加一个端点来接收来自 Power App 的请求,查询 Azure PostgreSQL 数据库,并返回匹配车辆的列表。最后,我们将添加一个端点供销售人员将汽车标记为已预订。

为此,我们将执行以下步骤:

  • 创建 Azure PostgreSQL 数据库
  • 将 PostgreSQL 数据库连接到 Azure 服务器
  • 使用 FastAPI 创建 Python 应用并将其部署到 Azure
  • 创建 Azure App Service

必备组件

您需要以下工具来完成本教程:

  • 互联网连接到云。
  • 已安装Python 3.6+
  • 首选 IDE,例如 PyCharm、Visual Studio Code 或命令行界面。
  • GitHub 帐户。
  • PostgreSQL 和 pgAdmin。您可以观看此视频了解如何在 Windows PC 上安装 PostgreSQL 或在 Ubuntu 上安装 PostgreSQL
  • Chrome、Firefox 或 Postman 用于访问 FastAPI 框架生成的 OpenAPI。
  • 一个Azure 帐户,其中包含 Azure App Service 和 Azure Database for PostgreSQL 服务器。

创建 Azure PostgreSQL 数据库

要创建 Azure PostgreSQL 数据库,请登录Azure 并转到 Azure Portal。

在门户中搜索 PostgreSQL,然后选择Azure Databases for PostgreSQL flexible servers

然后,通过单击Create 来创建一个新的 PostgreSQL 数据库。

选择适合您应用程序的部署选项。对于本文,我们使用Single server 计划。

配置基本的服务器详细信息,例如订阅、资源组和服务器名称。

注意:用户可以创建自己的资源组,也可以使用现有的资源组。

选择一个靠近用户所在位置的区域,以减少延迟。然后,在Compute + storage 字段中选择一个选项。

接下来,创建Admin usernamePassword。这些凭据将用于使用 pgAdmin(用于数据库管理)和我们的 Python 应用(API)连接到服务器。

配置完所有基本信息后,单击Review + create 以查看服务器详细信息。

如果详细信息符合您应用程序的需求,请单击Create,然后部署过程将开始。

部署完成后,单击Go to resources 以查看更多数据库配置选项,例如安全和访问控制。

将 PostgreSQL 数据库连接到 Azure 服务器

pgAdmin 客户端是 PostgreSQL 最受欢迎的开发平台。安装 pgAdmin 客户端并创建一个主密钥。每次启动 PostgreSQL 时都需要此密钥。

General 选项卡上,输入服务器名称。在 Connections 选项卡上输入 Azure 数据库服务器详细信息 - 主机服务器名称或 IP、用户名、用户密码和端口号。

注意: 默认情况下,PostgreSQL 侦听端口 5432。您可以更改此端口。

最后,创建一个新的数据库。此数据库将使用我们创建的 OpenAPI 连接到 Power App。

Database 字段中,为您的数据库命名,然后单击Save。在本教程中,我们的数据库名为“Cars”。

Browser 面板中,展开Cars 列表,然后展开Schemas 列表。右键单击Tables 列表,然后单击Create table。在Create – Table 对话框中,在General 选项卡上,在Name 字段中输入表名。

在本教程中,我们的表名为“Cars_Inventory”。

使用脚本或 PostgreSQL 用户界面创建表及其列。

将第一篇文章中 Excel 文件中的表内容导出为逗号分隔值 (CSV) 文件,以便拥有所有数据。

要将 CSV 文件导入新的 PostgreSQL 表,请右键单击表名,然后选择Import/Export Data

Filename 字段中粘贴 CSV 文件的位置,然后单击OK。此操作会将数据添加到上一步中创建的表中。

我们将在接下来的步骤中使用这些数据来创建我们的 Python 应用和 FastAPI。

使用 FastAPI 创建 Python 应用

在本节中,我们将创建一个 Python 应用程序,该应用程序将实现以下功能:

  • 连接到 Cars 数据库
  • 查看 Cars 数据库中的所有项目
  • 搜索和更新 Cars 数据库中的项目

安装 FastAPI 是第一步。在新的环境中启动 FastAPI 项目是一个好习惯,这样更容易维护项目。

使用您喜欢的 IDE 或命令行界面创建并激活 Python 虚拟环境。

$ python -m venv CarsFastAPI

在这种情况下,CarsFastAPI 是虚拟环境的名称。

使用以下命令导航到虚拟环境:

$ CarsFastAPI\Scripts\activate

现在,我们可以使用此命令在虚拟环境中安装 FastAPI:

$ pip install fastapi

本地测试和生产需要异步服务器网关接口 (ASGI) Web 服务器。Uvicorn 与 FastAPI 配合良好,可作为进程管理器。使用以下命令安装它:

$ pip install unicorn

然后,我们安装 `gunicorn` worker,它是一个预置 worker 模型。它会为应用程序设置合适的 worker 类。它通过设置各自的 worker 类来启用 Python 模块的使用。

使用此命令安装 worker:

$ pip install gunicorn

现在,我们创建以下 Python 主文件:

  • Database.py 为 Python 与数据库连接创建 SQLAlchemy 的起点,并包含要运行的 SQL 查询。
  • Python 使用 Main.py 自动开始其执行。

database.py 文件包含 PostgreSQL 数据库服务器连接详细信息、数据库服务器名称、用户名、用户密码和数据库名称。如果使用默认端口 5432,则无需添加端口号。将以下代码添加到文件中:

def conn ():
   conn = psycopg2.connect(database="Cars", user="techadmin@test-fast-api-db", password="Mustwork!!", host="test-fast-api-db.postgres.database.azure.com", port="5432")
    conn.autocommit = True
    return conn

此应用程序使用以下脚本。您可以在GitHub 上找到完整的源代码。

根据所选的筛选器选项搜索单个项目,例如 Item ID。

def fetch_one(field, value):
    where_q = field+"='"+value+"'"
    connection = conn()
    cursor = connection.cursor(cursor_factory=RealDictCursor)
    cursor.execute('SELECT item_id, available, model, trim level, color, price FROM public."Cars_Inventory" WHERE '+where_q+';')
    rows = cursor.fetchall()
    return handle_results(rows)

此查询显示数据库中的所有项目。

def fetch_all():
    connection = conn()
    cursor = connection.cursor(cursor_factory=RealDictCursor)
    cursor.execute('SELECT item_id, available, model, trim_level, color, price FROM public."Cars_Inventory";')
    rows = cursor.fetchall()
    return handle_results(rows)

数组处理所有结果数据。

def handle_results(rows):
    columns = ('item_id', 'available', 'model', 'trim_level', 'color', 'price')
    results = []
    for row in rows:
        results.append(dict(zip(columns, row)))
 
    #return json.dumps(results, indent=2)
    Return

然后,创建一个 `main.py` 文件来定义所有关键进程。

要查看所有项目,请运行以下代码:

@app.get("/items/")
def read_item():
    results = database.fetch_all()
    return results

要按 Item ID 搜索,请输入以下代码:

@app.get("/items/{item_id}")
def read_item(item_id: str):
    results = database.fetch_one("item_id", item_id)
    return results

要使用任何两个参数(列和字段值)进行搜索,请输入以下代码:

@app.get("/items/{q_field}/{q_val}")
def read_item(q_field: str, q_val: str):
    results = database.fetch_one(q_field, q_val)
    return results

在将这些函数部署到 Azure App Service 应用程序之前,您可以使用 Postman(和 Insomnia)对其进行测试。

创建 Azure App Service

转到 Azure 门户。搜索“App Services”并导航到它。

通过单击Create 创建一个新的 App Service。

使用相同的服务器端方法配置基本详细信息。

  • 如果您还没有活动的 Azure Subscription,系统将默认选择免费的Azure subscription 1。此订阅为服务器资源(如 RAM 和磁盘空间)提供 200 美元的免费信用。
  • Resource Group 是一个容器,用于保存 Azure 解决方案的相关资源。
  • Name 必须是唯一的,可以是您选择的任何名称。
  • 我们使用代码进行发布。根据您的需求,您可以选择使用 Docker 或 Web 应用进行Publish
  • Runtime stack 是代码的语言,在本例中为 Python 3.7。

选择最接近的区域和运行应用程序所需的硬件。始终选择靠近您所需所有服务的Region。当使用 Azure 上的基本服务计划时,它会自动生成Linux PlanSku and size

单击Next 并选择部署方法。我们使用 GitHub 作为代码源。我们还启用了持续部署,以便在进行任何更改时,App Service 可以自动重新部署代码。

最后,单击Review + create 以查看初始设置详细信息,然后部署应用程序。

单击go to resources 以查看 App Service 概述和其他 App Services。概述显示了用户通过 Internet 访问应用程序的 URL。

成功部署后,您应该能够访问Root {"Hello":"App"}、DocsRedoc 页面,如下图所示:

Redoc 是 API 的响应式、三面板、由 OpenAPI 规范驱动的文档。

OpenAPI 文档化了两个 API 端点。您可以从 Redoc 页面下载 openapi.json 文件。我们将在下一篇文章中使用此文件创建自定义连接器。

后续步骤

现在我们有了一个 API 来连接我们的 App Service 应用和数据库。此 API 将允许检索和调整信息,以便我们的用户可以获取最新的汽车库存并预订客户首选的汽车。请继续阅读本系列最后一篇文章,以创建自定义连接器、调用 API 并创建预订按钮。

要了解 Pro 代码开发如何与 Power Apps 低代码开发相融合,以及为什么 Pro 代码和低代码开发人员彼此需要,请观看我们的点播数字活动Pro Code on a Low Code Platform

© . All rights reserved.