使用 Visual Studio 程式碼產生 Postman Collection

您可以建立 Postman 集合,其中包含所有鏈碼控制器 API 的範例有效負載。

Postman 是一種工具,可用來使用及測試 REST API。Generate 命令會根據從宣告式規格檔案自動產生的鏈碼建立 Postman 集合。Postman 集合包含鏈碼控制器檔案中指定之所有方法的有效負載。您可以變更 Postman 收集檔案中的變數值,以進行 REST API 呼叫。

產生的 Postman 集合包括控制器中所有 API 的預設值。若要進一步瞭解 Postman,請參閱 https://www.postman.com/ 。產生 Postman 集合後,您可以直接匯入該集合,並藉由變更有效負載和變數中的預設值來加以使用。

若要在 Visual Studio Code 中產生鏈碼專案的 Postman 集合,請完成下列步驟。

  1. 鏈碼窗格中選取鏈碼專案。
  2. 在鏈碼名稱上按一下滑鼠右鍵,然後選取產生 Postman Collection
  3. 選取要儲存 Postman 集合的位置,然後按一下選取輸出資料夾

如果指定的 Postman 收藏已經存在,則系統會提示您是否要覆寫它。

Postman 收藏結構

產生的 Postman 集合包括兩種類型的要求、呼叫要求及查詢要求:
  • 呼叫要求包括使用端點 /transactions 的所有寫入作業
  • 查詢要求包括使用端點 /chaincode-queries 的所有取得作業

為了區分控制器 API 中的 getter 和 non-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 僅記號鏈碼

在每個產生的要求中,會產生所有含有預設值的參數。具有結構 / 類別參數的函數在要求主體中將會有預留位置物件,如下列範例所示。

API 搭配 struct/class 參數
{
    "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}}
}
不含 struct/class 參數的 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}}
}