Nyx con Ejemplos

Rutas de nyx-serve

El framework App de nyx-serve admite enrutamiento RESTful con parámetros de ruta como /users/{id}. Los parámetros se capturan en req.params como un Map.

Código

// nyx-serve routes -- GET, POST, PUT, DELETE handlers

import "std/http"
import "std/web"

fn get_users(req: Request) -> Response {
    return response_json(200, "[{\"id\": 1, \"name\": \"Alice\"}]")
}

fn get_user_by_id(req: Request) -> Response {
    // {id} is captured automatically in req.params
    let id: String = req.params.get("id")
    return response_json(200, "{\"id\": " + id + ", \"name\": \"User\"}")
}

fn create_user(req: Request) -> Response {
    // req.body contains the raw request body
    return response_json(201, "{\"created\": true, \"body\": \"" + req.body + "\"}")
}

fn delete_user(req: Request) -> Response {
    let id: String = req.params.get("id")
    return response_new(204, "")
}

fn main() -> int {
    let app: App = app_new()

    // RESTful routes with path parameters
    app_get(app, "/users", get_users)
    app_get(app, "/users/{id}", get_user_by_id)
    app_post(app, "/users", create_user)
    app_delete(app, "/users/{id}", delete_user)

    print("REST API configured with 4 routes")
    print("  GET    /users")
    print("  GET    /users/{id}")
    print("  POST   /users")
    print("  DELETE /users/{id}")
    return 0
}

Salida

REST API configured with 4 routes
  GET    /users
  GET    /users/{id}
  POST   /users
  DELETE /users/{id}

Explicación

Un App es una tabla de enrutamiento más un registro de handlers. Cada llamada a app_get, app_post, app_put, app_delete asocia un método HTTP + patrón de ruta con una función de firma fn (req: Request) -> Response. Cuando llega una petición, nyx-serve compara método y ruta contra la tabla y despacha.

Los patrones de ruta admiten marcadores de posición {name}. El matcher completa req.params — un Map de nombre al segmento de string capturado — de modo que GET /users/42 contra /users/{id} expone req.params.get("id") == "42". Se usa req.body para leer el payload crudo de la petición en POST/PUT, y req.query para los parámetros de query-string ya parseados.

Los constructores auxiliares response_new(status, body), response_json y response_html envuelven headers y código de estado para que los handlers se mantengan simples. Se inicia el servidor con http_serve_mt(app, port) para alcanzar 73K req/s en un solo nodo.

← Anterior Siguiente →

Source: examples/by-example/78-serve-routes.nx