第 3 章 管理服务
3.1. 配置 OpenAPI 服务 复制链接链接已复制到粘贴板!
OpenAPI 规格 (OAS)为 HTTP API 定义了一个标准的编程语言无关接口。您可以在不访问源代码、额外文档或网络流量检查的情况下了解服务的功能。当使用 OpenAPI 定义服务时,您可以使用最小实施逻辑理解并与之交互。正如接口描述简化了低级别编程一样,OpenAPI 规格 消除了调用服务中的猜测工作。
3.1.1. OpenAPI 功能定义 复制链接链接已复制到粘贴板!
OpenShift Serverless Logic 允许工作流使用函数中的 OpenAPI 规格引用与远程服务交互。
OpenAPI 功能定义示例
{
"functions": [
{
"name": "myFunction1",
"operation": "specs/myopenapi-file.yaml#myFunction1"
}
]
}
operation 属性是由以下参数组成的 字符串 :
-
URI:引擎使用它来找到规格文件。 - 操作标识符 :您可以在 OpenAPI 规格文件中找到此标识符。
OpenShift Serverless Logic 支持以下 URI 方案:
- file:将它用于位于文件系统中的文件。
-
HTTP或https:将它们用于远程找到的文件。
确保 OpenAPI 规格文件在构建期间可用。OpenShift Serverless Logic 使用内部代码生成功能在运行时发送请求。构建应用程序镜像后,OpenShift Serverless Logic 将无法访问这些文件。
如果要添加到工作流的 OpenAPI 服务没有规格文件,您可以创建一个或多个服务来生成和公开该文件。
3.1.2. 根据 OpenAPI 规格发送 REST 请求 复制链接链接已复制到粘贴板!
要发送基于 OpenAPI 规格文件的 REST 请求,您必须执行以下步骤:
- 定义功能引用
- 访问工作流状态中定义的功能
先决条件
- 已在集群中安装了 OpenShift Serverless Logic Operator。
- 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您可以访问 OpenAPI 规格文件。
流程
定义 OpenAPI 功能:
- 识别并访问您要调用的服务的 OpenAPI 规格文件。
将 OpenAPI 规格文件复制到工作流服务目录中,如 <
project_application_dir>/specs。以下示例显示了 multiplication REST 服务的 OpenAPI 规格:
multiplication REST 服务 OpenAPI 规格示例
openapi: 3.0.3 info: title: Generated API version: "1.0" paths: /: post: operationId: doOperation parameters: - in: header name: notUsed schema: type: string required: false requestBody: content: application/json: schema: $ref: '#/components/schemas/MultiplicationOperation' responses: "200": description: OK content: application/json: schema: type: object properties: product: format: float type: number components: schemas: MultiplicationOperation: type: object properties: leftElement: format: float type: number rightElement: format: float type: number要在工作流中定义功能,请使用 OpenAPI 规格中的
operationId来引用功能定义中的所需操作。温度转换应用中的函数定义示例
{ "functions": [ { "name": "multiplication", "operation": "specs/multiplication.yaml#doOperation" }, { "name": "subtraction", "operation": "specs/subtraction.yaml#doOperation" } ] }-
确保您的功能定义引用存储在 <
project_application_dir>/specs目录中的 OpenAPI 文件的正确路径。
访问工作流状态中定义的功能:
- 定义工作流操作来调用您添加的功能定义。确保每个操作引用之前定义的函数。
使用
functionRef属性根据其名称引用特定功能。使用 OpenAPI 规格中定义的参数来映射functionRef中的参数。以下示例演示了在请求路径而不是请求正文中映射参数,您可以参考以下 PetStore API 示例:
工作流中的映射功能参数示例
{ "states": [ { "name": "SetConstants", "type": "inject", "data": { "subtractValue": 32.0, "multiplyValue": 0.5556 }, "transition": "Computation" }, { "name": "Computation", "actionMode": "sequential", "type": "operation", "actions": [ { "name": "subtract", "functionRef": { "refName": "subtraction", "arguments": { "leftElement": ".fahrenheit", "rightElement": ".subtractValue" } } }, { "name": "multiply", "functionRef": { "refName": "multiplication", "arguments": { "leftElement": ".difference", "rightElement": ".multiplyValue" } } } ], "end": { "terminate": true } } ] }-
检查 OpenAPI 规格的
Operation Object部分,以了解如何在请求中结构参数。 -
使用
jq表达式从有效负载中提取数据并将其映射到所需参数。确保引擎根据 OpenAPI 规格映射参数名称。 对于在请求路径而不是正文中需要参数的操作,请参阅 OpenAPI 规格中的参数定义。
有关请求路径而不是请求正文中映射参数的更多信息,您可以参阅以下 PetStore API 示例:
映射路径参数示例
{ "/pet/{petId}": { "get": { "tags": ["pet"], "summary": "Find pet by ID", "description": "Returns a single pet", "operationId": "getPetById", "parameters": [ { "name": "petId", "in": "path", "description": "ID of pet to return", "required": true, "schema": { "type": "integer", "format": "int64" } } ] } } }以下是调用函数的示例,在请求路径中只添加了一个名为
petId的参数:调用 PetStore 功能的示例
{ "name": "CallPetStore",1 "actionMode": "sequential", "type": "operation", "actions": [ { "name": "getPet", "functionRef": { "refName": "getPetById",2 "arguments": {3 "petId": ".petId" } } } ] }
3.1.3. 配置 OpenAPI 服务的端点 URL 复制链接链接已复制到粘贴板!
在访问工作流状态中的函数定义后,您可以配置 OpenAPI 服务的端点 URL。
先决条件
- 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您已创建了 OpenShift Serverless Logic 项目。
- 您可以访问 OpenAPI 规格文件。
- 您已在工作流中定义了函数定义。
- 您可以访问工作流状态中定义的功能。
流程
-
找到您要配置的 OpenAPI 规格文件。例如,
substraction.yaml。 -
通过将特殊字符(如
.)替换为下划线并将字母转换为小写,将文件名转换为有效的配置键。例如,将substraction.yaml更改为substraction_yaml。 要定义配置密钥,请使用转换的文件名作为 REST 客户端配置密钥。将此键设置为环境变量,如下例所示:
quarkus.rest-client.subtraction_yaml.url=http://myserver.com要防止
application.properties文件中的硬编码 URL,请使用环境变量替换,如下例所示:quarkus.rest-client.subtraction_yaml.url=${SUBTRACTION_URL:http://myserver.com}在本例中:
-
配置密钥:
quarkus.rest-client.subtraction_yaml.url - 环境变量:SUBTRACTION_URL
-
回退 URL:
http://myserver.com
-
配置密钥:
-
确保在系统或部署环境中设置了
(SUBTRACTION_URL)环境变量。如果没有找到变量,应用程序将使用回退 URL(http://myserver.com)。 将配置键和 URL 替换添加到
application.properties文件中:quarkus.rest-client.subtraction_yaml.url=${SUBTRACTION_URL:http://myserver.com}- 部署或重启您的应用程序以应用新的配置设置。