Lógica de consulta de CEP via API
A API
Neste exemplo, usamos a API da ViaCEP. Para mais informações sobre a API, acesse a documentação no site viacep.com.br.
Tubes usados
Os principais tubes usados nesta lógica são: o APIGet e o cache. O tube APIGet é usado para fazer a requisição dos dados via API, enquanto o tube cache é usado para armazenar as informações recebidas do APIGet no cache do documento e, assim, evitar que haja novas requisições toda vez que o template é executado. Você pode obter mais informações sobre os tubes usados na documentação de cada tube.
Declarações
list[Uf]
: É uma lista associativa dos Estados, cujas chaves são o nome do Estado, a sigla e respectiva preposição. O retorno da API de CEP é apenas a sigla do Estado. Com a lista associativa, podemos acessar também o nome completo e a preposição.struct[STR_Endereco]
: É a estrutura de endereço. Contém os fields:[inputCEP]
: recebe o input do usuário no formato XXXXX-XXX, que é formatado e atribuído ao field[cepSemTracos]
.[cepSemTracos]
: recebe o CEP no formato XXXXXXXX. Antes de realizar a atribuição, usamos o tube isNotEmpty para verificar se o usuário já preencheu o field[inputCEP]
e evitar a execução do tube sem valores preenchidos. Utilizamos o tube replace para substituir o traço por uma string vazia. Além disso, usamos o field[cepSemTracos]
no endpoint do APIGet e como key no<cepCacheConfig>
.[strInfoAPI]
: estrutura que contém os fields retornados pela API de CEP. Nela temos o field[listaUF]
. Note que o retorno da API (sigla do Estado) será contido na variável[uf]
e, em seguida, utilizaremos uma sequência deifs
no loaders para atribuir corretamente o valor da lista[listaUF]
para que possamos utilizar as respectivas informações relacionadas ao Estado (nome por extenso e preposições) ao longo do template.
Note também que o field que recebe o input do usuário está fora da estrutura principal. É preciso separar o field que recebe o input do usuário da estrutura que recebe as informações da API e é usada no tube cache. Caso contrário, o cache não irá atualizar as informações caso haja alguma alteração no [inputCEP]
.
+<strPrincipal> : Struct
: Essa estrutura foi declarada apenas para simularmos a situação mais corriqueira, que é a estrutura de endereço dentro de outra estrutura de qualificação, por exemplo.
<cepCacheConfig>
: Essa estrutura é usada para configurar o tube cache. Para mais informações, acesse a documentação do tube.
Lógica
Começamos analisando se há alteração no field [inputCEP]
com o tube hasChanged. Isso é necessário para que toda vez que haja alterações no field a lógica seja executada novamente, o mesmo ocorre na primeira vez que o campo é preenchido.
O tube clear limpa todas as informações da [strInfoAPI]
para que seja possível armazenar novas informações quando houver alterações.
Dentro da estrutura de cache, o field [key]
corresponderá ao field [cepSemTracos]
. O CEP é usado como key para que a individualização de informações ocorra com o número de CEP.
Finalizamos com o uso do tube cache. Como a origem dos dados é o retorno do tube APIGet, usamos o APIGet dentro do parâmetro dataOrigin do tube cache.