Nyx con Ejemplos

API JSON con nyx-serve

response_json toma un string JSON crudo; response_json_map serializa un Map a JSON con el escapado adecuado. Los cuerpos de las peticiones son accesibles vía req.body.

Código

// nyx-serve JSON API -- request parsing and response_json_map

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

fn echo_json(req: Request) -> Response {
    // req.body contains the raw request body as a String
    // Use std/json to parse structured input
    let data: String = req.body

    // response_json_map builds a JSON object from a Map
    var result: Map = Map.new()
    result.insert("received", data)
    result.insert("method", req.method)
    result.insert("path", req.path)
    return response_json_map(200, result)
}

fn health_check(req: Request) -> Response {
    // response_json takes a raw JSON string
    return response_json(200, "{\"status\": \"ok\", \"service\": \"api\"}")
}

fn not_found(req: Request) -> Response {
    return response_json(404, "{\"error\": \"not found\"}")
}

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

    app_get(app, "/health", health_check)
    app_post(app, "/echo", echo_json)

    print("JSON API configured")
    print("  GET  /health -> {\"status\": \"ok\"}")
    print("  POST /echo   -> echoes request body as JSON")
    return 0
}

Salida

JSON API configured
  GET  /health -> {"status": "ok"}
  POST /echo   -> echoes request body as JSON

Explicación

Dos helpers cubren el 95% de las necesidades de respuestas JSON. response_json(status, raw) confía en que se produzca JSON válido — rápido, sin overhead, pero basta una barra invertida faltante para que los clientes fallen. Se usa para respuestas constantes como {"status": "ok"} donde se controla el string completo.

response_json_map(status, map) recorre un Map y emite JSON correctamente escapado: las comillas se escapan con barra invertida, los caracteres de control quedan como \u00XX, y los Maps/Arrays anidados se recorren recursivamente. Siempre debe usarse esto cuando alguna parte de la salida provenga de entrada del usuario. Se puede combinar con std/json::parse para leer el cuerpo de la petición en un Map, mutarlo y volver a serializarlo — un ciclo petición-respuesta sin ceremonias.

Ambos helpers configuran Content-Type: application/json; charset=utf-8 automáticamente. Para headers personalizados, se puede construir un Response con response_new y response_set_header.

← Anterior Siguiente →

Source: examples/by-example/79-serve-json-api.nx