---
title: "Llamada a API"
description: "¿Cómo crear APIs con LaunchFa.st?"
source: "https://www.launchfa.st/es/documentation/tutorials/api-call"
---

> **Site index for agents**
> Fetch https://www.launchfa.st/llms.txt to discover every page on this site.
> Every page is also available as Markdown by appending `.md` to its URL.

import { Tabs, TabItem } from '@astrojs/starlight/components'

<Tabs>

<TabItem label="Astro">En Launchfa.st, para facilitar las cosas a los desarrolladores, todas las APIs están ahora mismo dentro del directorio `src/pages/api`.</TabItem>

<TabItem label="SvelteKit">En Launchfa.st, para facilitar las cosas a los desarrolladores, todas las APIs están ahora mismo dentro del directorio `src/routes/api`.</TabItem>

</Tabs>

<Tabs>

<div style="height: 1px; background: #C1C1C150; width: 100%;" />

<TabItem label="Astro">
Cualquier archivo dentro de `src/pages` que termine en `.js`/`.ts` puede ser un endpoint de API.

Lo bueno de las APIs con Launchfa.st es que puedes usar las Web APIs sobre Astro. Esto asegura que el código se pueda reutilizar en cualquier número de proyectos, sin importar su stack.

Encuentra más sobre las rutas de API en Astro en https://docs.astro.build/en/core-concepts/endpoints.

</TabItem>

<TabItem label="SvelteKit">
Cualquier archivo dentro de `src/routes` que termine en `+server.ts` puede ser un endpoint de API.

Encuentra más sobre las rutas de API en SvelteKit en https://kit.svelte.dev/docs/routing#server.

</TabItem>

</Tabs>

<div style="height: 1px; background: #C1C1C150; width: 100%;" />

## Rutas de API protegidas

Para ilustrarlo, para crear una ruta de API que devuelva si un usuario ha iniciado sesión o no, sigue los pasos en la plantilla de LaunchFa.st:

<Tabs>

<TabItem label="Astro">

1. Crea un archivo: `src/pages/api/test.js`.
2. Añade el contenido de abajo a `test.js`:

```typescript
// Filename: src/pages/api/test.js

// Handle GET Request to /api/test
export async function GET({ request }) {
  // Get the user session from the 'request'
  const session = getSession(request)
  if (!session) {
    return new Response('unauthenticated', {
      status: 403,
    })
  }
  return new Response('authenticated', {
    status: 200,
  })
}

// Handle POST Request to /api/test
export async function POST({ request }) {
  // Parse the incoming form data from the 'request'
  const context = await request.formData()
  // Get the user session from the 'request'
  const session = getSession(request)
  if (!session) {
    return new Response('unauthenticated', {
      status: 403,
    })
  }
  return new Response('authenticated', {
    status: 200,
  })
}
```

</TabItem>

<TabItem label="SvelteKit">

1. Crea un archivo: `src/route/api/test/+server.ts`.
2. Añade el contenido de abajo a `+server.ts`:

```typescript
import { json, error } from '@sveltejs/kit'
import type { RequestEvent } from './$types'
import { getSession } from '@/lib/utils/auth'

// Handle GET Request to /api/test
export async function GET(event: RequestEvent) {
  // Get the user session from the 'request'
  const user = getSession(event.request)
  if (!user) {
    throw error(403)
  }
  // Extract the 'file' parameter from the request URL and do something
  const url = new URL(event.request.url)
  const file = url.searchParams.get('file')
}

// Handle POST Request to /api/test
export async function POST(event: RequestEvent) {
  // Get the user session from the 'request'
  const user = getSession(event.request)
  if (!user) {
    throw error(403)
  }
  if (user.email) {
    const data = await event.request.formData()
    // Get the 'file' field from the form data
    const file = data.get('file')
  }
}
```

</TabItem>

</Tabs>

<div style="height: 1px; background: #C1C1C150; width: 100%;" />
