DEV Community

Alex Spinov
Alex Spinov

Posted on

H3 Has a Free API That Most Developers Dont Know About

H3 is a minimal HTTP framework from UnJS that powers Nitro and Nuxt server. It is ultrafast, works everywhere (Node, Deno, Bun, Workers), and has zero dependencies.

Basic Server

import { createApp, createRouter, defineEventHandler, readBody, getQuery } from "h3";

const app = createApp();
const router = createRouter();

router.get("/api/hello", defineEventHandler(() => ({ message: "Hello World" })));

router.get("/api/users", defineEventHandler((event) => {
  const { page, limit } = getQuery(event);
  return { page: Number(page) || 1, limit: Number(limit) || 10 };
}));

router.post("/api/users", defineEventHandler(async (event) => {
  const body = await readBody(event);
  return { created: true, user: body };
}));

app.use(router);
Enter fullscreen mode Exit fullscreen mode

Middleware

import { defineEventHandler, getHeader, createError } from "h3";

app.use(defineEventHandler((event) => {
  const auth = getHeader(event, "authorization");
  if (event.path.startsWith("/api/admin") && !auth) {
    throw createError({ statusCode: 401, message: "Unauthorized" });
  }
}));
Enter fullscreen mode Exit fullscreen mode

WebSocket

import { defineWebSocketHandler } from "h3";

router.get("/ws", defineWebSocketHandler({
  open(peer) { console.log("Connected:", peer.id); },
  message(peer, message) { peer.send(`Echo: ${message}`); },
  close(peer) { console.log("Disconnected:", peer.id); }
}));
Enter fullscreen mode Exit fullscreen mode

Key Features

  • Zero dependencies, ultrafast
  • Runs everywhere (Node, Deno, Bun, Workers)
  • Powers Nitro and Nuxt
  • WebSocket support
  • TypeScript-first

Need to scrape or monitor web data at scale? Check out my web scraping actors on Apify or email spinov001@gmail.com for custom solutions.

Top comments (0)