class ExampleRestModel extends RestApiModel { public ExampleRestModel() { addHandler("/", new CountHandler()); addHandler("/names", new NamesHandler()); } class CountHandler extends RestApiHandler { /* simulates SQL CREATE TABLE count (val int); INSERT INTO count VALUES (0); */ int count_val = 0; public String doPost(HttpParser p) { return doPatch(p); } public String doPatch(HttpParser p) { /* Simulates SQL UPDATE count SET val = val + 1; */ count_val++; return p.makeReply(200, "OK"); } public String doGet(HttpParser p) { /* Simulates SQL SELECT val FROM count; */ return p.makeJsonReply(200, "{ \"count\": " + Integer.toString(count_val) + " }"); } } class NamesHandler extends RestApiHandler { static final int maxnames = 10000; /* simulates SQL CREATE TABLE names (name text); */ String [] names = new String[maxnames]; int ct = 0; public String doPatch(HttpParser p) { /* Simulates SQL INSERT INTO names VALUES (&sto:ENTRY;); */ if (ct == maxnames) return p.makeReply(500, "Simulated table full"); // safe to insert into the simulated table names[ct++] = p.getParam("name"); return p.makeReply(200, "OK"); } public String doPost(HttpParser p) { return doPatch(p); } public String doGet(HttpParser p) { /* Simulates SQL SELECT name FROM names; */ String jsonStr = new String("{ \"names\": [\n"); for (int i = 0; i < ct; i++) { jsonStr += " "; if (names[i] == null) jsonStr += "null,\n"; else jsonStr += "\"" + names[i] + "\",\n"; } // remove final comma if present and terminate string if (ct > 0) jsonStr = jsonStr.substring(0, jsonStr.length()-2) + "\n"; jsonStr += " ] }"; return p.makeJsonReply(200, jsonStr); } } }