typestar

Códigos de estado y encabezados en Rust

Una respuesta de tupla fija estado, encabezados y cuerpo en un solo return.

use axum::http::{header, HeaderMap, StatusCode};
use axum::response::IntoResponse;
use axum::{routing::get, Router};

async fn created() -> impl IntoResponse {
    let mut headers = HeaderMap::new();
    headers.insert(header::LOCATION, "/api/results/42".parse().unwrap());
    (StatusCode::CREATED, headers, "saved")
}

async fn teapot() -> impl IntoResponse {
    (StatusCode::IM_A_TEAPOT, "no coffee here")
}

#[tokio::main]
async fn main() {
    let app = Router::new()
        .route("/created", get(created))
        .route("/teapot", get(teapot));
    let listener = tokio::net::TcpListener::bind("127.0.0.1:8080")
        .await
        .unwrap();
    axum::serve(listener, app).await.unwrap();
}

Cómo funciona

  1. (StatusCode, T) reemplaza el 200 por defecto.
  2. Agregar un HeaderMap fija encabezados de respuesta.
  3. impl IntoResponse deja que un handler devuelva varias formas.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
24
Caracteres a escribir
644
Tokens
184
Ritmo de tres estrellas
110 tpm

Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 100 segundos.

Escribe este fragmento

Paso 1 de 3 en Respuestas y middleware; paso 6 de 9 en Servicios web con axum.

← Anterior Siguiente →