API Design Basics
9 examples for HTTP API design in Rust services - 6 basic and 3 intermediate.
Busca en todas las páginas de la documentación
9 examples for HTTP API design in Rust services - 6 basic and 3 intermediate.
[dependencies]
axum = "0.8"
serde = { version = "1", features = ["derive"] }
serde_json = "1"Nouns in paths, verbs in HTTP methods.
GET /users
POST /users
GET /users/{id}
PATCH /users/{id}
DELETE /users/{id}
/createUser for CRUD./users/{id}/orders.Related: GraphQL in Rust - alternative query model
Map outcomes to HTTP semantics.
201 Created - POST success with resource
204 No Content - DELETE success
409 Conflict - duplicate unique field
422 Unprocessable Entity - validation failure
Stable machine-readable errors.
{"error":{"code":"invalid_email","message":"Email format invalid","field":"email"}}code, message, optional field.Related: Input Validation & Injection - validation errors
Explicit API versions.
/v1/users
Accept: application/vnd.example.v1+json
Cursor-based listing.
GET /items?limit=20&cursor=eyJpZCI6MTB9
next_cursor in response body.limit.Safe retries for POST.
Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000
Related: Retries, Timeouts & Backoff - client retries
JSON default with explicit content type.
// handlers return Json<T> - Axum sets application/jsonAccept header if multi-format.RFC 7807 application/problem+json for errors.
{"type":"https://api.example.com/errors/validation","title":"Validation failed","status":422}type, title, status, detail.Describe API for consumers.
// use utoipa::ToSchema on DTOs and utoipa::path on handlers/docs only in non-prod or behind auth.Related: APIs & Security Best Practices - full baseline
Stack versions: This page was written for Rust 1.97.0 (edition 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, and Polars 0.46+.
Revisado por Chris St. John·Última actualización: 16 jul 2026