Generación de una recopilación Postman con la CLI

Puede utilizar el comando generate para crear una recopilación Postman que incluya cargas útiles de ejemplo para todas las API del controlador de código de cadenas.

Postman es una herramienta que puede utilizar para trabajar con API de REST y probarlas. El comando Generate crea una recopilación Postman basada en el código de cadena que se ha generado automáticamente a partir de un archivo de especificación declarativo. La recopilación Postman contiene las cargas útiles para todos los métodos especificados en el archivo de controlador de código de cadenas. Puede cambiar los valores de variable en el archivo de recopilación Postman para realizar llamadas a la API de REST.

La recopilación Postman generada incluye valores por defecto para todas las API del controlador. Para obtener más información sobre Postman, consulte https://www.postman.com/. Después de generar una recopilación Postman, puede importarla directamente y utilizarla cambiando los valores por defecto en la carga útil y las variables.

Sintaxis:

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 generar una recopilación Postman, navegue hasta el directorio que contiene el proyecto y, a continuación, introduzca el siguiente comando. Debe ejecutar el comando generate desde el directorio chaincode o se producirá un error. Si la recopilación Postman especificada ya existe, se le preguntará si desea sobrescribirla.

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

Estructura de la colección Postman

La recopilación Postman generada incluye dos tipos de solicitudes, solicitudes de llamada y solicitudes de consulta:
  • Las solicitudes de llamada incluyen todas las operaciones de escritura, que utilizan el punto final /transactions
  • Las solicitudes de consulta incluyen todas las operaciones get, que utilizan el punto final /chaincode-queries

Para diferenciar entre métodos getter y no-getter en las API del controlador, se utiliza un decorador en los códigos de cadenas TypeScript y se utiliza un comentario en los códigos de cadenas Go. Si define un método getter en el controlador, debe utilizar el decorador GetMethod para TypeScript o el comentario GetMethod para Go, como se muestra en la siguiente tabla.

TypeScript Go
Cada método getter tiene un 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 tiene un bloque de comentarios 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()
}

Las recopilaciones Postman generadas incluyen variables con valores por defecto, como se muestra en la siguiente tabla.

Nombre de variable Descripción Valor por defecto Contexto
bc-url URL de proxy REST de la instancia de Oracle Blockchain Platform donde se despliega el código de cadena https://test-xyz-abc.blockchain.ocp.oraclecloud.com:7443/restproxy todos los códigos de cadenas
bc-channel Canal en el que se despliega el código de cadenas default todos los códigos de cadenas
bc-admin-user Nombre del usuario administrador (un usuario con el rol de administrador que puede acceder a todas las solicitudes POST). Por defecto, este usuario es el emisor de llamada de todas las solicitudes POST del código de cadenas bc-admin-user value todos los códigos de cadenas
bc-admin-password La contraseña del usuario administrador bc-admin-password value todos los códigos de cadenas
bc-timeout El valor de timeout en el cuerpo de cada solicitud POST para indicar el intervalo de timeout 6000 todos los códigos de cadenas
bc-sync Valor de sincronización en el cuerpo de cada solicitud POST para indicar si la solicitud es síncrona o asíncrona true todos los códigos de cadenas
bc-chaincode-name El nombre del código de cadena, que se utiliza en cada solicitud POST chaincode name todos los códigos de cadenas
bc-org-id El parámetro orgId por defecto para todas las solicitudes POST bc-org-id value solo códigos de cadenas de token
bc-user-id El parámetro userId por defecto para todas las solicitudes POST bc-user-id value solo códigos de cadenas de token
bc-token-id El parámetro tokenId por defecto para todas las solicitudes POST bc-token-id value solo códigos de cadenas de token

En cada solicitud generada, se generan todos los parámetros con valores por defecto. Las funciones que tienen parámetros de estructura/clase tendrán un objeto de marcador de posición en el cuerpo de la solicitud, como se muestra en los siguientes ejemplos.

API con un parámetro de estructura/clase
{
    "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 sin un parámetro de estructura/clase
{
    "chaincode": "{{bc-chaincode-name}}",
    "args": [
        "CreateAccount",
        "{{bc-org-id}}",
        "example_minter",
        "true",
        "true"
    ],
    "timeout": {{bc-timeout}},
    "sync": {{bc-sync}}
}

El valor por defecto para la mayoría de los parámetros de API es parameter_name value, con algunas excepciones. Los siguientes ejemplos muestran algunas de las excepciones.

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

Una estructura o clase tiene diferentes valores por defecto, como se muestra en la siguiente tabla:

Tipo de datos Valor por defecto
boolean/bool true
int/number 999
date 2022-01-16T15:16:36+00:00
other parameter_name value

Proyectos de token ERC-1155

El estándar ERC-1155 incluye métodos comunes para tokens fungibles y no fungibles. La colección Postman generada para un proyecto ERC-1155 que utiliza tokens fungibles y no fungibles incluye dos solicitudes POST diferentes, una para cada tipo de token, para estos métodos comunes. Si un proyecto ERC-1155 utiliza solo tokens fungibles o no fungibles, pero no ambos tipos, la recopilación Postman generada incluye solo una solicitud POST para estos métodos comunes. En la siguiente tabla se muestra la API generada para el método AddRole.
  Tokens fungibles Tokens no fungibles
Nombre de Solicitud AddRole -For Fungible AddRole -For NonFungible
Cuerpo de Solicitud
{
    "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}}
}