Эндпойнты
Astro позволяет создавать пользовательские эндпойнты (точки входа) для обслуживания любого типа данных. Вы можете использовать их для генерации изображений, предоставления RSS-документов или в качестве API-маршрутов для создания полноценного бэкенда вашего сайта.
На статических сайтах эндпойнты вызываются во время сборки для создания файлов. В режиме рендеринга по запросу (SSR) они превращаются в живые серверные маршруты.
Эндпойнты для статических файлов
Заголовок раздела «Эндпойнты для статических файлов»Чтобы создать эндпойнт, добавьте файл .js или .ts в папку src/pages/. Расширение скрипта будет удалено, поэтому имя файла должно включать желаемое расширение данных. Например, src/pages/data.json.ts создаст эндпойнт /data.json.
Эндпойнты экспортируют функцию GET, которая возвращает объект Response.
// Результат: /builtwith.jsonexport async function GET() { return new Response( JSON.stringify({ name: "Astro", url: "https://astro.build/", }), );}Вы также можете отдавать бинарные данные, например изображения:
export async function GET() { const response = await fetch("https://docs.astro.build/assets/full-logo-light.png"); return new Response(await response.arrayBuffer());}Серверные эндпойнты (API-маршруты)
Заголовок раздела «Серверные эндпойнты (API-маршруты)»В режиме SSR эндпойнты вызываются при каждом запросе. Это позволяет создавать API, которые работают с заголовками, куками и защищенно выполняют код на сервере.
Если ваш проект по умолчанию статический, вы можете включить серверный режим для конкретного эндпойнта:
export const prerender = false;
export async function GET({ params, request }) { return new Response(JSON.stringify({ message: "Это серверный ответ" }));}HTTP-методы
Заголовок раздела «HTTP-методы»Вы можете экспортировать функции для различных методов: POST, PUT, DELETE, PATCH. Функция ALL будет обрабатывать любые методы, для которых нет отдельного экспорта.
import type { APIRoute } from 'astro';
export const POST: APIRoute = async ({ request }) => { const body = await request.json(); return new Response(JSON.stringify({ received: body.name }), { status: 200 });}Перенаправления
Заголовок раздела «Перенаправления»В контексте эндпойнта доступна утилита redirect(), работающая аналогично Astro.redirect:
export async function GET({ redirect }) { return redirect('/new-location', 307);}