DEV Community

Alex Spinov
Alex Spinov

Posted on

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

SvelteKit, the full-stack framework built on Svelte, offers powerful server-side capabilities that many developers overlook. Beyond its file-based routing and SSR, SvelteKit provides a robust API layer that can replace your entire backend.

What Makes SvelteKit's API Special?

SvelteKit's +server.js files create API endpoints that run on the server. Combined with form actions and load functions, you get a complete backend without deploying a separate server.

Quick Start

npm create svelte@latest my-app
cd my-app
npm install
npm run dev
Enter fullscreen mode Exit fullscreen mode

Creating API Endpoints

// src/routes/api/users/+server.js
import { json } from "@sveltejs/kit";

export async function GET({ url }) {
  const limit = url.searchParams.get("limit") || 10;
  const users = await db.getUsers(limit);
  return json(users);
}

export async function POST({ request }) {
  const data = await request.json();
  const user = await db.createUser(data);
  return json(user, { status: 201 });
}
Enter fullscreen mode Exit fullscreen mode

Server-Side Load Functions

// src/routes/dashboard/+page.server.js
export async function load({ cookies, locals }) {
  const session = cookies.get("session");
  if (!session) throw redirect(303, "/login");

  return {
    user: locals.user,
    stats: await getStats(locals.user.id)
  };
}
Enter fullscreen mode Exit fullscreen mode

Form Actions (No JS Required)

// src/routes/login/+page.server.js
export const actions = {
  default: async ({ request, cookies }) => {
    const data = await request.formData();
    const email = data.get("email");
    const password = data.get("password");

    const user = await authenticate(email, password);
    if (!user) return fail(400, { email, incorrect: true });

    cookies.set("session", user.token, { path: "/" });
    throw redirect(303, "/dashboard");
  }
};
Enter fullscreen mode Exit fullscreen mode

Hooks for Middleware

// src/hooks.server.js
export async function handle({ event, resolve }) {
  const session = event.cookies.get("session");
  if (session) {
    event.locals.user = await getUserFromSession(session);
  }
  return resolve(event);
}
Enter fullscreen mode Exit fullscreen mode

Key Features

  • File-based routing with API endpoints
  • Form actions that work without JavaScript
  • Server-side rendering with streaming
  • Adapter system for any deployment target (Node, Vercel, Cloudflare)
  • Built-in security with CSRF protection

Resources


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)