O que é uma API
API (Application Programming Interface) é um conjunto de regras e protocolos que permite
a comunicação e troca de dados entre diferentes sistemas de softwares, como aplicativos,
servidores ou serviços na nuvem. Atua como ponte invisível ajudando na integração de
sistemas, sem que tenhamos que conhecer detalhes internos uns dos outros.
Como funciona
A API atua como um “garçom” entre o cliente e o servidor.
O cliente (geralmente um computador ou aplicativo) envia uma requisição à API.
A API verifica se as regras estão sendo obedecidas e, em seguida, o servidor busca ou
manipula as informações solicitadas.
Essas requisições utilizam o protocolo HTTP ou HTTPS, que é o responsável por
“transportar” os dados entre cliente e servidor.
Os principais tipos de requisição são:
● GET: obter (pegar) dados;
● POST: adicionar novos dados;
● PUT: atualizar dados existentes;
● DELETE: apagar dados.
Após processar a requisição, o servidor envia uma resposta, geralmente no formato JSON,
que o cliente consegue interpretar e utilizar.
O que é uma requisição HTTP
HTTP - HyperText Transfer Protocol: protocolo que define como as informações são
trocadas na internet. É o meio de transporte, protocolo que leva o pedido e trás a resposta.
Protocolo significa um conjunto de regras que define como enviar um pedido (requisição) e
como receber uma resposta.
Uma requisição HTTP é um pedido que um cliente faz a um servidor, para acessar ou enviar
algum tipo de informação na web.
Estrutura de uma requisição HTTP
Três principais partes:
1. Linha de requisição
a. Método HTTP (Get, Post, etc.)
b. URL (endereço do recurso
c. Versão do protocolo
Exemplo: GET /produtos HTTP/1.1
2. Cabeçalhos (headers)
a. São informações extras sobre o pedido;
b. Servem para dizer coisas como: que tipo de conteúdo está sendo enviado
(JSON, texto, imagem, etc.), quem está fazendo a requisição (token de
autenticação), o idioma, cachê, coockoes, etc.
Exemplo: Host: [Link]
Content-Type: application/json
Authorization: Bearer 123abc
3. Corpo (body
a. Nem toda requisição tem corpo, mas quando tem, é aqui que vem os dados
Exemplo num post para criar usuário: JSON
"nome": "Letícia",
"email": "leticia@[Link]"
4. Métodos HTTP - Representam CRUD
a. GET - buscar dados. Ex: GET/usuarios
b. POST - criar novo recurso. Ex: POST/usuarios
c. PUT - atualizar recurso inteiro. Ex: PUT/usuarios/1
d. PATCH - atualizar parte de um recurso. Ex: PATCH/usuarios/1
e. DELETE - apagar recurso. Ex: DELETE/usuarios/1
5. Estrutura da resposta HTTP
a. Toda requisição recebe uma resposta com: código do status, cabeçalhos,
corpo (com dados).
Exemplo: HTTP/1.1 200 OK
Content-Type: application/json
"id": 1,
"nome": "Letícia"
Exemplo completo (Requisição + Resposta)
Requisição Cliente -> Servidor
POST /api/usuarios HTTP/1.1
Host: [Link]
Content-Type: application/json
"nome": "Letícia",
"email": "leticia@[Link]"
Resposta Servidor -> Cliente
HTTP/1.1 201 Created
Content-Type: application/json
"id": 1,
"nome": "Letícia",
"email": "leticia@[Link]"
}
HTTP - os dados vão “abertos
HTTPS - os dados são criptografados com SSL/TLS
Como uma API usa isso ?
Em APIs, as requisições HTTP são a base da comunicação entre sistemas.
Exemplo no flutter com pacote http:
import 'package:http/[Link]' as http;
void enviarDados() async {
var url = [Link]('[Link]
var resposta = await [Link](
url,
headers: {'Content-Type': 'application/json'},
body: '{"nome": "Letícia"}',
);
print([Link]); // Ex: 201
print([Link]); // Dados retornados
Conceito O que é
HTTP Protocolo que define como cliente e
servidor trocam dados
Requisição Pedido do cliente (com método,
cabeçalhos e corpo)
Resposta Retorno do servidor (com status e dados)
Método Tipo de ação (GET, POST, PUT,
DELETE…)
Status Code Mostra se deu certo ou erro
HTTPS Versão segura do HTTP
O que é um endpoint
É o endereço final (rota) de uma API, onde uma ação específica pode ser feita. É um “ponto
de entrada” (literalmente end point) de comunicação entre o cliente e servidor.
Endpoint = caminho (URL) + Método HTTP, serve para criar, atualizar ou apagar dados em
um servidor.
Exemplo:
API: [Link]
Esse é o caminho principal da API, mas ele sozinho não faz nada, precisamos de endpoints
para dizer o que quer acessar. Exemplo:
GET [Link] → lista todos os usuários
POST [Link] → cria um novo usuário
GET [Link] → pega o usuário com ID 1
PUT [Link] → atualiza o usuário com ID 1
DELETE [Link] → apaga o usuário com ID 1
Cada um desses caminhos (/users, /users/1, etc.) é um endpoint diferente.
Estrutura de um endpoint: é formado por partes
● Https:// - Protocolo (segurança e cominicacao)
● [Link] - domínio do servidor (onde a API está hospedada)
● /users - Recurso principal (entidade ou coleção)
● /1 - ID do recurso específico (ID do usuário)
Em APIs RESTful, os endpoints representam recursos, e os métodos HTTP (GET, POST,
PUT, DELETE) indicam o que fazer com esses recursos.
Então:
● O endpoint diz “onde” agir
● O método HTTP diz “o que” fazer
O que são parâmetros em uma requisição
Parâmetros são valores extras enviados na URL (ou corpo da requisição) para especificar,
filtrar ou personalizar a resposta do servidor. Eles servem para dar mais contexto à
requisição, tipo “quero o usuário 5” ou “quero só os usuários ativos”.
Exemplo: [Link]
Aqui temos dois tipos de parâmetros diferentes:
1. /5 → Path Parameter
2. ?active=true → Query Parameter
PATH PARAMETERS (parâmetro de caminho): são usados dentro do caminho (rota) da
URL, para identificar um recurso específico. Fazem parte do endpoint. Exemplo:
GET [Link]
● /users → o recurso (coleção de usuários)
● /5 → o parâmetro de caminho, identificando o usuário com ID 5
QUERY PARAMETERS (parâmetro de consulta): são usados depois do ponto de
interrogação na URL. Servem para filtrar, ordenar, limitar ou buscar informações. Não fazem
parte da rota, mas modificam o resultado. Exemplo:
GET [Link]
Isso pede todos usuários ativos.
Outro exemplo:
GET /users?age=25&gender=female&sort=name
● age=25 → filtra por idade
● gender=female → filtra por gênero
● sort=name → ordena por nome
Estrutura do QUERY PARAMETERS
?chave=valor&chave=valor
● Começa com ?
● Cada parâmetro é separado por &
● Cada item tem chave=valor
Body (corpo da requisição)
É a parte da requisição HTTP que carrega dados que o cliente quer enviar ao servidor. É
como o conteúdo da mensagem, o que realmente queremos mandar.
● O endpoint diz para onde vai o pedido;
● O método (GET, POST, etc.) diz o que fazer;
● O body diz com quais dados fazer isso
Exemplo, uma API que cria novos usuários:
O endpoint: POST [Link]
O body pode conter os dados do novo usuário:
JSON {
"nome": "Letícia",
"email": "leticia@[Link]",
"senha": "123456"
Esse bloco JSON é o corpo da requisição. Ele é enviado dentro do pedido para o servidor
criar um novo usuário com essas informações.
GET e DELETE normalmente não enviam body, pois não precisam mandar dados, só
pedem ou removem algo.
Tipos de body (corpo da requisição):
1. JSON (application/json)
● Formato mais comum em APIs modernas
● Estrutura de chave-valor ({"nome": "Letícia", "idade": 25})
● Usado em POST, PUT, PATCH
2. Formulário (x-www-form-urlencoded)
● Semelhante a dados de formulário HTML
● Estrutura: nome=Letícia&idade=25
● Simples, mas limitado para arquivos
3. Multipart/form-data
● Para enviar arquivos + dados
● Cada parte é separada, permitindo imagens, PDFs etc.
4. Texto puro (text/plain)
● Envia dados simples, brutos, sem formatação
● Exemplo: "Olá servidor!"
Headers (Cabeçalho da requisição)
São informações adicionais que enviamos junto com a requisição (ou resposta) para dar
contexto sobre a requisição ou instruções ao servidor. Eles não fazem parte do body, mas
dizem ao servidor como interpretar os dados, quem está pedindo e qual formato específico.
Exemplos comuns de headers:
● Content-Type → tipo do body (ex.: application/json)
● Authorization → credenciais (ex.: Bearer <token>)
● Accept → formato de resposta esperado (ex.: application/json)
● User-Agent → identifica o cliente (ex.: Mozilla/5.0)
● Cache-Control → instruções de cache (ex.: no-cache)
● Custom Header → informação adicional (ex.: X-Client-Version: 1.2.3)
Formato: chave: valor
O que é JSON, como ler e montar
É um formato de dados leve usado para trocar informações entre cliente e servidor. É texto
fácil de ler e escrever e segue a estrutura de objetos e arrays. Exemplo:
"nome": "Letícia",
"idade": 25,
"ativo": true
Estrutura JSON:
1. Objetos: representados por {}, contém pares chave:valor.
a. {
"chave": "valor",
"outraChave": 123
2. Arrays: representados por [], contém listas de valores ou objetos. Exemplo:
a. [
"maçã",
"banana",
"laranja"
Tipos de valor:
● String → texto, entre aspas "Letícia"
● Number → números 25
● Boolean → true / false
● Null → ausência de valor null
● Array → lista [1, 2, 3]
● Object → objeto { "id": 1, "nome": "Letícia" }
Como ler JSON:
1. Procure { } -> é um objeto
2. Procure [ ] -> é um array
3. Separe os pares chave:valor. Exemplo:
a. {
"nome": "Letícia",
"hobbies": ["academia", "programar"]
Objeto principal: { ... }
Chave "nome" → valor "Letícia"
Chave "hobbies" → valor é um array ["academia", "programar"]
Como montar JSON:
1. Comece com {} para objeto ou [] para array;
2. Insira pares chave:valor separados por vírgula;
3. Use aspas duplas para strings e chaves;
4. Não deixar vírgula no final, após o último item.
Exemplo:
"nome": "Letícia",
"email": "leticia@[Link]",
"idade": 25,
"ativo": true,
"hobbies": ["academia", "programar"]
JSON é case-sensitive → "Nome" ≠ "nome". Sempre use aspas duplas para chaves e
strings
Status CODE HTTP
É o código numérico enviado pelo servidor para informar o resultado da requisição. Diz se
deu certo ou se houve erros e precisa de mais ação. Sempre vem na resposta API.
● 200 → Requisição bem-sucedida
● 201 → Recurso criado com sucesso
● 400 → Requisição inválida (erro do cliente)
● 401 → Não autorizado (falta autenticação)
● 404 → Recurso não encontrado
● 500 → Erro interno do servidor
Como lembrar:
● 2xx → Tudo certo
● 4xx → Problema do cliente
● 5xx → Problema do servidor