22 de junho, 2022
  • By t-viana
  • / PDI

Fazer conexão via API, pode ser uma dor de cabeça para alguns, principalmente quando a API é paginada… mas quando é uma API dinâmica, como faz? Calma, vou tentar te ajudar!

Neste artigo, vou te apresentar uma solução para conexão API, na qual a URL é dinâmica, ou seja, o detalhamento dos clientes vem de acordo com o seu ID e este ID deve ser passado na própria url da API.

Exemplo: https://services.contaazul.com/contaazul-bff/person-registration/v1/persons/12345678-aa12-1a2b-3a4c-1bc123456789/resume

O ponto aqui é que esse código (em negrito, no exemplo) muda e para requisitar o detalhamento do cliente, temos que utilizar o corresponde a cada cliente.

Vejamos a solução.

Transformação 1
Transformação 1

Transformação 1 – Utilizada para recuperar os códigos (uuid) que serão usados na url dinâmica.

1 – Utilizaremos o step “Table input” para pegar o código UUID de cada cliente, da tabela dCliente;

2 – O step “Sort rows” é usado para ordenar esses códigos;

3 – O “Unique rows” é usado para remover os códigos duplicados e evitar duplicidade;

4 – Para encerrar, o “Copy rows to result” vai gerar a relação de códigos distintos e será usado na sequência da trilha.

 

Transformação 2 – Faz a extração dos dados e salva no banco de dados

Esses são os steps que usaremos nesta nova trilha:

  1. Get rows from result – Pega a relação dos códigos uuid distintos (criada na transformação 1, no step “Copy rows to result”);
  2. Modified JavaScript value – Cria a url dinâmica (poderia usar o Concat Fields também);
    1. O script ficou assim: var link = ‘https://services.contaazul.com/contaazul-bff/person-registration/v1/persons/’ + uuid + ‘/resume’

      Step usado para concatenar os dados e criar a URL dinâmica
  3. Generate rows– Passa os parâmetros necessários para a conexão com a API;
  4. Join Rows – Join entre os steps 2 e 3;
  5. HTTP Client – Usado para a chamada e na aba de Fields, passa os Headers, quem vem no Generate rows;
  6. Select values –Usei apenas para organizar o resultado da etapa anterior e levar para a seguinte;
  7. Json input – Traz as informações necessárias, passando as “colunas” em Field;
    1. As “colunas” podem ser conhecidas através da consulta no Postman, por exemplo, ou na própria documentação da API.
    2. Usei duas vezes, devido a hierarquia da api
  8. Select values – Reorganiza as colunas;
  9. Table output – Salva no banco de dados.
    1. Deixei a opção de truncate desmarcada.
      1. Para evitar duplicação em cargas futuras, vamos usar a carga incremental (tema do meu próximo artigo).
A trilha final fica assim

Quase pronto! Você já tem a relação de códigos distintos e já fez a conexão com a API, mas como fazer com que o PDI carregue cada linha do código (uuid) e você salve o detalhamento no banco de dados? Resposta: faz um job!

Exemplo do Job a ser usado

O segredo todo está na transformação de “Detalhamento”, na qual você deve marcar o “Execute Every input row”, após clicar em editar, e será sucesso.

Atenção pois, a depender da quantidade de registros, pode dar problema com a memória alocada para o PDI, o que pode ser ajustado e até mesmo, fazer esta etapa por recorte temporal, por meses ou o critério que você definir nesta carga full e usar a incremental, para passar na Transformação 1 apenas os códigos novos da dCliente, por exemplo.

Espero ter ajudado e até a próxima.

Thiago Viana.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Translate »