Começando com WebAPI Latromi

[Aviso de Versão Beta] O conteúdo apresentado neste tópico se refere a um novo recurso da plataforma LATROMI, atualmente disponível com exclusividade para os usuários da versão Beta.

Visão Geral

A WebAPI é uma nova funcionalidade incorporada ao objeto de Formulário do LATROMI. Ela permite que você exponha regras de negócio e lógicas do sistema — sejam elas novas ou já existentes — para o mundo externo, criando uma porta de comunicação padronizada com outras aplicações.

Para ilustrar o poder dessa ferramenta na prática, este tutorial guiará você na construção de um CRUD completo via API. No banco de dados, utilizaremos a seguinte estrutura de tabela para gerenciar produtos:

CREATE TABLE produtos
(
    produto_id VARCHAR(36) PRIMARY KEY,
    data_criacao TIMESTAMP NOT NULL,
    data_atualizacao TIMESTAMP,
    nome VARCHAR(255) NOT NULL,
    descricao VARCHAR(2000),
    preco DECIMAL(10, 2) NOT NULL,
    estoque INT NOT NULL,
    ativo BOOLEAN NOT NULL DEFAULT TRUE
);
Quando criamos uma exposição de API, liberamos parte da lógica do sistema para uso externo. Por isso, é crucial se preocupar com segurança durante o desenvolvimento. Como boa prática ao criar uma WebAPI, busque usar identificadores opacos. (ex.: GUID)

Se tratando de um projeto já existente, que use os IDs como numéricos e incrementais, crie uma coluna auxiliar para expor na API, por exemplo, uma coluna chamada ‘public_id’ do tipo VARCHAR(36) para preencher com um GUID.

Endpoints que iremos construir

Ao longo deste tutorial, configuraremos o LATROMI para responder às seguintes operações padrão de mercado (REST):

Operação Método Descrição
Listar GET Capturar todos os produtos ativos
Buscar GET Localizar um produto existente
Criar POST Adicionar um novo produto
Atualizar PUT Atualizar informações do produto
Excluir DELETE Inativar um produto

Requisitos

O tutorial é uma exemplificação de implementação para algum recurso, sendo assim, antes de prosseguir veja a documentação do recurso descrito:

Usando WebAPI no Formulário

A configuração da WebAPI foi incorporada nativamente à interface de desenvolvimento do objeto Formulário. Você pode encontrá-la como uma nova seção diretamente na árvore lateral do painel, exatamente onde você já está acostumado a gerenciar seus Campos, Variáveis e Procedimentos.

É importante destacar que esta nova aba só será exibida no LATROMI Client caso o seu **LATROMI Web** esteja atualizado para uma versão compatível que suporte este recurso.

Veja na imagem abaixo onde encontrar a configuração:

Configuração inicial

Manter a organização do código é essencial e nos proporciona diversos benefícios como facilitar a manutenção, escalabilidade da lógica, clareza de implementação, dentre outros benefícios. Sendo assim, como uma boa prática na utilização da WebAPI iremos criar duas variáveis no formulário:

Nome Tipo Objetivo
cRequest Texto Armazenar o corpo de requisição da requisição para a Web API
cResponse Texto Devolver a resposta tratada ao fim do processo de requisição

Criar

A criação de uma Web API é bem semelhante a criação de um campo no formulário. Siga o passo a passo para iniciar:

  1. Clique com o botão direito na seção Web API’s (exposição) para adicionar
  2. Clique no ícone de um Arquivo com um raio para adicionar um evento na Web API
  3. Clique com o botão direito em Request para adicionar um evento de requisição

Siga as instruções abaixo para configurar sua Web API e o Procedimento vinculado ao evento.

Web API

Nome: Criar
Método: POST

→ Corpo
Tipo: Raw
Formatação: JSON
Mapeado em:

Nome Tipo
cRequest Variável

Exemplo de requisição: *Não é configuração. Somente para referência.

{
    "nome": "<string>",
    "descricao": "<string>",
    "preco": 0.0,
    "estoque": 0
}

Procedimento

Nome: Criar_Request
Sequência de comandos:

  1. Carregar Registro
    • Conteúdo: COMANDO_SQL_1
  2. Popular campos e variáveis
    • Conteúdo:
      • Produto_id: (CAMPO) return Guid.NewGuid(); [Código C#]
  3. Carregar Registro
    • Conteúdo: COMANDO_SQL_2
  4. Converter para JSON ou XML (serializar)
    • Formato: JSON
    • Conteúdo:
      • cResponse: Preenche a variável
      • rNewRecord: Serializa as informações do Registro
  5. Produzir Resposta
    • Código de Resposta: 201 - Created
    • Tipo de Resposta: application/json
    • Conteúdo da Resposta: VAR.cResponse

Legenda:

Etiqueta Igual Valor
COMANDO_SQL_1 SELECT
 x.nome,
 x.descricao,
 x.preco,
 x.estoque
FROM jsonb_to_record(‘{?VAR.requestBody}’::jsonb)
AS x(
 nome TEXT,
 descricao TEXT,
 preco DECIMAL(10, 2),
 estoque INT
)
COMANDO_SQL_2 INSERT INTO samples.produtos (
 produto_id,
 data_criacao,
 nome,
 descricao,
 preco,
 estoque,
 ativo
) VALUES (
 ‘{?INPUT.Produto_id}’,
 CURRENT_TIMESTAMP,
 ‘{?RECORD.rRequestDeserialized.nome}’,
 ‘{?RECORD.rRequestDeserialized.descricao}’,
 {?RECORD.rRequestDeserialized.preco},
 {?RECORD.rRequestDeserialized.estoque},
 TRUE
) RETURNING *

Exemplo do procedimento:

// Comando SQL usando função do PostgreSQL para deserializar o JSON em uma record
var rRequestDeserialized = LoadRecord(COMANDO_SQL_1) // <-- 1. Carregar Registro
// Geração de valores iniciais para criação
Populate(INPUT.Product_id, INPUT.Ativo) // INPUT.Product_id é populado usando c# com o seguinte comando 'return Guid.NewGuid();'
// Insere um novo produto no banco de dados e retorna as informações
var rNewProduct = LoadRecord(COMANDO_SQL_2) // <-- 3. Carregar Registro
// Converte o 'Registro para uma variável texto
set cResponse = JsonSerialize(rNewProduct) // 4. Converter para JSON ou XML (serializar)
// Ações de Web API para produção de resposta
Response.Send(201, {VAR.cResponse}) // 201 indica criação

Listar

A criação de uma Web API é bem semelhante a criação de um campo no formulário. Siga o passo a passo para iniciar:

  1. Clique com o botão direito na seção Web API’s (exposição) para adicionar
  2. Clique no ícone de um Arquivo com um raio para adicionar um evento na Web API
  3. Clique com o botão direito em Request para adicionar um evento de requisição

Siga as instruções abaixo para configurar sua Web API e o Procedimento vinculado ao evento.

Web API

Nome: Listar
Método: GET
Endpoint: all

Procedimento

Nome: Listar_Request
Sequência de comandos:

  1. Carregar conjunto de registros
    • Conteúdo: COMANDO_SQL_1
  2. Converter para JSON ou XML (serializar)
    • Código de Resposta: 200 - OK
    • Tipo de Resposta: application/json
    • Conteúdo da Resposta: VAR.cResponse
  3. Produzir Resposta
    • Formato: JSON
    • Conteúdo:
      • cResponse: Preenche a variável
      • rsProdutos Serializa as informações do Registro

Legenda:

Etiqueta Igual Valor
COMANDO_SQL_1 SELECT
 *
FROM samples.produtos
WHERE Ativo = TRUE

Exemplo de procedimento:

// Carrega o conjunto de registros ativos
var rsProdutos = LoadRecordSet(COMANDO_SQL_1) // 1. Carregar conjunto de Registros
// Converte o 'Conjunto de registros' para uma lista JSON
set cResponse = JsonSerialize(rsProdutos) // 2. Converter para JSON ou XML (serializar)
// Ações de Web API para produção de resposta
Response.Send(200, {VAR.cResponse}) // 200 indica que o processamento está OK

Buscar

A criação de uma Web API é bem semelhante a criação de um campo no formulário. Siga o passo a passo para iniciar:

  1. Clique com o botão direito na seção Web API’s (exposição) para adicionar
  2. Clique no ícone de um Arquivo com um raio para adicionar um evento na Web API
  3. Clique com o botão direito em Request para adicionar um evento de requisição

Siga as instruções abaixo para configurar sua Web API e o Procedimento vinculado ao evento.

Web API

Nome: Buscar
Método: GET

→ Parâmetros

Parâmetro de URL Mapeado em Tipo do valor mapeado Descrição
id INPUT.Produto_id CAMPO Identificador do registro que deseja capturar

Procedimento

Nome: Buscar_Request
Sequência de comandos:

  1. Carregar Registro
    • Conteúdo: COMANDO_SQL_1
  2. Converter para JSON ou XML (serialize)
    • Código de Resposta: 200 - OK
    • Tipo de Resposta: application/json
    • Conteúdo da Resposta: VAR.cResponse
  3. Produzir resposta
    • Formato: JSON
    • Conteúdo:
      • cResponse: Preenche a variável
      • rProduto: Serializa as informações do Registro

Legenda:

Etiqueta Igual Valor
COMANDO_SQL_1 SELECT
 *
FROM samples.produtos
WHERE produto_id = ‘{?INPUT.Produto_id}’

Exemplo de procedimento:

// Carrega o registro informado pelo identificador
var rProduto = LoadRecord(COMANDO_SQL_1) // 1. Carregar Registro
// Converte o 'Registro' para um JSON
set cResponse = JsonSerialize(rProduto) // 2. Converter para JSON ou XML (serialize)
// Ações de Web API para produção de resposta
Response.Send(200, {VAR.cResponse}) // 200 Indica que processamento esta OK

Atualizar

A criação de uma Web API é bem semelhante a criação de um campo no formulário. Siga o passo a passo para iniciar:

  1. Clique com o botão direito na seção Web API’s (exposição) para adicionar
  2. Clique no ícone de um Arquivo com um raio para adicionar um evento na Web API
  3. Clique com o botão direito em Request para adicionar um evento de requisição

Siga as instruções abaixo para configurar sua Web API e o Procedimento vinculado ao evento.

Web API

Nome: Atualizar
Método: PUT

→ Corpo
Tipo:
Formato:
Mapeado em:

Nome Tipo
cRequest Variável

Exemplo de requisição: *Não é configuração. Somente para referência

{
    "id": "<string>",
    "nome": "<string>",
    "descricao": "<string>",
    "preco": 0.0,
    "estoque": 0
}

Procedimento

Nome: Atualizar_Request
Sequência de comandos:

  1. Carregar Registro
    • Conteúdo: COMANDO_SQL_1
  2. Carregar Registro
    • Conteúdo: COMANDO_SQL_2
  3. Converter para JSON ou XML (serialize)
    • Formato: JSON
    • Conteúdo:
      • cResponse: Preenche a variável
      • rUpdatedProduct: Serializa as informações do Registro
  4. Produzir Resposta
    • código de Resposta: 200 - OK
    • Tipo de Resposta: application/json
    • Conteúdo da Resposta: VAR.cResponse

Legenda:

Etiqueta Igual Valor
COMANDO_SQL_1 SELECT
 x.id,
 x.nome,
 x.descricao,
 x.preco,
 x.estoque
FROM jsonb_to_record(‘{?VAR.requestBody}’::jsonb)
AS x(
 id VARCHAR(36),
 nome TEXT,
 descricao TEXT,
 preco DECIMAL(10, 2),
 estoque INT
)
COMANDO_SQL_2 UPDATE samples.produtos
SET
 data_atualizacao = CURRENT_TIMESTAMP
#if {?RECORD.rRequestDeserialized.nome}
 , nome = ‘{?RECORD.rRequestDeserialized.nome}’
#endif
#if {?RECORD.rRequestDeserialized.descricao}
 , descricao = ‘{?RECORD.rRequestDeserialized.descricao}’
#endif
#if {?RECORD.rRequestDeserialized.preco}
 , preco = {?RECORD.rRequestDeserialized.preco}
#endif
#if {?RECORD.rRequestDeserialized.estoque}
 , estoque = {?RECORD.rRequestDeserialized.estoque}
#endif
WHERE ativo = TRUE
AND produto_id = ‘{?RECORD.rRequestDeserialized.id}’
RETURNING *

Exemplo de procedimento:

// Comando SQL usando função do PostgreSQL para deserializar o JSON em uma record
var rRequestDeserialized = LoadRecord(COMANDO_SQL_1) // 1. Carregar Registro
// Atualiza o produto no banco de dados e retorna as informações
var rUpdatedProduct = LoadRecord(COMANDO_SQL_2) // 2. Carregar Registro 
// Converte o 'Registro' para uma variavel texto
set cResponse = JsonSerialize(rUpdateProduct) // 3. Converte para JSON ou XML (serialize)
// Ações de Web API para produção de resposta
Response.Send(200, {VAR.cResponse}) // 200 Indica que processamento esta OK

Excluir

A criação de uma Web API é bem semelhante a criação de um campo no formulário. Siga o passo a passo para iniciar:

  1. Clique com o botão direito na seção Web API’s (exposição) para adicionar
  2. Clique no ícone de um Arquivo com um raio para adicionar um evento na Web API
  3. Clique com o botão direito em Request para adicionar um evento de requisição

Siga as instruções abaixo para configurar sua Web API e o Procedimento vinculado ao evento.

Web API

Nome: Excluir
Método: DELETE

→ Parâmetros

Parâmetro de URL Mapeado em Tipo do valor mapeado Descrição
id INPUT.Produto_id CAMPO Identificador do produto para exclusão

Procedimento

Nome: Excluir_Request
Sequência de comandos:

  1. Executar comando SQL
    • Conteúdo: COMANDO_SQL_1
  2. Produzir resposta
    • Código de Resposta: 200 - OK
    • Tipo de Resposta: application/json
    • Conteúdo da Resposta: null

Legenda:

Etiqueta Igual Valor
COMANDO_SQL_1 UPDATE samples.produtos
SET Ativo = FALSE
WHERE produto_id = ‘{?INPUT.Produto_id}’

Exemplo de procedimento:

// Atualiza o produto indicado para inativa
Run(Languages.SQL, COMANDO_SQL_1)
// Ações de Web API para produção de resposta
Response.Send(200) // 200 Indica que processamento esta OK

Fazendo a primeira chamada

Por fim, vamos testar a API criada. Clique aqui para verificar os exemplos de requisição para teste via Postman.

Para verificar a demonstração acesso o demo Latromi.

Adicionando ao Menu do Latromi

Antes de efetuar a primeira requisição, precisamos adicionar o Formulário no menu do Latromi Web. Siga o passo a passo a seguir no Latromi Client:

  1. Clique em Desenvolvimento.
  2. Clique em Menus.
  3. Adicione um menu chamado WebApi.
  4. Clique com o botão direito no menu WebApi e adicione um Objeto.
  5. Selecione o tipo Web API.
  6. Selecione o formulário que criamos a Web API dos passos anteriores.
  7. Na aba da direita altere o Caminho amigável para URL com o seguinte valor webapi/v1/produtos.

Criando uma chave de integração

É necessário criar uma chave de integração para poder efetuar os exemplos e substituir em apikey no postman, assim como imagem abaixo:

Para qualquer requisição web efetuada no LATROMI, é necessário que haja uma autenticação. Isso não é diferente no caso dos WebHooks. Aqui a autenticação ocorrerá através da Chave de Integração, que deverá ser passada no cabeçalho HTTP X-Latromi-IntegrationKey.

Chave de Integração

Para gerar a “Chave de Integração”, acesse o menu “LATROMI Tools → Segurança → Chaves de Integração” no LATROMI Web.

Ao gerar a chave, habilite a permissão MessageBOT (Recebimento).

Antes de seguir esses passos atualize o pacote essentials do Latromi o seguinte tópico explica o procedimento de atualização:

https://community.latromi.com.br/t/latromi-essentials

Conclusão

:tada: Parabéns! Agora sua primeira Web API está no ar!

Você acaba de concluir e testar com sucesso a sua primeira requisição utilizando o novo recurso de Web API do LATROMI. Esse é um marco importante que eleva o nível técnico dos seus projetos, abrindo as portas do seu sistema para um universo infinito de integrações.

O CRUD que construímos juntos neste tutorial é apenas a ponta do iceberg. Existem inúmeras formas de explorar todo o potencial dessa ferramenta no seu dia a dia de desenvolvimento, como:

  • Automação de processos: Criar endpoints para receber webhooks de serviços externos (Ex.: Mensageria, notificações de pagamentos, etc)
  • Aplicações multiplataformas: Servir dados de forma estruturada e segura para aplicativos mobile

:rocket: Rumo ao futuro! :rocket:

Agora é com vocês! Explorem as possíveis implementações, facilitem processos e melhorem seus sistemas. Achou uma forma legal e diferente de usar o recurso? Compartilhe a sua experiência e inspire outros desenvolvedores da comunidade!

1 curtida