DEV Community

Alex Spinov
Alex Spinov

Posted on

Nuxt 4 Has a Free API That Most Developers Don't Know About

Nuxt 4 builds on the Nitro server engine to provide a powerful API layer with automatic imports, server routes, and edge-ready deployment.

Server API Routes

// server/api/posts.get.ts
export default defineEventHandler(async (event) => {
  const query = getQuery(event);
  const posts = await db.post.findMany({
    take: Number(query.limit) || 10,
    orderBy: { createdAt: "desc" }
  });
  return posts;
});

// server/api/posts.post.ts
export default defineEventHandler(async (event) => {
  const body = await readBody(event);
  const post = await db.post.create({ data: body });
  return post;
});
Enter fullscreen mode Exit fullscreen mode

Server Middleware

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

Composables with Server Data

// composables/usePosts.ts
export function usePosts() {
  return useFetch("/api/posts", {
    key: "posts",
    transform: (data) => data.map(formatPost)
  });
}
Enter fullscreen mode Exit fullscreen mode

Nitro Storage Layer

// server/api/cache.ts
export default defineEventHandler(async (event) => {
  const storage = useStorage();
  const cached = await storage.getItem("mydata");
  if (cached) return cached;
  const fresh = await fetchExpensiveData();
  await storage.setItem("mydata", fresh, { ttl: 3600 });
  return fresh;
});
Enter fullscreen mode Exit fullscreen mode

Key Features

  • File-based API routing with HTTP method suffixes
  • Nitro engine for edge deployment
  • Auto-imports for server utilities
  • TypeScript-first with full type inference
  • Hybrid rendering (SSR, SSG, ISR, SWR per route)

Need to scrape or monitor web data at scale? Check out my web scraping actors on Apify — ready-made tools that extract data from any website in minutes. Or email me at spinov001@gmail.com for custom solutions.

Top comments (0)