CLI를 사용하여 Postman 모음 생성

generate 명령을 사용하여 모든 체인코드 컨트롤러 API에 대한 예제 페이로드를 포함하는 Postman 모음을 생성할 수 있습니다.

Postman은 REST API를 사용하고 테스트하는 데 사용할 수 있는 도구입니다. generate 명령은 선언적 사양 파일에서 자동으로 생성된 체인코드를 기반으로 하는 Postman 컬렉션을 생성합니다. Postman 컬렉션은 체인코드 제어기 파일에 지정된 모든 메소드에 대한 페이로드를 포함합니다. Postman 컬렉션 파일에서 변수 값을 변경하여 REST API를 호출할 수 있습니다.

생성된 Postman 컬렉션은 컨트롤러의 모든 API에 대한 기본값을 포함합니다. Postman에 대한 자세한 내용은 https://www.postman.com/을 참조하십시오. Postman 컬렉션을 생성한 후 페이로드 및 변수의 기본값을 변경하여 Postman 컬렉션을 직접 가져와서 사용할 수 있습니다.

사용법:

generate [options]
my-mac:TsProject myname$ ochain generate -h 
Usage: generate [options]

Generates the postman collection for the chaincode. 

Options :
    -h, --help              output command usage information
    -D, --debug             enable debug logging
    -c, --collection        This option is mandatory to generate a Postman collection.
    -p, --project <path>    Path to the chaincode project to generate the Postman collection from. If not specified, it defaults to current directory.
    -o, --out <path>        Path to the generated Postman collection JSON file. If not specified, it defaults to current directory.

Postman 모음을 생성하려면 프로젝트가 포함된 디렉토리로 이동한 다음 다음 명령을 입력합니다. chaincode 디렉토리에서 generate 명령을 실행해야 합니다. 그렇지 않으면 오류가 발생합니다. 지정한 Postman 컬렉션이 이미 있으면 덮어쓸지 묻는 메시지가 표시됩니다.

ochain generate --collection --project path_to_chaincode_project --out path_to_postman_collection_to_generate

Postman 수집 구조

생성된 Postman 컬렉션에는 호출 요청 및 질의 요청이라는 두 가지 유형의 요청이 포함됩니다.
  • 호출 요청에는 끝점 /transactions를 사용하는 모든 쓰기 작업이 포함됩니다.
  • 질의 요청에는 끝점 /chaincode-queries를 사용하는 모든 get 작업이 포함됩니다.

컨트롤러 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 토큰 체인코드만

생성된 모든 요청에서 기본값이 있는 모든 매개변수가 생성됩니다. struct/class 매개변수가 있는 함수는 다음 예제에 표시된 것처럼 요청 본문에 위치 표시자 객체를 가집니다.

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}}
}
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의 filters 매개변수:
    "{\"PageSize\":20,\"Bookmark\":\"\",\"StartTime\":\"2022-01-16T15:16:36+00:00\",\"EndTime\":\"2022-01-17T15:16:36+00:00\"}"
  • GetSubTransactionsByIdWithFilters의 filters 매개변수:
    "{\"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를 보여 줍니다.
  Fungible 토큰 사용할 수 없는 토큰
요청 이름 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}}
}