Category Archives: API

API Canônica

Uma API canônica é uma interface de programação de aplicação (API) projetada para ser a representação oficial, ou “fonte única da verdade”, de um sistema ou domínio. O conceito de canônica refere-se a algo que segue um padrão autorizado ou é a forma mais pura e completa de algo.

No contexto de APIs, isso significa que a API canônica é a interface principal, geralmente abstrata e agnóstica à tecnologia, que expõe o modelo de domínio de maneira consistente e clara para consumo por diferentes partes do sistema ou por sistemas externos.

Características principais de uma API canônica:

  1. Consistência:
    Uma API canônica garante que diferentes consumidores (módulos internos, sistemas externos, etc.) acessem as mesmas regras e dados de forma consistente, sem variações ou duplicações em diferentes partes do sistema.
  2. Independência de implementação:
    Ela é projetada para ser neutra em relação a detalhes de implementação. Ou seja, ela descreve a interação com o sistema de maneira lógica e orientada ao domínio, sem expor detalhes técnicos ou internos, como infraestruturas ou frameworks específicos.
  3. Modelagem orientada ao domínio (DDD):
    APIs canônicas geralmente são construídas com base em modelos de domínio bem definidos, conforme os princípios de Domain-Driven Design. Cada endpoint ou operação exposta pela API reflete as operações de negócio reais, em vez de operações puramente técnicas.
  4. Contrato Estável:
    A API canônica geralmente apresenta um contrato estável e bem-definido, o que significa que ela pode evoluir sem quebrar a compatibilidade com os consumidores existentes. Isso permite atualizações e mudanças no sistema subjacente sem afetar diretamente os clientes que consomem essa API.
  5. Facilidade de integração:
    APIs canônicas padronizam a interface entre sistemas, facilitando a integração de novos componentes ou serviços. A interoperabilidade é simplificada, pois a API segue uma estrutura que pode ser consumida por diferentes tipos de clientes, como front-ends, back-ends ou terceiros.
  6. Unificação dos dados e regras de negócio:
    A API canônica centraliza e unifica o acesso aos dados e às regras de negócio, o que evita redundâncias e inconsistências. Isso garante que todos os consumidores obtenham a mesma visão e apliquem as mesmas regras de maneira padronizada.

Exemplo prático:

Em um sistema de e-commerce com um domínio que inclui clientes, pedidos e produtos, uma API canônica exporia operações que permitem a criação de pedidos, consulta de produtos, gerenciamento de clientes, etc., de forma que todos os serviços relacionados interajam com esses dados e regras de uma maneira consistente.

  • Operações do domínio:
    • Criar um pedido (/orders/create)
    • Consultar um produto (/products/{id})
    • Gerenciar clientes (/customers/{id}/update)

Benefícios de usar uma API canônica:

  • Reduz complexidade e duplicidade: Uma API canônica elimina a necessidade de várias APIs especializadas ou duplicadas para diferentes sistemas, centralizando as operações.
  • Facilita manutenção e evolução: Com um contrato estável e bem definido, a API pode ser evoluída sem grandes impactos para os consumidores.
  • Melhor modelagem de negócio: Reflete com precisão os processos de negócio e o modelo de domínio, melhorando a clareza e a robustez do sistema.

Essencialmente, a API canônica é um ponto de acesso estruturado e padronizado para todo o domínio de um sistema, garantindo consistência e governança.

Benefícios do API Gateway

Aqui, pretendo levantar os benefícios na utilização de um API Gateway.

Benefícios

  • Evita expor a API para cada micro-serviço
  • Não havendo exposição da API consumidora, reduzindo a superfície de ataque potencial
  • Abstração dos micro-serviços, tanto na parte de endpoints quanto payload
  • Atua como Load Balancer
  • Pode gerenciar Black List e White List
  • Atua na Autenticação e Autorização de APIs
  • Permite a transformação de formatos, manipulação de estruturas e validações de campos
  • Pode compor dados, integrando várias APIs (veja o pattern API Composition)
  • Pode atuar como BFF – Backend For Frontend, simplificando o payload e reduzindo tráfego
  • Permite controle de requisições como Rate Limit
  • Mitiga riscos de OWASP
  • Permite controle de chamadas, gerando relatórios, importantes para monetização da API
  • Monitora e faz tracing das chamadas
Multiples endpoints
API Composition
The Role of API Microgatway in Microservices
API Microgateway Concept
API Microgateway DevOps Cycle
API Microgateway DevOps Cycle

Image API

Este post demonstra o conceito da API de tratamento de imagem, publicada no Github.

Introdução

Este projeto foi desenvolvido utilizando Spring Boot, Swagger e REST.

Spring Boot

Spring Boot é um projeto da Spring que veio para facilitar o processo de configuração e publicação de nossas aplicações. Você escolhe os módulos que deseja através dos starters que inclui no pom.xml do seu projeto. Eles, basicamente, são dependências que agrupam outras dependências.

Swagger

O Swagger é um dos frameworks mais usados para se documentar API’s REST. Ele facilita para que os clientes que consomem nossas API’s saibam quais os parâmetros nossas operações recebem, qual o retorno, o modelo, o media type retornado JSON, XML, CSV, binário etc. Sendo assim os clientes não precisam necessariamente discutir com a equipe de desenvolvimento da APIsobre como usá-la.

REST

REST é acrônimo de Representational State Transfer, e tem como objetivo primário a definição de características fundamentais para a construção de aplicações Web seguindo boas práticas.

Veja o post sobre boas práticas REST (http://whs.com.br/dicas/rest-boas-praticas)

Github

https://github.com/lfchaim/image-api

Swagger UI

Para visualizar o Swagger da aplicação, devemos iniciar através da classe ImageApiApplication.

Depois de iniciar, pode-se acessar através do endereço:

http://localhost:8080/swagger-ui.html

Postman

O Postman é uma ferramenta que tem como objetivo testar serviços RESTful (Web APIs) por meio do envio de requisições HTTP e da análise do seu retorno. Com ele é possível consumir facilmente serviços locais e na internet, enviando dados e efetuando testes sobre as respostas das requisições.

Instale o Postman e importe o Collection para efetuar os testes. O download pode ser feito aqui.

https://github.com/lfchaim/image-api/blob/master/postman/ImageAPI.postman_collection.json