O Que É Uma API REST

API REST (Representational State Transfer) é um padrão de arquitetura para comunicação entre sistemas via HTTP. Em termos simples, é a forma como diferentes softwares conversam entre si pela internet.

Quando você usa um app de banco no celular e vê seu saldo, o app está fazendo uma chamada a uma API REST do banco. Quando o Instagram carrega seu feed, está consumindo APIs. Quando uma loja online processa um pagamento, está se comunicando com APIs de gateways como Stripe ou Pagar.me.

APIs REST são a espinha dorsal da internet moderna. Segundo a ProgrammableWeb, existem mais de 24.000 APIs públicas disponíveis, e praticamente toda empresa de tecnologia expõe seus serviços via API.

Para programadores, dominar APIs é uma habilidade essencial que abre portas tanto para emprego quanto para freelancing e criação de produtos próprios.

Conceitos Fundamentais

Recursos e Endpoints

Em uma API REST, tudo é um recurso — um usuário, um produto, um pedido. Cada recurso é acessível através de um endpoint (URL):

```

GET /api/usuarios → Lista todos os usuários

GET /api/usuarios/42 → Retorna o usuário com ID 42

POST /api/usuarios → Cria um novo usuário

PUT /api/usuarios/42 → Atualiza o usuário 42

DELETE /api/usuarios/42 → Remove o usuário 42

```

Métodos HTTP

MétodoAçãoIdempotenteCorpo da Requisição
GETLer/buscar dadosSimNão
POSTCriar recursoNãoSim
PUTAtualizar recurso (completo)SimSim
PATCHAtualizar recurso (parcial)SimSim
DELETERemover recursoSimNão

Status Codes

Os códigos de status HTTP indicam o resultado da operação:

CódigoSignificadoQuando Usar
200OKRequisição bem-sucedida
201CreatedRecurso criado com sucesso
204No ContentSucesso sem corpo de resposta
400Bad RequestDados inválidos enviados
401UnauthorizedNão autenticado
403ForbiddenSem permissão
404Not FoundRecurso não encontrado
422Unprocessable EntityValidação falhou
500Internal Server ErrorErro no servidor

Criando Sua Primeira API com Node.js (Express)

Vamos construir uma API simples para gerenciar tarefas. Primeiro, configure o projeto:

```bash

mkdir minha-api && cd minha-api

npm init -y

npm install express

```

Agora crie o arquivo `server.js`:

```javascript

const express = require('express');

const app = express();

app.use(express.json());

let tarefas = [

{ id: 1, titulo: 'Aprender API REST', concluida: false },

{ id: 2, titulo: 'Criar primeiro projeto', concluida: false }

];

// GET - Listar todas as tarefas

app.get('/api/tarefas', (req, res) => {

res.json(tarefas);

});

// GET - Buscar tarefa por ID

app.get('/api/tarefas/:id', (req, res) => {

const tarefa = tarefas.find(t => t.id === parseInt(req.params.id));

if (!tarefa) return res.status(404).json({ erro: 'Tarefa não encontrada' });

res.json(tarefa);

});

// POST - Criar nova tarefa

app.post('/api/tarefas', (req, res) => {

const { titulo } = req.body;

if (!titulo) return res.status(400).json({ erro: 'Título é obrigatório' });

const novaTarefa = {

id: tarefas.length + 1,

titulo,

concluida: false

};

tarefas.push(novaTarefa);

res.status(201).json(novaTarefa);

});

// PUT - Atualizar tarefa

app.put('/api/tarefas/:id', (req, res) => {

const tarefa = tarefas.find(t => t.id === parseInt(req.params.id));

if (!tarefa) return res.status(404).json({ erro: 'Tarefa não encontrada' });

tarefa.titulo = req.body.titulo || tarefa.titulo;

tarefa.concluida = req.body.concluida ?? tarefa.concluida;

res.json(tarefa);

});

// DELETE - Remover tarefa

app.delete('/api/tarefas/:id', (req, res) => {

const index = tarefas.findIndex(t => t.id === parseInt(req.params.id));

if (index === -1) return res.status(404).json({ erro: 'Tarefa não encontrada' });

tarefas.splice(index, 1);

res.status(204).send();

});

app.listen(3000, () => console.log('API rodando na porta 3000'));

```

Execute com `node server.js` e teste com curl ou Postman.

Criando a Mesma API com Python (FastAPI)

FastAPI é o framework Python mais moderno para construir APIs, com performance próxima a Go e Node.js:

```python

from fastapi import FastAPI, HTTPException

from pydantic import BaseModel

app = FastAPI()

class Tarefa(BaseModel):

titulo: str

concluida: bool = False

tarefas = {}

contador = 0

@app.get("/api/tarefas")

def listar_tarefas():

return list(tarefas.values())

@app.get("/api/tarefas/{tarefa_id}")

def buscar_tarefa(tarefa_id: int):

if tarefa_id not in tarefas:

raise HTTPException(status_code=404, detail="Tarefa não encontrada")

return tarefas[tarefa_id]

@app.post("/api/tarefas", status_code=201)

def criar_tarefa(tarefa: Tarefa):

global contador

contador += 1

nova = {"id": contador, **tarefa.dict()}

tarefas[contador] = nova

return nova

@app.delete("/api/tarefas/{tarefa_id}", status_code=204)

def remover_tarefa(tarefa_id: int):

if tarefa_id not in tarefas:

raise HTTPException(status_code=404, detail="Tarefa não encontrada")

del tarefas[tarefa_id]

```

Para quem está aprendendo Python do zero, FastAPI é uma excelente forma de começar no backend.

Boas Práticas para APIs REST

Naming Conventions

  • Use substantivos no plural para recursos: `/usuarios`, `/produtos`
  • Use kebab-case para múltiplas palavras: `/categorias-produtos`
  • Aninhe recursos relacionados: `/usuarios/42/pedidos`
  • Evite verbos na URL — o método HTTP já define a ação

Versionamento

Versione sua API para não quebrar integrações existentes:

```

/api/v1/usuarios → versão 1

/api/v2/usuarios → versão 2

```

Paginação

Para listas grandes, implemente paginação:

```

GET /api/produtos?page=2&limit=20

```

Resposta deve incluir metadados:

```json

{

"data": [...],

"total": 150,

"page": 2,

"limit": 20,

"totalPages": 8

}

```

Autenticação

Use JWT (JSON Web Tokens) ou OAuth 2.0 para proteger endpoints sensíveis. Nunca envie credenciais em query strings.

Rate Limiting

Proteja sua API contra abuso limitando o número de requisições por IP/usuário. Bibliotecas como `express-rate-limit` facilitam a implementação.

Ferramentas Essenciais para Trabalhar com APIs

FerramentaUsoPreço
PostmanTestar e documentar APIsFree/Pago
InsomniaAlternativa leve ao PostmanFree/Pago
Swagger/OpenAPIDocumentação automáticaGratuito
curlTestes via terminalGratuito
Thunder ClientExtensão VS Code para APIsGratuito

Para maximizar sua produtividade, veja nossas recomendações de extensões do VS Code.

Perguntas Frequentes

Qual a diferença entre API REST e API GraphQL?

REST usa endpoints fixos para cada recurso, enquanto GraphQL permite que o cliente especifique exatamente quais dados quer em uma única requisição. REST é mais simples e amplamente adotado; GraphQL é mais flexível e eficiente para aplicações complexas com muitos relacionamentos de dados.

Preciso de banco de dados para criar uma API?

Para aprendizado, não — você pode armazenar dados em memória como nos exemplos acima. Para produção, sim — use PostgreSQL, MongoDB ou outro banco de dados. Serviços como Supabase e PlanetScale facilitam a configuração sem precisar gerenciar infraestrutura.

Quanto ganha um desenvolvedor backend/API?

Desenvolvedores backend que dominam APIs REST, bancos de dados e arquitetura de sistemas ganham em média de R$ 9.000 a R$ 20.000 no Brasil em regime CLT. Especialistas em arquitetura de APIs e microsserviços podem ultrapassar R$ 25.000.

API REST ainda é relevante em 2026?

Absolutamente. Apesar do crescimento de GraphQL e gRPC, REST continua sendo o padrão dominante para a grande maioria das aplicações web e mobile. Sua simplicidade, maturidade e ampla compatibilidade garantem relevância por muitos anos ainda.