Noções Básicas de Design de API
8 exemplos para você começar com o Design de API para backends Node.js - 6 básicos e 2 intermediários.
Busque em todas as páginas da documentação
8 exemplos para você começar com o Design de API para backends Node.js - 6 básicos e 2 intermediários.
Express 5 ou Fastify 5 com análise de corpo JSON e Zod instalados.
npm install express@5 zodGET /v1/orders
POST /v1/orders
GET /v1/orders/:id
PATCH /v1/orders/:id
DELETE /v1/orders/:id/v1/orders/:id/items/createOrder em APIs REST públicasRelacionado: Versionamento e Descontinuação - Prefixo
/v1
{ "data": { "id": "ord_1", "status": "pending" } }{ "error": { "code": "ORDER_NOT_FOUND", "message": "Order ord_99 not found" } }dataerror com code estável para clientesdata como um array mais metadados de paginaçãoRelacionado: Padrões de Resposta de Erro - Detalhes do Problema
| Ação | Código |
|---|---|
| Recurso criado | 201 |
| Sucesso com corpo | 200 |
| Sucesso sem corpo | 204 |
| Validação falhou | 400 |
| Autenticação ausente | 401 |
| Proibido | 403 |
| Não encontrado | 404 |
| Conflito | 409 |
200 com { error: ... } no corpo422 aceitável para validação semântica se a equipe padronizarimport { z } from "zod";
import express from "express";
const createOrderBody = z.object({
customerId: z.string().uuid(),
sku: z.string().min(1),
qty: z.number().int().positive(),
});
const app = express();
app.use(express.json());
app.post("/v1/orders", (req, res) => {
const parsed = createOrderBody.safeParse(req.body);
if (!parsed.success) {
return res.status(400).json({
error: { code: "VALIDATION_ERROR", details: parsed.error.flatten() },
});
}
res.status(201).json({ data: { id: crypto.randomUUID(), ...parsed.data } });
});PATCH /v1/orders/ord_1
{ "status": "shipped" }PATCH atualização parcial; documente os campos permitidosPUT substituição completa quando você a suportar - raro em APIs B2BIdempotency-Key em pagamentos POST (veja intermediário)GET /v1/orders?limit=20&cursor=eyJpZCI6Im9yZF8xMjMifQRelacionado: Paginação e Filtragem - cursor vs offset
app.use((req, res, next) => {
if (req.method === "POST" && !req.is("application/json")) {
return res.status(415).json({ error: { code: "UNSUPPORTED_MEDIA_TYPE" } });
}
next();
});application/jsonContent-Type e assinatura separadamenteDocumente as rotas à medida que você as envia.
paths:
/v1/orders:
post:
summary: Create order
responses:
"201":
description: CreatedRelacionado: OpenAPI & Swagger - spec-first vs code-first
Versões da Stack: Esta página foi escrita para Node.js 24.18.0 (LTS Ativo), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 e NestJS 11.
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026