注意:

使用 OCI API 网关、函数和可观察性验证 JSON 内容并监视 API 标头和正文

简介

当我们开发分布式应用程序时,特别是在基于微服务的架构中,我们希望组件能够在执行中很好地扩展和执行。它们具有非常复杂的体系结构,执行其他组件的组件,执行其他组件,等等在无限数量的无休止调用。

规划如何开发每个应用程序是一项艰巨的任务。您可以通过 Oracle Cloud Infrastructure API Gateway(OCI API Gateway) 公开基于 Kubernetes 集群构建的微服务。有一系列功能,如执行呼叫验证和授权,数据验证和呼叫优化,仅举几例。当现有方法不足以满足需求时,还可以使用 OCI Functions 执行调用,以创建个性化身份验证和授权机制。

本教程将介绍如何使用自定义机制来验证一些用例,例如:

尽管它是 OCI API 网关中的身份验证和授权机制,但它可以帮助满足其他一些需求,例如:

目标

先决条件

任务 1:配置 OCI 可观察性

  1. 在 OCI 租户中创建日志以从函数摄取日志。导航到观测和管理,然后在 OCI 控制台中选择日志

    logging-1

  2. 单击创建定制日志

    日志记录 -2

  3. 定制日志名称字段中输入名称,然后选择适当的区间日志组

    日志记录 -3

:捕获日志的 OCID 非常重要,这需要用于代码。

logging-4

任务 2:创建 OCI 函数以从 API 请求捕获 HEADER 和 BODY

要执行以下步骤,请从此处下载代码 function.zip

了解代码

此代码位于 function.zip

:如果您不知道如何开发函数并在 API 网关中调用它,请参阅使用 API 网关调用函数

配置 OCI 的 SDK 验证

在将配置文件部署到 OCI 之前,您需要配置配置文件并将 OCI 私有密钥和指纹与您的功能一起使用。必须在 Oracle Cloud Infrastructure 命令行界面 (OCI CLI) 安装和配置上生成 configprivate key 文件。

要安装和配置 OCI CLI,请参阅安装 OCI CLI 。此安装和配置将为您生成两个文件。查找 configprivate key 文件(缺省值为 oci_api_key.pem )。将在安装说明中通知文件夹路径。

代码 2

下载 function.zip 可查看代码、配置文件和私钥。将配置和私钥文件替换为 OCI CLI 文件。

构建和部署 OCI 函数

在此步骤中,我们需要使用 OCI CLI 创建 OCI 函数并将代码部署到您的租户中。要创建 OCI 函数,请参阅 OCI Functions QuickStart 并搜索 Python 选项。您需要使用以下信息创建函数:

请记住部署了函数的区间。您将需要此信息来配置 OCI API Gateway 部署。

任务 3:在 API 网关中配置 OCI 函数

让我们部署您的 API 并与您的 OCI Functions 集成,以验证请求参数(标头和 BODY)并将其发送到 OCI Observability 。如果您不知道如何在 OCI API Gateway 中公开后端,请参阅 OCI API Gateway:设置、创建和部署 API

  1. 打开编辑部署

    config-apigw-1

  2. 单击验证部分。

    config-apigw-2

  3. 单击单个验证,然后选择授权程序函数

    config-apigw-2a

  4. 选择函数区间(在其中部署了函数),选择 fn_apigw_json 应用程序和函数 python-json-header

    config-apigw-2b

  5. 配置函数参数以捕获 HEADERBODY 。获取名为 headerheader2HEADER 以及将命名为 bodyBODY 内容。

    config-apigw-2c

  6. 单击路由并配置标题转换。此配置是可选的,仅用于查看包含请求数据(HEADER 和 BODY 内容)的响应内容或针对请求生成的错误。调试函数会很有用。

    config-apigw-3

任务 4:测试您的请求

:在 API 部署中,如果配置授权程序函数并设置函数参数,将激活函数参数的高速缓存。您可以确定要高速缓存的数据类型。您可以为查询参数或标头配置高速缓存,但不能为正文内容配置高速缓存。

我们可以测试 API 请求。让我们在正文中的数组上仅测试一项。

curl --location 'https://xxxxxxxxxxxxxxxxxxxx.apigateway.us-ashburn-1.oci.customer-oci.com/path_index/path' \
    --header 'Content-Type: text/plain' \
    --header 'header: header' \
    --header 'header2: header2' \
    --header 'header3: header3' \
    --data '{"data": {"clientID": "xxxxxxxxxxxxxxxxxxx", "secretID": "xxxxxxxxxxxxxxxxxxx", "jList":[{"added_by":"Ani","description":"example description.","start_date":"2014-10-10","mark":255,"id":975}]}}' -i

header3 已发送,但显示在日志中,因为它未配置为 OCI API 网关中的函数参数BODY JSON 数组上只有 1 项,因此它是有效的授权请求。

测试 -1

让我们在数组和测试中再放一个项目。

curl --location 'https://xxxxxxxxxxxxxxxxxxxx.apigateway.us-ashburn-1.oci.customer-oci.com/path_index/path' \
--header 'Content-Type: text/plain' \
--header 'header: header' \
--header 'header2: header2' \
--header 'header3: header3' \
--data '{"data": {"clientID": "xxxxxxxxxxxxxxxxxxx", "secretID": "xxxxxxxxxxxxxxxxxxx", "jList":[{"added_by":"Ani","description":"example description.","start_date":"2014-10-10","mark":255,"id":975}, {"added_by":"Ani","description":"example description.","start_date":"2014-10-10","mark":255,"id":975}]}}' -i

测试 -2

确认

更多学习资源

浏览 docs.oracle.com/learn 上的其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心