CLI를 사용하여 Postman 컬렉션 생성

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

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

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

사용법:

generate [options]
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 요청에 액세스할 수 있는 admin 롤을 가진 사용자). 기본적으로 이 사용자는 체인 코드에 있는 모든 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의 필터 매개변수:
    "{\"PageSize\":20,\"Bookmark\":\"\",\"StartTime\":\"2022-01-16T15:16:36+00:00\",\"EndTime\":\"2022-01-17T15:16:36+00:00\"}"
  • GetSubTransactionsByIdWithFilters의 필터 매개변수:
    "{\"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}}
}