HTTP CRUD
Use case: in-memory item store
Section titled “Use case: in-memory item store”Single-item CRUD demo — GET /item returns JSON; POST /item replaces the stored name from the raw body.
Example source: vow-examples/vow-web-server/json_crud.vow
import lib.appimport lib.requestimport lib.responseimport lib.serve
var store_name: String = "widget";
fn get_item(_req: request.Request) -> response.Response { let body = "{\"name\":\"" + store_name + "\"}"; return response.json(body);}
fn create_item(req: request.Request) -> response.Response { let body = request.body(req, 65536); if len(body) == 0 { return response.bad_request("{\"error\":\"empty body\"}"); } store_name = body; return response.json(201, "{\"ok\":true}");}
fn main(caps: Caps) -> int { let a = app.post( app.get(app.app(), "/item", get_item), "/item", create_item ); return match caps.net { Some(cap) => serve.listen(a, cap, 8787), None => 0 - 1, };}./vow run vow-examples/vow-web-server/json_crud.vow -- --grant net:
curl -sf http://127.0.0.1:8787/item
curl -X POST http://127.0.0.1:8787/item \ -H 'Content-Type: application/json' \ -d '{"name":"gadget"}'
curl -sf http://127.0.0.1:8787/itemKey concepts
Section titled “Key concepts”| Topic | This example |
|---|---|
| Reading POST body | request.body(req, max_len) |
| JSON responses | response.json / response.json(201, …) |
| Error helper | response.bad_request for empty body |
| Mutable state | Module-level var store_name |