Gerar uma Coleção Postman Usando a CLI

Você pode usar o comando generate para criar uma coleção Postman que inclua payloads de exemplo para todas as APIs do controlador de chaincode.

Postman é uma ferramenta que você pode usar para trabalhar e testar APIs REST. O comando generate cria uma coleção Postman baseada no chaincode que foi gerado automaticamente a partir de um arquivo de especificação declarativa. A coleção Postman contém as cargas úteis para todos os métodos especificados no arquivo do controlador de chaincode. Você pode alterar os valores das variáveis no arquivo de coleta Postman para fazer chamadas de API REST.

A coleção Postman gerada inclui valores padrão para todas as APIs no controlador. Para saber mais sobre Postman, consulte https://www.postman.com/. Depois de gerar uma coleção Postman, você pode importá-la diretamente e usá-la alterando os valores padrão na carga útil e nas variáveis.

Uso:

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.

Para gerar uma coleção Postman, navegue até o diretório que contém o projeto e insira o comando a seguir. Você deve executar o comando generate no diretório chaincode ou ocorrerá um erro. Se a coleção Postman especificada já existir, você será solicitado a substituí-la.

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

Estrutura de Cobrança Postman

A coleção Postman gerada inclui dois tipos de solicitações, solicitações de chamada e solicitações de consulta:
  • As solicitações de chamada incluem todas as operações de gravação, que usam o ponto final /transactions
  • As solicitações de consulta incluem todas as operações de obtenção, que usam o ponto final /chaincode-queries

Para diferenciar entre métodos getter e não getter nas APIs do controlador, um decorador é usado em chaincodes TypeScript e um comentário é usado em chaincodes Go. Se você definir um método getter no controlador, use o decorador GetMethod para TypeScript ou o comentário GetMethod para Go, conforme mostrado na tabela a seguir.

TypeScript Go
Cada método getter tem um decorador GetMethod:
@GetMethod()
@Validator()
public async getAllTokenAdmins() {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155ADMIN.getAllAdmins", "TOKEN");
  return await this.Ctx.ERC1155Admin.getAllAdmins();
}
Cada método getter tem um bloco de comentários 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()
}

As coleções Postman geradas incluem variáveis com valores padrão, conforme mostrado na tabela a seguir.

Nome da Variável Descrição Valor padrão Contexto
bc-url O URL de proxy REST da instância do Oracle Blockchain Platform na qual o chaincode é implantado https://test-xyz-abc.blockchain.ocp.oraclecloud.com:7443/restproxy todos os chaincodes
bc-channel O canal no qual o chaincode é implantado default todos os chaincodes
bc-admin-user O nome do usuário administrador (um usuário com a atribuição de administrador que pode acessar todas as solicitações POST). Por padrão, este usuário é o chamador de todas as solicitações POST no chaincode bc-admin-user value todos os chaincodes
bc-admin-password A senha do usuário administrador bc-admin-password value todos os chaincodes
bc-timeout O valor de timeout no corpo de cada solicitação POST para indicar o intervalo de timeout 6000 todos os chaincodes
bc-sync O valor de sincronização no corpo de cada solicitação POST para indicar se a solicitação é síncrona ou assíncrona true todos os chaincodes
bc-chaincode-name O nome do chaincode, que é usado em cada solicitação POST chaincode name todos os chaincodes
bc-org-id O parâmetro orgId padrão para todas as solicitações POST bc-org-id value somente códigos de cadeia de token
bc-user-id O parâmetro userId padrão para todas as solicitações POST bc-user-id value somente códigos de cadeia de token
bc-token-id O parâmetro tokenId padrão para todas as solicitações POST bc-token-id value somente códigos de cadeia de token

Em cada solicitação gerada, todos os parâmetros com valores padrão são gerados. As funções que têm parâmetros de estrutura/classe terão um objeto de espaço reservado no corpo da solicitação, conforme mostrado nos exemplos a seguir.

API com um parâmetro de estrutura/classe
{
    "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 sem um parâmetro de estrutura/classe
{
    "chaincode": "{{bc-chaincode-name}}",
    "args": [
        "CreateAccount",
        "{{bc-org-id}}",
        "example_minter",
        "true",
        "true"
    ],
    "timeout": {{bc-timeout}},
    "sync": {{bc-sync}}
}

O valor padrão para a maioria dos parâmetros de API é parameter_name value, com algumas exceções. Os exemplos a seguir mostram algumas das exceções.

  • O parâmetro de filtros em GetAccountTransactionHistoryWithFilters:
    "{\"PageSize\":20,\"Bookmark\":\"\",\"StartTime\":\"2022-01-16T15:16:36+00:00\",\"EndTime\":\"2022-01-17T15:16:36+00:00\"}"
  • O parâmetro de filtros em GetSubTransactionsByIdWithFilters:
    "{\"PageSize\":20,\"Bookmark\":\"\}"

Uma estrutura ou classe tem valores padrão diferentes, conforme mostrado na tabela a seguir:

Tipo de Dados Valor padrão
boolean/bool true
int/number 999
date 2022-01-16T15:16:36+00:00
other parameter_name value

Projetos de Token ERC-1155

O padrão ERC-1155 inclui métodos comuns para tokens fungíveis e não fungíveis. A coleção Postman gerada para um projeto ERC-1155 que usa tokens fungíveis e não fungíveis inclui duas solicitações POST diferentes, uma para cada tipo de token, para esses métodos comuns. Se um projeto ERC-1155 usar apenas tokens fungíveis ou não fungíveis, mas não ambos os tipos, a coleção Postman gerada incluirá apenas uma solicitação POST para esses métodos comuns. A tabela a seguir ilustra a API gerada para o método AddRole.
  Tokens Fungíveis Tokens não fungíveis
Nome da Solicitação AddRole -For Fungible AddRole -For NonFungible
Corpo da Solicitação
{
    "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}}
}