O que é uma API REST?

Atualizado em: agosto de 2026

Uma API REST é uma API que segue o estilo arquitetural REST: recursos em URLs, requisições stateless e métodos HTTP padrão. REST — Representational State Transfer, definido na tese de doutorado de Roy Fielding, de 2000 — é um estilo, não um protocolo ou padrão: um conjunto de restrições que, honradas em conjunto, produzem APIs que a web inteira já sabe consumir, cachear e escalar.

Principais pontos

PerguntaResposta
O modeloRecursos em URLs · representações (geralmente JSON) · métodos padrão
A origemTese de Fielding, 2000, capítulo 5 — um estilo arquitetural, não uma spec
As seis restriçõesCliente-servidor · stateless · cacheável · interface uniforme · em camadas · código sob demanda (opcional)
Os verbosGET · POST · PUT · PATCH · DELETE — com semânticas de segurança e idempotência
A nota de rodapé honestaA maioria das APIs “REST” de produção são APIs HTTP de nível 2 — e tudo bem

Um ciclo CRUD completo em HTTP puro

O estilo inteiro em quatro requisições — isto é o que todo framework e SDK envia no fim das contas:

POST /v1/posts                     →  201 Created            criar
{ "title": "Hello REST" }             Location: /v1/posts/8fk2

GET /v1/posts/8fk2                 →  200 OK                 ler
                                      { "title": "Hello REST", … }

PUT /v1/posts/8fk2                 →  200 OK                 substituir
{ "title": "Hello again" }            (PATCH atualizaria campos)

DELETE /v1/posts/8fk2              →  204 No Content         excluir
GET /v1/posts/8fk2                 →  404 Not Found          …e sumiu

O mesmo ciclo por SDKs que embrulham as chamadas REST:

// JavaScript / Node.js — Back4app JS SDK
// The REST semantics, wrapped: create, read, update, delete
const post = new Parse.Object('Post');
post.set('title', 'Hello REST');
await post.save();                            // POST   /classes/Post      → 201

const fetched = await new Parse.Query('Post')
  .get(post.id);                              // GET    /classes/Post/:id  → 200

fetched.set('title', 'Hello again');
await fetched.save();                         // PUT    /classes/Post/:id  → 200

await fetched.destroy();                      // DELETE /classes/Post/:id  → 200

As seis restrições do REST

  1. Cliente-servidor — interface e implementação evoluem de forma independente; a UI nunca sabe como o armazenamento funciona.
  2. Stateless — cada requisição é autossuficiente; o servidor não guarda sessão entre chamadas, e é isso que deixa qualquer réplica responder qualquer requisição.
  3. Cacheável — as respostas declaram a própria cacheabilidade; GETs com os headers de cache corretos colocam toda a infraestrutura de cache da web (navegadores, CDNs, proxies) para trabalhar pela sua API.
  4. Interface uniforme — a restrição que é o REST, em quatro partes: recursos identificados por URIs; manipulação por representações (você devolve o JSON que quer que o recurso se torne); mensagens autodescritivas (método + headers dizem tudo o que é preciso para processar a requisição); e hipermídia como motor do estado da aplicação (as respostas linkam as próximas ações).
  5. Sistema em camadas — clientes não sabem se estão falando com a origem, um cache ou um gateway; intermediários se encaixam livremente.
  6. Código sob demanda (opcional) — servidores podem enviar código executável aos clientes; a única restrição marcada como opcional, e a que a maioria das APIs ignora.

Métodos HTTP: segurança, idempotência, CRUD

A tabela que falta em quase toda página bem ranqueada — as semânticas da RFC 9110, condensadas:

MétodoPapel no CRUDSeguro?Idempotente?Repetir às cegas?
GETLerSimSimSim
POSTCriarNãoNãoNão — pode duplicar
PUTSubstituirNãoSimSim — mesmo resultado
PATCHAtualização parcialNãoNão garantidoDepende do design do patch
DELETERemoverNãoSimSim — continua removido

Seguro significa que a requisição não muda nada; idempotente significa que repeti-la não muda nada além. Isso não é curiosidade — é a política de retry: um timeout de rede em um PUT pode ser repetido sem medo, o mesmo timeout em um POST precisa de uma chave de idempotência ou de uma checagem de duplicata. O mapeamento CRUD completo tem verbete próprio.

Códigos de status: o que retornar quando

SituaçãoRetorne
Leitura bem-sucedida200 OK
Recurso criado201 Created + header Location
Excluído; nada a dizer204 No Content
Requisição malformada400 Bad Request
Sem credenciais ou credenciais inválidas401 Unauthorized
Autenticado mas sem permissão403 Forbidden
Recurso inexistente404 Not Found
Acima do rate limit429 Too Many Requests (detalhes)
Falha do servidor500 Internal Server Error

As distinções 401/403 e 200/201/204 são onde o capricho de API aparece: códigos precisos tornam clientes depuráveis com nada além da linha de status.

Sua API é mesmo REST? A escada de maturidade

A seção honesta que os explicadores comerciais omitem. O Richardson Maturity Model dá nota a APIs HTTP: nível 0 (uma URL, um verbo, RPC disfarçado), nível 1 (recursos em URLs), nível 2 (métodos e códigos de status corretos), nível 3 (hipermídia — HATEOAS).

Richardson Maturity Model para APIs RESTQuatro níveis, do nível zero, HTTP puro como túnel, passando por recursos, depois verbos HTTP e códigos de status, até os controles de hipermídia do nível três, com a maioria das APIs de produção no nível dois.

Nível 0 — um endpoint, POST para tudo (RPC disfarçado)

Nível 1 — recursos: /posts/8fk2

Nível 2 — verbos + códigos de status ← a maioria das APIs de produção vive aqui

Nível 3 — hipermídia: respostas linkam as próximas ações (HATEOAS)

Quatro níveis, do nível zero, HTTP puro como túnel, passando por recursos, depois verbos HTTP e códigos de status, até os controles de hipermídia do nível três, com a maioria das APIs de produção no nível dois.

Pela própria insistência de Fielding, uma API sem hipermídia não é REST — ele escreveu um ensaio afiado dizendo exatamente isso. Na prática, quase toda “API REST” aclamada é uma API HTTP de nível 2: recursos, verbos, códigos de status, JSON, nenhuma hipermídia. Isso importa menos como pureza e mais como vocabulário — conhecer a escada diz o que o termo significa em uma vaga de emprego (nível 2) versus na tese (nível 3), e evita tanto o HATEOAS de cargo cult quanto as correções pedantes.

REST vs. SOAP vs. GraphQL vs. gRPC

RESTSOAPGraphQLgRPC
NaturezaEstilo arquiteturalProtocoloLinguagem de consulta + runtimeFramework de RPC
No fioJSON sobre HTTPEnvelopes XMLJSON sobre HTTP (um endpoint)Protobuf sobre HTTP/2
ContratoOpenAPI (convenção)WSDL (obrigatório)Schema (embutido).proto (obrigatório)
CacheNativo do HTTP — seu superpoderFracoNa aplicaçãoNa aplicação
Melhor emCRUD público de recursosFormalidade enterprise/legadoDados aninhados moldados pelo clienteVelocidade interna entre serviços
FraquezaFormatos fixos over/underfetchVerbosidadeComplexidade de cache e rate limitingAtrito no navegador

A comparação com GraphQL tem um verbete inteiro só dela.

Convenções que tornam uma API REST agradável

Além das restrições, as convenções pelas quais os consumidores silenciosamente dão nota: recursos como substantivos no plural (/posts, não /getPost); aninhamento de um nível no máximo (/posts/8fk2/comments, e pare aí); paginação em toda coleção — baseada em cursor para profundidade e estabilidade, com limites impostos; filtro e ordenação como parâmetros de query, não variantes de endpoint; versionamento com política explícita (caminho /v1/ ou header — escolha um, publique janelas de descontinuação); negociação de conteúdo honrada (Accept, Content-Type); e erros como JSON estruturado com um código legível por máquina, não só prosa. Nada disso está na tese; tudo isso está na diferença entre uma API que desenvolvedores recomendam e uma que eles aturam.

Casos de uso comuns

  • APIs públicas e de parceiros — a ubiquidade do REST é o recurso: toda linguagem, ferramenta e desenvolvedor o fala.
  • Backends de apps mobile e web — CRUD de recursos sobre HTTP casa com a forma como a maioria das telas de app realmente consome dados.
  • Costuras entre microsserviços — contratos internos onde o ferramental do HTTP (gateways, tracing, cache) paga o próprio salário.
  • Integrações no estilo webhook — sistemas notificando sistemas com chamadas HTTP simples que os dois lados já entendem.
  • APIs de dados geradas automaticamente — plataformas que expõem um banco de dados como recursos REST — o caminho mais rápido do schema à API funcionando.

Você deveria usar REST? Matriz de decisão

REST é o padrão certo quando…Busque outra coisa quando…
API pública, consumidores desconhecidosMalha interna de alto throughput → gRPC
Domínio CRUD com formato de recursoClientes precisam moldar respostas aninhadas → GraphQL
O cache HTTP pode carregar a carga de leituraPush bidirecional em tempo real → WebSockets / live queries
Simplicidade e amplitude de ferramental importamContratos enterprise formais exigidos → SOAP
As telas mapeiam limpo para recursosUma tela agrega cinco serviços → endpoint composto / BFF

Limitações e trade-offs

  • Representações fixas servem mal a clientes diversos. O par overfetching/underfetching é a fraqueza estrutural do REST; sparse fieldsets e parâmetros de expansão mitigam, GraphQL redesenha.
  • Nenhum contrato obrigatório. Nada força uma spec OpenAPI, então muitas APIs REST são documentadas por folclore; a disciplina é opcional onde gRPC e GraphQL a tornam estrutural.
  • Statelessness repete contexto. Auth e contexto de tenant viajam em cada requisição — barato em bytes, mas empurra a semântica de sessão para tokens e torna alguns fluxos (transações em múltiplos passos) desajeitados.
  • Tentação do N+1 por design. Pensar recurso-por-URL convida clientes de uma chamada por item; APIs boas entregam expansão e batch antes que os consumidores improvisem loops.
  • A palavra “REST” é ambígua. API HTTP de nível 2 na boca da maioria, arquitetura de hipermídia na tese — entenda qual das duas uma spec, vaga ou revisor quer dizer antes de discutir.

APIs REST no Back4app

O Back4app é uma plataforma open-source de Backend as a Service (BaaS) que combina banco de dados gerenciado, APIs REST e GraphQL geradas automaticamente, autenticação, armazenamento de arquivos e funções serverless com Cloud Code. A API REST aqui é gerada, não construída: cada classe do seu modelo de dados é imediatamente um recurso — POST /classes/Post cria, GET /classes/Post/:id lê, com os métodos, códigos de status e a semântica de Location do passo a passo acima — atrás de chaves, tokens de usuário e permissões por classe fazendo valer a fronteira. Os code tabs mostram o mesmo ciclo pelos SDKs, que são embrulhos idiomáticos finos sobre exatamente este HTTP; quando uma operação cresce além do CRUD, uma função de Cloud Code adiciona um endpoint customizado em um arquivo. REST de nível 2, correto por padrão, do schema à URL no tempo de definir a classe.

Perguntas frequentes

O que é uma API REST em termos simples?

Uma forma de duas aplicações conversarem por HTTP usando convenções que todo mundo já conhece: cada coisa (um usuário, um pedido) vive em uma URL, você age sobre ela com um verbo padrão — GET para ler, POST para criar, PUT ou PATCH para atualizar, DELETE para remover — e cada requisição se sustenta sozinha, carregando tudo de que o servidor precisa para respondê-la.

O que significa REST?

Representational State Transfer — transferência de estado representacional —, da tese de doutorado de Roy Fielding, de 2000. O nome descreve o mecanismo: o servidor transfere ao cliente uma representação do estado de um recurso (geralmente JSON), e o cliente move a aplicação de estado em estado por meio dessas representações.

Qual a diferença entre REST e RESTful?

No uso cotidiano, nenhuma — os termos são intercambiáveis. Sendo pedante, REST nomeia o estilo arquitetural e RESTful é o adjetivo para uma API que o implementa. A afirmação que circula por aí de que "RESTful segue todas as regras e REST só algumas" não tem base nenhuma no trabalho de Fielding.

Quais são as seis restrições do REST?

Separação cliente-servidor, statelessness, cacheabilidade, interface uniforme, sistema em camadas e — opcionalmente — código sob demanda. A própria interface uniforme se desdobra em quatro regras: recursos identificados por URIs, manipulação por representações, mensagens autodescritivas e hipermídia como motor do estado da aplicação.

Qual a diferença entre PUT e POST?

Idempotência e endereçamento. POST cria sob uma coleção — o servidor atribui a URL, e repetir a requisição cria duplicatas. PUT escreve uma representação completa em uma URL conhecida — repeti-lo produz o mesmo estado, o que torna retries seguros. Essa diferença de segurança, não de estilo, é o motivo de a distinção importar.

Uma API REST precisa usar JSON?

Não. REST é agnóstico de formato — um recurso pode ser representado como JSON, XML, HTML ou uma imagem, negociado pelos headers Accept e Content-Type. JSON é apenas o padrão moderno porque todo cliente o interpreta de forma barata. A restrição é sobre representações, não sobre uma em particular.

O que significa stateless em uma API REST?

O servidor não guarda memória do cliente entre requisições: cada requisição carrega tudo o que é preciso para processá-la, inclusive credenciais como um bearer token. O ganho é escala horizontal — qualquer servidor pode responder qualquer requisição — e o custo é repetir alguns bytes de contexto por chamada.

O que é HATEOAS?

Hypermedia As The Engine Of Application State: as respostas incluem links para as próximas ações disponíveis, e os clientes navegam a API como pessoas navegam a web — seguindo links em vez de fixar URLs no código. É a restrição menos implementada; a maioria das APIs "REST" de produção a pula e vive feliz no nível 2 do modelo de maturidade.

Termos relacionados

Compare com

Leitura adicional

Pronto para construir seu backend?

Comece seu projeto no Back4app em minutos — banco de dados, autenticação, APIs e Cloud Code incluídos. Sem cartão de crédito.

Escrito e revisado por Back4app Engineering, Back4app Engineering · Publicado em 2026-08-20