APIs e Contratos
Uma visão geral de como APIs de backend são projetadas, estruturadas e mantidas por meio de contratos claros.
O que uma API realmente é
Uma API (Application Programming Interface) é a interface por meio da qual clientes se comunicam com sistemas de backend e acessam funcionalidades do sistema.
- APIs expõem funcionalidades do sistema para que clientes externos possam interagir com um backend.
- Clientes como apps web, apps mobile ou outros serviços enviam requisições para APIs.
- APIs definem a estrutura das requisições e o formato das respostas retornadas pelo servidor.
Detalhes
Em sistemas de software modernos, os aplicativos raramente interagem diretamente com a lógica de backend. Em vez disso, eles se comunicam por meio de APIs, que atuam como pontos de entrada controlados no sistema.
Um cliente — como um navegador, um aplicativo mobile ou outro serviço de backend — envia uma requisição para um endpoint específico da API. A API recebe essa requisição, interpreta as informações que ela contém e as encaminha para a lógica de backend apropriada. Em seguida, o backend executa o trabalho necessário, como recuperar dados de um banco de dados ou executar regras da aplicação, antes de retornar uma resposta ao cliente.
Essa comunicação estruturada permite que os sistemas permaneçam modulares. Aplicações frontend, apps mobile e serviços externos podem interagir com a mesma funcionalidade de backend, desde que sigam o formato de requisição e resposta definido pela API.
Como as APIs definem como as requisições devem ser estruturadas e como as respostas serão, elas criam uma interface previsível entre diferentes partes de um sistema. Essa interface permite que componentes desenvolvidos de forma independente se comuniquem de maneira confiável, sem precisar saber como funciona a implementação interna do backend.
Métodos HTTP
Os métodos HTTP definem o tipo de operação que um cliente deseja realizar ao interagir com um endpoint de API.
- Os métodos HTTP comunicam a ação pretendida de uma requisição.
- Métodos diferentes correspondem a operações diferentes em recursos.
- APIs usam métodos HTTP junto com endpoints para definir o comportamento do sistema.
Detalhes
Quando um cliente envia uma requisição para um endpoint de API, ele precisa especificar que tipo de operação deseja realizar. Essa operação é expressa usando um método HTTP.
O método HTTP funciona junto com a URL do endpoint para definir o significado da requisição.
Por exemplo, uma requisição como GET /users pede ao servidor para recuperar os dados do usuário. Uma requisição como POST /users pede ao servidor para criar um novo usuário. Uma requisição como DELETE /users/42 instrui o backend a remover um usuário específico.
Vários métodos HTTP são comumente usados em APIs.
GET recupera dados existentes do servidor.
POST cria novos recursos.
PUT substitui um recurso existente por novos dados.
PATCH atualiza parte de um recurso existente.
DELETE remove um recurso do sistema.
Ao combinar endpoints com métodos HTTP, as APIs definem claramente as operações que os clientes têm permissão para realizar nos recursos do sistema.
REST e APIs Baseadas em Recursos
REST (Representational State Transfer) é uma abordagem comum de design de API em que os sistemas expõem recursos em vez de ações.
- APIs REST organizam endpoints em torno de recursos como usuários, pedidos ou produtos.
- As operações são definidas usando métodos HTTP em vez de URLs baseadas em ações.
- O design baseado em recursos leva a APIs mais consistentes e previsíveis.
Detalhes
No design de API, uma abordagem é estruturar endpoints em torno de ações, em que cada URL descreve o que o sistema deve fazer. Por exemplo, um endpoint como POST /createUser codifica diretamente a ação na URL.
Essa abordagem funciona para sistemas pequenos, mas se torna difícil de manter à medida que o número de funcionalidades cresce. Os endpoints ficam inconsistentes, e fica mais difícil prever como novas funcionalidades serão expostas.
REST adota uma abordagem diferente ao organizar APIs em torno de recursos como usuários, pedidos ou produtos. Em vez de codificar ações na URL, o endpoint representa o recurso, e o método HTTP define a operação.
Por exemplo, POST /users cria um novo usuário, enquanto GET /users recupera usuários. Essa separação leva a um padrão consistente em toda a API.
Por causa dessa estrutura, APIs RESTful são mais fáceis de entender, escalar e विस्तार. Os desenvolvedores podem interagir com novos endpoints com mais facilidade, já que eles seguem o mesmo design previsível.
Princípios REST
APIs REST seguem um conjunto de princípios que tornam os sistemas previsíveis, escaláveis e mais fáceis de manter.
- As requisições são stateless, o que significa que cada requisição contém todas as informações necessárias.
- Os recursos são identificados usando URLs consistentes e estruturadas.
- Os métodos HTTP são usados corretamente para representar operações.
- As APIs seguem um design de interface uniforme e previsível.
Detalhes
REST é construído com base em um conjunto de princípios de design que ajudam as APIs a permanecerem consistentes e confiáveis à medida que os sistemas crescem.
Um princípio importante é a comunicação stateless. Cada requisição deve conter todas as informações necessárias para que o servidor a processe. O servidor não depende de requisições anteriores, o que torna o sistema mais fácil de escalar e distribuir.
Outro princípio é o design baseado em recursos. As APIs representam entidades como usuários ou pedidos como recursos, e esses recursos são identificados usando URLs como /users ou /orders.
REST também depende da semântica padrão do HTTP. Métodos HTTP como GET, POST, PUT, PATCH e DELETE são usados para expressar claramente a operação que está sendo realizada em um recurso.
Por fim, REST impõe uma interface uniforme. Os endpoints seguem padrões consistentes, tornando as APIs mais fáceis de entender e reduzindo a confusão ao interagir com diferentes partes de um sistema.
Códigos de Status
Os códigos de status HTTP permitem que os servidores comuniquem o resultado de uma solicitação de forma padronizada e previsível.
- Os códigos de status indicam se uma solicitação foi bem-sucedida, falhou devido à entrada do cliente ou falhou por problemas no servidor.
- Eles são agrupados em categorias com base no primeiro dígito.
- Os clientes dependem dos códigos de status para decidir como tratar as respostas.
Detalhes
Quando um servidor processa uma solicitação, ele deve comunicar o resultado de volta ao cliente. Os códigos de status HTTP fornecem uma forma padronizada de descrever esse resultado.
Os códigos de status são agrupados em categorias. Códigos na faixa 2xx indicam sucesso, o que significa que a solicitação foi processada corretamente. Códigos na faixa 4xx indicam erros do cliente, como entrada inválida ou recursos ausentes. Códigos na faixa 5xx indicam erros do servidor, o que significa que algo deu errado no backend.
Exemplos comuns incluem 200 OK, que indica uma solicitação bem-sucedida, e 201 Created, que confirma que um novo recurso foi criado. Erros como 400 Bad Request indicam entrada inválida, enquanto 401 Unauthorized sinaliza autenticação ausente ou inválida. Uma resposta 404 Not Found significa que o recurso solicitado não existe, e 500 Internal Server Error indica uma falha no servidor.
Os clientes usam esses códigos de status para determinar como prosseguir. Por exemplo, um cliente pode tentar novamente uma solicitação após um erro do servidor ou pedir ao usuário que corrija a entrada após um erro do cliente.
Idempotência
Uma operação é idempotente se repetir a mesma requisição produz o mesmo resultado sem causar efeitos colaterais adicionais.
- Operações idempotentes podem ser repetidas com segurança sem alterar o resultado.
- PUT e DELETE geralmente são idempotentes, enquanto POST normalmente não é.
- A idempotência é crítica para lidar com retries e falhas de rede.
Detalhes
Em sistemas distribuídos, requisições podem falhar, expirar ou ser repetidas várias vezes. Por isso, os sistemas de backend devem ser projetados para lidar com requisições repetidas com segurança.
Uma operação é considerada idempotente se enviar a mesma requisição várias vezes resultar no mesmo estado final. Por exemplo, chamar DELETE /users/10 uma vez remove o usuário. Chamá-la novamente não altera mais nada, porque o usuário já foi excluído.
Da mesma forma, PUT /users/10 substitui o recurso pelos mesmos dados a cada vez, então repetir a requisição não cria efeitos colaterais adicionais.
Em contraste, POST /orders normalmente não é idempotente porque cada requisição cria um novo pedido. Repetir a mesma requisição pode resultar em recursos duplicados.
A idempotência é importante porque os sistemas frequentemente tentam reenviar requisições automaticamente quando ocorrem falhas. Sem idempotência, as tentativas de repetição poderiam levar a dados inconsistentes, operações duplicadas ou efeitos colaterais indesejados.
Versionamento de API
O versionamento de API permite que sistemas de backend evoluam sem quebrar clientes existentes, mantendo múltiplas versões de uma API.
- Alterações em APIs podem quebrar clientes que dependem de comportamentos antigos.
- O versionamento permite que várias versões da API coexistam com segurança.
- Os clientes podem escolher com qual versão da API interagir.
Detalhes
À medida que os sistemas de backend evoluem, as APIs ხშირად precisam mudar. Novos recursos podem ser adicionados, formatos de dados podem ser atualizados ou o comportamento existente pode ser modificado.
O problema é que clientes como aplicativos web, aplicativos móveis ou integrações de terceiros dependem do comportamento existente da API. Se a API mudar sem aviso, esses clientes podem quebrar.
O versionamento de API resolve isso permitindo que várias versões de uma API existam ao mesmo tempo. Clientes antigos podem continuar usando a versão original, enquanto clientes mais novos podem adotar versões atualizadas.
Uma abordagem comum é o versionamento por URL, em que a versão é incluída no caminho, como /v1/users e /v2/users. Outra abordagem é o versionamento por header, em que o cliente especifica a versão usando um header como Accept: application/vnd.api.v2.
Ao versionar APIs, os sistemas de backend podem evoluir com segurança enquanto mantêm compatibilidade com os clientes existentes.
O Contrato da API
Um contrato de API define como clientes e sistemas de backend se comunicam, garantindo que requisições e respostas sigam uma estrutura previsível e confiável.
📍 Endpoint
O ponto de entrada definido no contrato.
- O contrato define os endpoints disponíveis e como eles são acessados.
- Ele especifica a estrutura das requisições e respostas.
- Os códigos de status e as expectativas de comportamento são claramente definidos.
Detalhes
Um contrato de API funciona como um acordo entre o cliente e o sistema de backend. Ele define exatamente como a comunicação deve acontecer para que ambos os lados possam interagir sem ambiguidades.
Quando um cliente envia uma requisição HTTP, ele deve seguir o contrato usando o endpoint correto, fornecendo o formato de dados esperado e incluindo todas as informações necessárias. O sistema de backend processa a requisição com base nessas regras e retorna uma resposta HTTP estruturada.
O contrato define vários aspectos críticos da API, incluindo os endpoints disponíveis, o formato dos dados da requisição, a estrutura das respostas, o significado dos códigos de status e o comportamento esperado de cada operação.
Por causa desse contrato, os clientes não precisam entender como o backend é implementado internamente. Desde que sigam a interface definida, a comunicação permanece consistente e confiável.
Na prática, os contratos de API são essenciais para a colaboração entre equipes de frontend e backend, assim como para integrações entre sistemas independentes.
Seção de Perguntas
1 / 5
Esta lição faz parte do conteúdo premium
Faça upgrade para o plano premium para remover o desfoque e liberar a leitura completa.