HTTP & Networking
Perry natively implements HTTP servers, clients, and WebSocket support.
Fastify Server
import fastify from "fastify";
const app = fastify();
app.get("/", async (request, reply) => {
return { hello: "world" };
});
app.get("/users/:id", async (request, reply) => {
const { id } = request.params;
return { id, name: "User " + id };
});
app.post("/data", async (request, reply) => {
const body = request.body;
reply.code(201);
return { received: body };
});
app.listen({ port: 3000 }, () => {
console.log("Server running on port 3000");
});
Perry’s Fastify implementation is API-compatible with the npm package. Routes, request/reply objects, params, query strings, and JSON body parsing all work.
Fetch API
// GET request
const response = await fetch("https://api.example.com/data");
const data = await response.json();
// POST request
const result = await fetch("https://api.example.com/data", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ key: "value" }),
});
Axios
import axios from "axios";
const { data } = await axios.get("https://api.example.com/users");
const response = await axios.post("https://api.example.com/users", {
name: "Perry",
email: "perry@example.com",
});
WebSocket
import { WebSocket } from "ws";
const ws = new WebSocket("ws://localhost:8080");
ws.on("open", () => {
ws.send("Hello, server!");
});
ws.on("message", (data) => {
console.log(`Received: ${data}`);
});
ws.on("close", () => {
console.log("Connection closed");
});