Cookbook: JSON APIs


import std.http { json_response, problem_response }

fn with_state(response, state) {
    return { "response" => response, "state" => state }
}

fn list_tickets(request, state) {
    return with_state(json_response(json_encode({
        "data" => state["tickets"],
        "count" => len(state["tickets"])
    })), state)
}

fn get_ticket(request, state) {
    let id = request["params"]["id"]
    for ticket in state["tickets"] {
        if ticket["id"] == id {
            return with_state(json_response(json_encode({ "data" => ticket })), state)
        }
    }
    return with_state(problem_response(404, "not_found", "ticket not found", "req-1"), state)
}

Prefer JSON APIs that are verified by smoke tests.