Capstone: JSON API
| The spec | |
| node:http server sketch | |
| JSON routes | |
| Test with node:http client |
The spec
The JSON API serves a tiny notes collection over HTTP: list notes, read one note, and create a note. Every response is JSON with the right content type header.
Keep three routes and one in memory array for the whole lesson. Routing, JSON bodies, and status codes are the skills being practiced, not persistence.
type Note = {
id: number;
text: string;
};
node:http server sketch
createServer builds an HTTP server from a single request handler function. The handler receives the request and response objects with types filled in by context.
Answer every request with a 200 status and a JSON content type while sketching. Real routing lands in the next section, so the server shape stays visible first.
import { createServer } from "node:http";
const server = createServer(function (_req, res): void {
res.writeHead(200, { "Content-Type": "application/json" });
res.end("{}");
});
server.listen(3000);
JSON routes
Routing maps the request URL to a handler name with a tiny function. Exact matches for a few paths beat a framework when the API has three endpoints.
Return a label such as notes or unknown and let the handler format the response. Unknown paths answer 404 later, but the mapping stays one pure function.
function route(url: string): string {
if (url === "/notes") {
return "notes";
}
return "unknown";
}
const hit: string = route("/notes");
console.log(hit);
Test with node:http client
Test the API with the get function from the same node:http module. No extra tooling is needed to prove that the server answers.
Point the client at the local address, read the status code, and assert the body parses. Start the server, run the client, then stop the server for a repeatable loop.
import { get } from "node:http";
get("http://localhost:3000/notes", function (res): void {
console.log(res.statusCode);
});
Next: Capstone: utils library
Article author: Arthur Isaev