
API pra me servir
Imagine que você está com fome e precisa escolher em qual restaurante consumir. Cada restaurante tem seu próprio cardápio, com vantagens e desvantagens. Em cada página do menu há uma promoção diferente.
Trazendo isso para o mundo do desenvolvimento, cada restaurante seria uma API
. O cardápio representa os endpoints
disponíveis, e cada promoção seria uma rota
específica que você pode pedir
para receber um “combo” de respostas
.
Interfaces facilitam
Uma API é como um balcão de pedidos: você faz uma solicitação e recebe a resposta já pronta, sem precisar se preocupar com o que acontece nos bastidores.
API -> Application Programming Interface (Interface de Programação de Aplicações) — um conjunto de regras que permite que softwares se comuniquem entre si.
Não curto essa definição, na minha mente sempre fica algo abstrato. Por isso, falou em API, já associo a um endereço onde faço pedidos e retornam respostas. Pra exemplificar, usando esse serviço do Méqui
:
Vem ver o código...
// Se eu quiser me servir no Méqui, vou no balcão,
// que é a interface para atendimento ao cliente.
// Falando com a atendente, ela me passa o acesso a API.
const API_DO_MEQUI = "https://ficticio.mequi.com/api/";
// Entre várias opções, escolho uma ROTA pra fazer meu pedido:
// Quero um Big Mac, tenho que ir no caminho dentro da api.
const bigMac = "https://ficticio.mequi.com/api/big-mac";
// Quero um Quarteirão de queijo, tenho que ir no caminho dentro da api.
// Obs: favorito desde sempre. 😋
const quarteirao = "https://ficticio.mequi.com/api/quarteirao";
// Quero só uma batatinha... vou até o caminho dentro da api.
const batatinha = "https://ficticio.mequi.com/api/batata";
Entendendo as definições
Continuando com o exemplo do Méqui
, temos ali várias URLs
com os endereços pra fazer os pedidos. Segmentando cada parte:
Vem ver o código...
// O endereço que sempre se repete é a URL base.
const URL_BASE = "https://ficticio.mequi.com/api/";
// a ROTA é adicionada a URL base.
// https://ficticio.mequi.com/api/big-mac
const bigMac = URL_BASE + "big-mac";
// https://ficticio.mequi.com/api/quarteirao
const quarteirao = URL_BASE + "quarteirao";
// Mesmo exemplo, usando interpolação
// https://ficticio.mequi.com/api/batatinha
const rota = "batatinha";
const batatinha = `${URL_BASE}${rota}`;
Definindo cada termo quando falamos de API:
- API: serviço que permite a comunicação entre sistemas.
- Rota: caminho dentro da API que indica o recurso, ex:
/api/quarteirao
. - Endpoint: uso do método HTTP combinado com a rota, ex:
GET https://ficticio.mequi.com/api/quarteirao
.
Endpoints
Não quero deixar esse post muito técnico. O foco aqui é a abstração. Guarde contigo esse processo:
Toda vez que você como cliente usa um endpoint, você está fazendo um pedido, uma requisição para um servidor. O servidor irá te retornar uma resposta.
Como visto nas definições, o endpoint é a combinação entre o tipo de chamada que posso fazer e uma rota. Essas chamadas usam métodos, conhecidos como verbos HTTP. Em APIs Rest, os verbos mais comuns são: GET
, POST
, PATCH
, PUT
, DELETE
.
Vem ver o código...
// Rota fixa pra facilitar o exemplo.
const API_ROUTE_MEQUI_QUARTEIRAO = "https://ficticio.mequi.com/api/quarteirao";
// GET -> Método simples para consulta de dados.
const data = await callAPI('GET', API_ROUTE_MEQUI_QUARTEIRAO);
// Retorno dos dados com console.log(data) em JSON:
{
"lanche": "Quarteirão com Queijo",
"ingredientes": {
"pao": "2 unidades",
"carne": "1 hambúrguer bovino",
"queijo": "2 fatias",
"molho": "maionese especial",
"batata": "porção média",
"refrigerante": "coca-cola 300ml"
},
"preco": 52.90,
"moeda": "BRL"
}
// POST -> Método que envia dados preenchidos no corpo da requisição.
const pedido = await callAPI('POST', API_ROUTE_MEQUI_QUARTEIRAO,
{
pedido: "Quarteirão",
quantidade: 2
});
// Retorno dos dados com console.log(pedido) em JSON:
{
"status": "sucesso",
"mensagem": "Pedido recebido: 2x Quarteirão",
"pedidoId": "12345AB",
"tempoEstimado": "15 minutos"
}
// PATCH -> Método para atualizar parte dos dados do pedido.
const atualizacao = await callAPI('PATCH', `${API_ROUTE_MEQUI_QUARTEIRAO}/12345AB`,
{
quantidade: 1
});
// Retorno dos dados com console.log(atualizacao) em JSON:
{
"status": "sucesso",
"mensagem": "Quantidade atualizada para 1 no pedido 12345AB"
}
// PUT -> Método para substituir todos os dados do pedido.
const atualizacaoCompleta = await callAPI('PUT', `${API_ROUTE_MEQUI_QUARTEIRAO}/12345AB`,
{
pedido: "Quarteirão Duplo",
quantidade: 3
});
// Retorno dos dados com console.log(atualizacaoCompleta) em JSON:
{
"status": "sucesso",
"mensagem": "Pedido 12345AB atualizado para 3x Quarteirão Duplo"
}
// DELETE -> Método para cancelar/remover o pedido
const exclusao = await callAPI('DELETE', `${API_ROUTE_MEQUI_QUARTEIRAO}/12345AB`);
// Retorno dos dados com console.log(exclusao) em JSON:
{
"status": "sucesso",
"mensagem": "Pedido 12345AB cancelado com sucesso"
}
// Função auxiliar, simulando as chamadas HTTP no exemplo.
async function callAPI(verb, route, body = null) {
const options = { method: verb };
if (body) {
options.body = JSON.stringify(body);
options.headers = { 'Content-Type': 'application/json' };
}
const response = await fetch(route, options);
return response.json();
}
Bom, eu fico por aqui. Espero ter deixado alguns exemplos didáticos, que ajudem na compreensão sobre API’s.
Bons estudos e bons códigos!
Referências
O que são APIs Rest?
Métodos para requisições HTTP
JSON Placeholder - API gratuita para testar
ReqBin - Faça requisições para uma API
JSON Viewer - Extensão para visualizar JSON no Chrome