使用 Visual Studio Code 生成 Postman 集合

您可以创建 Postman 集合,其中包含所有链代码控制器 API 的有效负载示例。

Postman 是一种工具,可用于使用和测试 REST API。生成命令创建 Postman 集合,该集合基于从声明规范文件中自动生成的链代码。Postman 集合包含链代码控制器文件中指定的所有方法的有效负载。您可以更改 Postman 集合文件中的变量值以进行 REST API 调用。

生成的 Postman 集合包括控制器中所有 API 的默认值。要了解有关 Postman 的更多信息,请参见 https://www.postman.com/ 。生成 Postman 集合后,您可以直接导入并使用它,方法是更改有效负载和变量中的默认值。

要为 Visual Studio Code 中的链码项目生成 Postman 集合,请完成以下步骤。

  1. Chaincodes 窗格中选择链代码项目。
  2. 右键单击链代码名称,然后选择生成 Postman 集合
  3. 选择要将 Postman 集合保存到的位置,然后单击选择输出文件夹

如果指定的 Postman 集合已存在,系统将提示您是否覆盖它。

Postman 收集结构

生成的 Postman 集合包括两种类型的请求、调用请求和查询请求:
  • 调用请求包括使用端点 /transactions 的所有写入操作
  • 查询请求包括使用端点 /chaincode-queries 的所有 get 操作

为了区分控制器 API 中的 getter 和非 getter 方法,TypeScript 链代码中使用了装饰器,Go 链代码中使用了注释。如果在控制器中定义 getter 方法,则必须为 TypeScript 使用 GetMethod 修饰符,或为 Go 使用 GetMethod 注释,如下表所示。

TypeScript 开始
每个 getter 方法都有一个 GetMethod 修饰符:
@GetMethod()
@Validator()
public async getAllTokenAdmins() {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155ADMIN.getAllAdmins", "TOKEN");
  return await this.Ctx.ERC1155Admin.getAllAdmins();
}
每个 getter 方法都有一个 GetMethod 注释块:
/**
 * GetMethod
 */
func (t *Controller) GetAllTokenAdmins() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Admin.GetAllAdmins", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Admin.GetAllTokenAdmins()
}

生成的 Postman 集合包括具有默认值的变量,如下表所示。

变量名称 说明 默认值 上下文
bc-url 部署链代码的 Oracle Blockchain Platform 实例的 REST 代理 URL https://test-xyz-abc.blockchain.ocp.oraclecloud.com:7443/restproxy 所有链代码
bc-channel 部署链代码的渠道 default 所有链代码
bc-admin-user 管理员用户的名称(具有管理员角色,可以访问所有 POST 请求的用户)。默认情况下,此用户是链代码中所有 POST 请求的调用方 bc-admin-user value 所有链代码
bc-admin-password 管理员用户的口令 bc-admin-password value 所有链代码
bc-timeout 每个 POST 请求正文中用于指示超时间隔的超时值 6000 所有链代码
bc-sync 每个 POST 请求正文中的同步值,用于指示请求是同步还是异步 true 所有链代码
bc-chaincode-name 链代码名称,用于每个 POST 请求 chaincode name 所有链代码
bc-org-id 所有 POST 请求的默认 orgId 参数 bc-org-id value 仅标记链代码
bc-user-id 所有 POST 请求的默认 userId 参数 bc-user-id value 仅标记链代码
bc-token-id 所有 POST 请求的默认 tokenId 参数 bc-token-id value 仅标记链代码

在每个生成的请求中,都会生成所有具有默认值的参数。具有结构/类参数的函数在请求主体中将具有占位符对象,如以下示例中所示。

带有 struct/class 参数的 API
{
    "chaincode": "{{bc-chaincode-name}}",
    "args": [
        "CreateArtCollectionToken",
        "{\"TokenId\":\"{{bc-token-id}}\",\"TokenDesc\":\"TokenDesc value\",\"TokenUri\":\"TokenUri value\",\"TokenMetadata\":{\"Painting_name\":\"Painting_name value\",\"Description\":\"Description value\",\"Image\":\"Image value\",\"Painter_name\":\"Painter_name value\"},\"Price\":999,\"On_sale_flag\":true}",
        "quantity value"
    ],
    "timeout": {{bc-timeout}},
    "sync": {{bc-sync}}
}
不带结构/类参数的 API
{
    "chaincode": "{{bc-chaincode-name}}",
    "args": [
        "CreateAccount",
        "{{bc-org-id}}",
        "example_minter",
        "true",
        "true"
    ],
    "timeout": {{bc-timeout}},
    "sync": {{bc-sync}}
}

大多数 API 参数的默认值为 parameter_name value,但有一些例外。以下示例显示一些例外情况。

  • GetAccountTransactionHistoryWithFilters 中的 filter 参数:
    "{\"PageSize\":20,\"Bookmark\":\"\",\"StartTime\":\"2022-01-16T15:16:36+00:00\",\"EndTime\":\"2022-01-17T15:16:36+00:00\"}"
  • GetSubTransactionsByIdWithFilters 中的 filter 参数:
    "{\"PageSize\":20,\"Bookmark\":\"\}"

结构或类具有不同的默认值,如下表所示:

数据类型 默认值
boolean/bool true
int/number 999
date 2022-01-16T15:16:36+00:00
other parameter_name value

ERC-1155 令牌项目

ERC-1155 标准包括可替代和非可替代代币的常见方法。为 ERC-1155 项目生成的 Postman 集合,该项目使用可替换令牌和非可替换令牌,这些常见方法包括两个不同的 POST 请求,每种类型的令牌一个。如果 ERC-1155 项目仅使用可替换或不可替换的令牌,但不是两种类型,则生成的 Postman 集合仅包括对这些常见方法的一个 POST 请求。下表说明了为 AddRole 方法生成的 API。
  可替换令牌 非可替代令牌
请求名称 AddRole -For Fungible AddRole -For NonFungible
请求正文
{
    "chaincode": "{{bc-chaincode-name}}",
    "args": [
        "AddRole",
        "{{bc-org-id}}",
        "{{bc-user-id}}",
        "role value (for example, minter / burner)",
        "{\"TokenId\":\"{{bc-token-id}}\"}"
    ],
    "timeout": {{bc-timeout}},
    "sync": {{bc-sync}}
}
{
    "chaincode": "{{bc-chaincode-name}}",
    "args": [
        "AddRole",
        "{{bc-org-id}}",
        "{{bc-user-id}}",
        "role value (for example, minter / burner)",
        "{\"TokenName\":\"TokenName value\"}"
    ],
    "timeout": {{bc-timeout}},
    "sync": {{bc-sync}}
}