包装 API 程序包组件

包装 API 程序包包含包装 API 的归档文件、用于部署的 Terraform 脚本以及对应的 Postman 集合。

  • 包装器 API 档案文件名为 <ChaincodeName>WrapperAPI.zip。它还包含一个必须部署到堆栈资源的 Terraform 脚本。
  • Postman 集合文件名为 <ChaincodeName>_WrapperAPI.postman_collection.json。您可以使用此集合调用所有包装 API。

包装 API 程序包

包装 API 程序包包含一个 Terraform 脚本,用于预配创建包装 API 所需的所有 Oracle Cloud Infrastructure (OCI) 资源。还有其他 Terraform 支持文件和每个 API 的 Oracle Functions 文件夹。包装 API 程序包创建以下 OCI 资源。

  • 虚拟云网络 (VCN):建立用于通信的网络基础结构。
  • 应用程序 (Oracle Functions):部署无服务器函数来处理 API 逻辑。
  • API 网关:创建网关以管理和路由 API 请求。
  • API 部署:在 API 网关上配置和部署 API。
  • API 部署策略:设置必要的 IAM 策略以启用安全访问。
  • OCI Registry:提供用于管理 Docker 映像的容器注册表。
生成包装 API 后,如果要更改任何配置变量,可以在 Visual Studio Code 中更新这些变量,或者可以提取包装 API 软件包并使用更新的端点和资源名称更新 terraform.tfvars 文件以及使用更新的端点更新 routes.go 文件。编辑 terraform.tfvars 文件中的 function_paths 变量以更新端点。function_paths 变量使用以下语法定义端点:{endpoint, methodType}。以下文本显示了 function_paths 变量的示例。
function_paths="[{\"endpoint\":\"/activateCBDCAccount\",\"methodType\":[\"POST\"]},{\"endpoint\":\"/addCBAdmin\",\"methodType\":[\"POST\"]},{\"endpoint\":\"/approveBurn\",\"methodType\":[\"POST\"]}]"
routes.go 文件位于 <ChaincodeName>OCIFunction 文件夹中。routeData 变量包含网关中创建的所有路由的元数据,包括路由名称、参数以及是否存在可选参数。更新 terraform.tfvars 文件中的 function_paths 变量中的端点时,还必须更新 routes.go 文件中 routeData 变量中的相应条目,如以下示例中所示。
var routeData = map[string]Route{
    "/activateCBDCAccount": {
        Args:           []string{"activateAccount", "orgId", "userId", "tokenId"},
        OptionalParams: true,
    },
}

邮递员

Postman 集合现在支持机密链码和 OAuth 2.0 验证。有关更多信息,请参见 Enhancements to Postman Collection

Postman 集合包括所有 API 的更新端点和有效负载。以下代码显示了示例有效负载。
{
    "orgId": "{{bc-org-id}}",
    "userId": "user1",
    "tokenType": "fungible",
    "applicationGroups": "[\"application_groups value\"]",
    "dailyLimits": "{\"max_daily_amount\":10000,\"max_daily_transactions\":100}",
    "endorsers": {{endorsers}}
}
下表显示了 Postman 集合变量。
变量 说明 默认值
bc-admin-user 具有 admin 角色并且可以访问所有 POST 请求的管理用户。默认情况下,此用户是链代码中所有 POST 请求的调用方。 bc-admin-user 值
bc-admin-user-password 管理用户口令。 bc-admin-user-password 值
bc-org-id orgId 是参数名称的所有 POST 请求中的默认组织 ID bc-org-id 值
bc-user-id userId 是参数名称的所有 POST 请求中的默认用户 ID bc-user-id 值
bc-token-id tokenId 是参数名称的所有 POST 请求中的默认标记 ID bc-token-id 值
endorsers 背书者数组列出用于背书此事务处理的特定对等点(例如:peer1、peer2)。 ["org1-xyz-abc.blockchain.ocp.oraclecloud.com:20009", "org2-xyz-abc.blockchain.ocp.oraclecloud.com:20009"]
api-gateway-endpoint 每个请求的端点,用作包装 API 端点的基本路径。

如果 API 少于 50 个,则使用单个端点。如果有超过 50 个 API,则根据 API 数量,以 api-gateway-endpoint1api-gateway-endpoint2 等形式动态生成端点。

https://xyz.apigateway.region.oci.customer-oci.com/CBDC
bc-url Oracle Blockchain Platform 实例的 REST 代理 URL。 https://test-xyz-abc.blockchain.ocp.oraclecloud.com:7443/restproxy
access-token-url Oracle Identity Cloud Service (IDCS) 访问令牌 URL。例如:<idcs_endpoint>/oauth/v1/token access-token-url 值
client-id Oracle Blockchain Platform 实例的客户端 ID。 客户机标识
client-secret Oracle Blockchain Platform 实例的客户端密钥。 客户端机密
peer 此变量仅存在于机密链代码包装器 API Postman 集合中,该集合需要所有 setter 和 getter API 的对等标头。 org-xyz-abc.blockchain.ocp.oraclecloud.com:20009

部署包装 API 程序包后,堆栈资源部署的输出是一个包含网关端点值的 JSON 对象。如果您生成超过 50 个 API,将生成多个网关端点,每 50 个 API 一个。您必须更新与这些端点相关的 Postman 集合变量。Postman 集合中与端点相关的变量必须使用堆栈资源管理器中包装 API 软件包部署的输出中的相应值进行更新。

包装器 API Postman 集合中的所有 setter API 都包含请求有效负载中的 endorserssameOrgEndorser 参数。指定哪些 API 需要 sameOrgEndorser 参数的信息在链代码的 .ochain.json 文件的 sameOrgEndorserOptionInWrapperAPI 参数中定义。此参数中列出的 API 将在其有效负载中将 sameOrgEndorser 设置为 true。所有其他 setter API 将改为包含 endorsers 参数。以下示例显示了批发 CBDC 链代码的参数。
"sameOrgEndorserOptionInWrapperAPI": ["addConversionRate","addTokenAdmin","addTokenAuditor","approveBurn","approveMint","burnTokens","createExchangePoolAccounts","deleteHistoricalTransactions","initializeCBDCToken","initializeExchangePoolUser","mintWithFundingExchangePool","rejectBurn","rejectMint","removeTokenAdmin","removeTokenAuditor","requestBurn","requestMint","updateCBDCToken","updateConversionRate"]
可以根据需要定制 .ochain.json 文件中的 sameOrgEndorserOptionInWrapperAPI 参数。生成包装 API 时,指定的 API 将在其有效负载中包括 sameOrgEndorser 参数作为 true
有关使用 Postman 集合的更多详细信息,请参阅以下主题。