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.