Pular para o conteúdo

APIs REST, GraphQL, WebSockets e OpenAPI

Prioridade Alta 18 min de leitura Status: Não visto Lido Praticado Dominado

Do zero

Uma API é o balcão de atendimento de um sistema: outros sistemas não entram na cozinha (o banco de dados), fazem pedidos no balcão e recebem respostas. Uma prefeitura que envia a folha de pagamento ao Tribunal não acessa o banco do Tribunal; chama a API dele.

REST é o estilo mais usado para montar esse balcão na web. A ideia é simples:

  • Tudo é um recurso com endereço próprio (a URI): /processos/123 é o processo 123.
  • O verbo HTTP diz o que fazer com ele: GET lê, POST cria, PUT substitui, PATCH altera parte, DELETE apaga.
  • A resposta traz um código de status (200 deu certo, 404 não existe) e uma representação do recurso, quase sempre em JSON.
  • O servidor não guarda memória da conversa (sem estado): cada pedido traz tudo o que é preciso, inclusive o token de acesso.

Há alternativas para casos específicos: GraphQL, em que o cliente monta o pedido escolhendo exatamente os campos que quer, e WebSockets, uma linha aberta nos dois sentidos para dados em tempo real. E o cardápio do balcão, a documentação da API, se escreve num padrão chamado OpenAPI.

Frase para guardar: REST é recurso com endereço, verbo HTTP e resposta sem estado; GraphQL escolhe os campos; WebSocket mantém a linha aberta.

Em 1 minuto

  • Princípios do REST (Roy Fielding, 2000): cliente-servidor, sem estado, cacheável, interface uniforme, sistema em camadas e, opcionalmente, código sob demanda.
  • Métodos seguros (não alteram nada): GET, HEAD, OPTIONS e TRACE. Idempotentes (repetir dá o mesmo efeito): os seguros mais PUT e DELETE. POST não é idempotente; o PATCH não tem garantia.
  • Status: 2xx sucesso, 3xx redirecionamento, 4xx erro do cliente, 5xx erro do servidor. 401 é “não autenticado”; 403 é “autenticado, mas sem permissão”.
  • GraphQL: um endpoint só, consultas tipadas, o cliente pede exatamente os campos de que precisa (sem excesso nem falta de dados).
  • WebSocket: conexão persistente e bidirecional (full-duplex), aberta a partir de uma requisição HTTP de upgrade.
  • OpenAPI (antes chamada Swagger): especificação em YAML ou JSON que descreve endpoints, parâmetros, corpos e respostas; dela saem documentação navegável e código. Hoje, Swagger é o nome das ferramentas que leem a especificação: Swagger UI (documentação navegável e testável), Swagger Editor e Swagger Codegen.

Exemplo concreto: a API de processos

Pedido Significado Resposta típica
GET /processos?situacao=aberto Listar os processos abertos 200 OK, com a lista em JSON
GET /processos/123 Ler o processo 123 200 OK; 404 se não existir
POST /processos Criar um processo 201 Created, com o endereço do novo recurso no cabeçalho Location
PUT /processos/123 Substituir o processo 123 inteiro 200 OK ou 204 No Content
PATCH /processos/123 Alterar só alguns campos 200 OK
DELETE /processos/123 Apagar o processo 123 204 No Content

Resposta de GET /processos/123:

{
  "numero": "123/2026",
  "assunto": "Prestação de contas anual",
  "situacao": "aberto",
  "relator": "Conselheiro A"
}

A mesma resposta em XML:

<processo numero="123/2026">
  <assunto>Prestação de contas anual</assunto>
  <situacao>aberto</situacao>
  <relator>Conselheiro A</relator>
</processo>

O mesmo pedido em GraphQL, escolhendo só dois campos:

query {
  processo(numero: "123/2026") {
    situacao
    relator
  }
}

Trecho da documentação OpenAPI dessa rota:

paths:
  /processos/{id}:
    get:
      summary: Lê um processo
      parameters:
        - name: id
          in: path
          required: true
          schema: { type: string }
      responses:
        '200': { description: Processo encontrado }
        '404': { description: Processo não existe }

Comparação: REST, GraphQL e WebSocket

REST GraphQL WebSocket
Endereços Um por recurso Um endpoint só Uma conexão aberta
Quem define o formato da resposta O servidor O cliente, campo a campo A aplicação, mensagem a mensagem
Comunicação Pedido e resposta Pedido e resposta (assinaturas para eventos) Bidirecional e contínua
Cache HTTP Natural (GET) Mais difícil (costuma usar POST) Não se aplica
Uso típico APIs públicas e integrações Telas que juntam dados de várias fontes Painéis em tempo real, chat, notificações

JSON × XML: os dois representam dados estruturados. JSON é mais leve e nativo do JavaScript; XML tem atributos, namespaces e validação por esquema (XSD), e ainda é comum em integrações governamentais antigas.

Códigos de status que caem

Código Nome Quando
200 OK Pedido atendido
201 Created Recurso criado (resposta típica do POST)
204 No Content Atendido, sem corpo na resposta
304 Not Modified O cliente pode usar a cópia em cache
400 Bad Request Pedido malformado
401 Unauthorized Falta autenticação ou o token é inválido
403 Forbidden Autenticado, mas sem permissão
404 Not Found Recurso não existe
409 Conflict Conflito com o estado atual (versão desatualizada)
429 Too Many Requests Limite de requisições excedido
500 Internal Server Error Erro inesperado no servidor
503 Service Unavailable Servidor fora do ar ou sobrecarregado

Como a FCC cobra

Métodos HTTP e suas propriedades (seguro e idempotente), códigos de status (sobretudo 201, 401, 403 e 404) e os princípios do REST, com destaque para a ausência de estado.

  • Qual método usar em cada operação e quais são idempotentes.
  • Diferença entre 401 e 403, entre 4xx e 5xx.
  • Restrições do REST (stateless, cacheável, interface uniforme, em camadas).
  • GraphQL × REST e o problema de buscar dados demais ou de menos.
  • WebSocket para comunicação em tempo real.
  • Para que serve a especificação OpenAPI.

Pegadinhas

  • “POST é idempotente.” Falso: repetir um POST pode criar dois recursos.
  • “401 significa que o usuário não tem permissão.” Falso: 401 é falta de autenticação; sem permissão é 403.
  • “Em REST, o servidor mantém a sessão do cliente entre as requisições.” Falso: cada requisição é independente e autocontida.
  • “GraphQL exige um endpoint para cada tipo de dado.” Falso: usa um endpoint só.
  • “WebSocket é um formato de dados, como o JSON.” Falso: é um protocolo de comunicação bidirecional.
  • “OpenAPI é uma linguagem de programação.” Falso: é uma especificação para descrever APIs.

Explique com suas palavras

Explique a um colega o que acontece quando uma prefeitura chama POST /folhas na API do Tribunal, e por que repetir esse pedido é diferente de repetir um PUT.

  1. Escreva sem olhar a lição, com frases curtas e um exemplo seu.
  2. Onde travar ou precisar de jargão, há uma lacuna: releia só essa parte.
  3. Compare com a explicação-modelo e reescreva o que faltou.

Fica salva neste navegador.

Comparar com uma explicação-modelo

A prefeitura envia ao endereço /folhas os dados de uma folha de pagamento, em JSON, junto com o token que prova quem ela é. O servidor confere o token, valida os dados, cria a folha e responde 201 Created, com o endereço da folha nova. Ele não guarda nada da conversa: o próximo pedido terá de trazer o token de novo.

POST cria um recurso novo a cada vez. Se a prefeitura repetir o pedido, porque a internet caiu antes de receber a resposta, pode acabar com duas folhas iguais. PUT substitui um recurso de endereço conhecido; repetir o PUT deixa o recurso no mesmo estado. Por isso o PUT é idempotente e o POST não é.

Teste-se

Desenvolvimento de Sistemas · APIs REST · Inédita, estilo FCC

Questão 1 de 3

Em uma API RESTful, são métodos HTTP idempotentes, isto é, cuja repetição produz no servidor o mesmo efeito que uma única execução,

Alternativas

A–E escolhem, Enter confirma. Botão direito ou Shift + letra risca.

Toque longo numa alternativa para riscá-la.

Desenvolvimento de Sistemas · APIs REST · Inédita, estilo FCC

Questão 2 de 3

Uma prefeitura envia um token válido, mas tenta consultar a folha de pagamento de outra prefeitura, o que não lhe é permitido. O código de status HTTP mais adequado para a resposta da API é

Alternativas

A–E escolhem, Enter confirma. Botão direito ou Shift + letra risca.

Toque longo numa alternativa para riscá-la.

Desenvolvimento de Sistemas · APIs REST · Inédita, estilo FCC

Questão 3 de 3

Entre as restrições do estilo arquitetural REST, a que determina que cada requisição do cliente contenha toda a informação necessária para ser compreendida, sem que o servidor guarde o contexto da sessão entre as requisições, é a

Alternativas

A–E escolhem, Enter confirma. Botão direito ou Shift + letra risca.

Toque longo numa alternativa para riscá-la.

Mais duas questões deste tópico estão em Questões.

Flashcards gerados

FrenteVerso
Métodos HTTP seguros GET, HEAD, OPTIONS e TRACE, que não alteram o estado do servidor.
Resposta típica de um POST que cria recurso 201 Created, com o endereço do novo recurso no cabeçalho Location.
PUT × PATCH PUT substitui o recurso inteiro; PATCH altera só alguns campos.
Para que serve a especificação OpenAPI? Descreve endpoints, parâmetros, corpos e respostas da API em YAML ou JSON; dela saem documentação navegável e código.
Faixas de códigos de status HTTP 2xx sucesso, 3xx redirecionamento, 4xx erro do cliente, 5xx erro do servidor.

Ligação com o estudo de caso

A API para jurisdicionados é um dos casos mais prováveis. Uma resposta completa desenha os recursos e métodos (POST /folhas, GET /folhas/id), os códigos de status (201, 400, 401, 403), a autenticação por OAuth 2.0 (veja a lição de OAuth, OIDC e JWT), a documentação em OpenAPI e os riscos do OWASP Top 10:2025 (controle de acesso por prefeitura e injeção).

Fontes da lição

Claude explica

Tire dúvidas sobre este tema no Claude: o site copia o pedido com a lição e abre uma conversa nova, na sua conta. Confira na fonte qualquer fato de lei ou de norma.

Pratique fora do site

Faça questões da FCC sobre este tópico no QConcursos ou no Gran e registre aqui quantas fez: elas contam na meta da semana e no status do tópico.

Registrar questões feitas lá
Errei uma questão lá: criar flashcard