Quickstarters
Feature Overview
How to Build a Backend for Astro?
21 мин
введение в этом руководстве о как построить бэкенд для astro , вы узнаете, как создать полный бэкенд с использованием back4app для вашего проекта astro мы рассмотрим интеграцию важных функций back4app, включая управление базами данных, облачные функции, аутентификацию, хранение файлов, запросы в реальном времени и многое другое — демонстрируя практический подход к созданию быстрых приложений с современными инструментами используя среду back4app, вы избегаете многих трудоемких задач, таких как настройка серверов или написание слоев безопасности с нуля эта настройка экономит ваше время и усилия, позволяя при этом определить конечную точку для надежной серверной логики вы также увидите, как включить переменные окружения в ваш проект astro, что упростит безопасное хранение учетных данных или других конфиденциальных данных после завершения вы получите масштабируемую структуру бэкенда для astro и узнаете, как обрабатывать данные с помощью rest, graphql, аутентификации пользователей, событий в реальном времени и многого другого вы будете готовы добавить свою собственную логику для любых реальных нужд, сохраняя при этом надежную основу безопасности предварительные требования аккаунт back4app и новый проект back4app начало работы с back4app https //www back4app com/docs/get started/new parse app проект astro настройка astro https //docs astro build/en/getting started/ убедитесь, что у вас есть базовая среда разработки astro и установлен node js установленный node js (версия 14 или выше) установка node js https //nodejs org/en/download/ знание концепций фронтенда и серверной стороны вы должны знать, как создавать или редактировать astro файлы, обрабатывать переменные окружения и выполнять простой post запрос с помощью fetch или аналогичной библиотеки убедитесь, что эти предварительные условия выполнены перед началом наличие вашего аккаунта back4app, среды astro и базовых знаний javascript поможет вам более плавно следовать этому руководству шаг 1 – создание нового проекта на back4app и подключение создайте новый проект войдите в свою учетную запись back4app нажмите новый приложение в вашей панели управления back4app и дайте ему имя (например, “astro backend tutorial”) получите учетные данные back4app в вашей панели управления back4app, в разделе настройки приложения или безопасность и ключи , запишите ваш id приложения , rest api ключ , и url сервера ( https //parseapi back4app com по умолчанию) эти переменные окружения будут использоваться в вашей интеграции с astro подключение astro к back4app через api поскольку мы не используем parse sdk напрямую, мы будем делать запросы, используя fetch или другую библиотеку из наших файлов astro храните свои учетные данные в переменных окружения для безопасности например, в файле env шаг 2 – настройка базы данных создание модели данных создайте модель данных вручную перейдите на панель управления back4app и нажмите на база данных создайте новый класс (например, “todo”), и добавьте поля, такие как title (string) и iscompleted (boolean) используйте ai агента для создания модели данных откройте ai агента из панели управления вашего приложения опишите вашу схему простым языком (например, “создайте новое приложение todo с классом, который имеет поля title и iscompleted ”) агент сгенерирует класс и поля для вас чтение и запись данных с использованием rest api с вашим моделью данных готова, давайте определим конечную точку внутри компонента astro или серверного файла для обработки post запроса и запроса на чтение например, вы можете создать файл, такой как src/pages/api/todos astro \ import type { apiroute } from 'astro'; export const post apiroute = async ({ request }) => { const body = await request json(); // "create" a todo const url = `${import meta env back4app server url}/classes/todo`; const response = await fetch(url, { method 'post', headers { 'x parse application id' import meta env back4app app id, 'x parse rest api key' import meta env back4app rest key, 'content type' 'application/json' }, body json stringify({ title body title, iscompleted body iscompleted }) }); const data = await response json(); return new response(json stringify(data), { status 200 }); }; export const get apiroute = async () => { // "read" all todos const url = `${import meta env back4app server url}/classes/todo`; const response = await fetch(url, { method 'get', headers { 'x parse application id' import meta env back4app app id, 'x parse rest api key' import meta env back4app rest key } }); const data = await response json(); return new response(json stringify(data), { status 200 }); }; \ \<html lang="en"> \<head> \<meta name="viewport" content="width=device width, initial scale=1 0" /> \<link rel="icon" type="image/svg+xml" href="/favicon svg" /> \<meta name="generator" content="astro generator" /> \<title>todos api\</title> \</head> \<body> \<h1>api for todo\</h1> \</body> \</html> этот пример использует переменные окружения ( import meta env ) для хранения ваших учетных данных back4app мы определяем два метода в одном файле export const post для создания todo и export const get для получения всех todos вы можете адаптировать это под структуру вашего компонента макета и другие страницы сайта чтение и запись данных с использованием graphql api аналогично, вы можете выполнять запросы graphql с ваших страниц astro \ export async function post({ request }) { const body = await request json(); const url = `${import meta env back4app server url}/graphql`; const query = ` mutation { createtodo(input { fields { title "${body title}" iscompleted ${body iscompleted} } }) { todo { objectid title iscompleted } } } `; const response = await fetch(url, { method 'post', headers { 'x parse application id' import meta env back4app app id, 'x parse rest api key' import meta env back4app rest key, 'content type' 'application/json' }, body json stringify({ query }) }); const data = await response json(); return new response(json stringify(data), { status 200 }); } \ \<html lang="en"> \<head> \<meta name="viewport" content="width=device width, initial scale=1 0" /> \<link rel="icon" type="image/svg+xml" href="/favicon svg" /> \<title>todos graphql\</title> \</head> \<body> \<h1>graphql endpoint for todos\</h1> \</body> \</html> работа с живыми запросами (необязательно) живые запросы позволяют получать обновления ваших данных в реальном времени чтобы использовать их, включите живые запросы в панели управления back4app и настройте соединение websocket однако, если вы создаете статический сайт на astro, вы можете интегрировать обновления в реальном времени через клиентские скрипты, указывающие на wss\ //your subdomain b4a io живые запросы могут отправлять изменения вашим подключенным клиентам всякий раз, когда записи создаются, обновляются или удаляются шаг 3 – применение безопасности с помощью acl и clp acl (списки управления доступом) и clp (разрешения на уровне класса) являются основополагающими для контроля доступа к данным вы можете настроить их в разделе база данных вашей панели управления back4app например ограничить чтение/запись только для аутентифицированных пользователей используйте acl для безопасности на уровне объекта используйте руководство по безопасности back4app https //www back4app com/docs/security/parse security для обеспечения защиты ваших данных вы также можете установить эти правила из панели управления, гарантируя, что даже если ваши rest вызовы открыты, только правильные учетные данные могут изменять или просматривать данные шаг 4 – написание функций облачного кода почему облачный код вы можете перенести ключевую бизнес логику на серверную сторону, избегая раскрытия секретов или необходимости поддерживать отдельные серверы облачный код может слушать триггеры (beforesave, aftersave) или обрабатывать пользовательские конечные точки пример // main js (cloud code) parse cloud define('greetuser', async (request) => { const username = request params name || 'guest'; return `hello, ${username}! welcome to the astro project `; }); parse cloud beforesave('todo', (request) => { const todo = request object; if (!todo get('title')) { throw 'todos must have a title '; } }); разверните это через back4app cli https //www back4app com/docs/local development/parse cli или непосредственно в разделе облачный код вашей панели управления back4app вызов функции из astro вы можете определить конечную точку, которая использует fetch для вызова вашей облачной функции \ export async function post({ request }) { const body = await request json(); const url = `${import meta env back4app server url}/functions/greetuser`; const response = await fetch(url, { method 'post', headers { 'x parse application id' import meta env back4app app id, 'x parse rest api key' import meta env back4app rest key, 'content type' 'application/json' }, body json stringify({ name body name }) }); const data = await response json(); return new response(json stringify(data), { status 200 }); } \ \<html lang="en"> \<head> \<meta name="viewport" content="width=device width, initial scale=1 0" /> \<link rel="icon" type="image/svg+xml" href="/favicon svg" /> \<title>cloud code greet\</title> \</head> \<body> \<h1>greet function endpoint\</h1> \</body> \</html> шаг 5 – настройка аутентификации back4app использует класс user для управления учетными записями пользователей с помощью rest вы можете управлять регистрацией, входом или выходом например, регистрация нового пользователя curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest key" \\ h "content type application/json" \\ d '{"username" "user1","password" "secret123","email" "user1\@example com"}' \\ https //parseapi back4app com/users вы можете воспроизвести эту логику из astro с помощью fetch аналогичным образом, используя переменные окружения после входа в систему пользователь получает токен сессии для последующих запросов социальный вход для социальных провайдеров (таких как google или apple) используйте специальные конечные точки или настройте oauth поток обратитесь к документации по входу с apple https //www back4app com/docs/platform/sign in with apple или другим руководствам по социальному входу, чтобы интегрировать расширенную аутентификацию это особенно полезно, если вы хотите позволить людям входить в вашу астро проект с минимальными трудностями шаг 6 – обработка хранения файлов чтобы хранить файлы в back4app, вы отправляете их с помощью rest api например curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest key" \\ h "content type image/png" \\ \ data binary "@path/to/local/image png" \\ https //parseapi back4app com/files/myimage png ответ содержит url файла вы можете связать этот url с записью, например, с объектом класса photo , чтобы отслеживать ссылки на файл в вашей базе данных вы также можете контролировать, кто может загружать файлы, настраивая параметры безопасности файлов в конфигурации вашего приложения шаг 7 – подтверждение электронной почты и сброс пароля включить подтверждение электронной почты в разделе настройки приложения на панели управления back4app включите подтверждение электронной почты и настройте шаблон письма для подтверждения настроить сброс пароля аналогично, настройте письма для сброса пароля и убедитесь, что у класса user есть действительные адреса электронной почты процесс когда пользователь запрашивает сброс из вашего проекта astro (через вызов api), back4app автоматически отправляет электронное письмо с безопасной ссылкой для изменения пароля шаг 8 – планирование задач с помощью облачных заданий используйте облачные задания для планирования повторяющегося обслуживания или других задач // main js parse cloud job('cleanupoldtodos', async () => { const query = new parse query('todo'); const now = new date(); const thirty days = 30 24 60 60 1000; query lessthan('createdat', new date(now thirty days)); const oldtodos = await query find({ usemasterkey true }); await parse object destroyall(oldtodos, { usemasterkey true }); return `deleted ${oldtodos length} old todos `; }); разверните ваш код, затем запланируйте задачу из настройки сервера > фоновые задачи в консоли back4app это автоматизирует задачи, такие как очистка данных, отправка электронных писем или любая рутинная функция, которую вы хотите выполнять через определенные интервалы шаг 9 – интеграция вебхуков вебхуки позволяют вам уведомлять внешние сервисы, когда в вашем приложении back4app происходят определенные события например, вы можете отправлять данные в slack каждый раз, когда создается новая задача todo перейдите в разное > вебхуки в вашей панели управления back4app добавьте вебхук с указанием url slack выберите событие (например, объект создан в классе todo) это позволяет потоку запросов/ответов поддерживать синхронизацию ваших внешних систем с данными вашего приложения на базе astro шаг 10 – изучение панели администратора back4app приложение back4app admin app является удобной панелью управления для редактирования данных оно особенно полезно для не технических членов команды, которым нужен прямой доступ к вашей базе данных включите приложение администратора в дополнительно > приложение администратора создайте администратора для безопасного доступа используйте эту панель для быстрого выполнения операций crud, проверки журналов или настройки более сложных параметров заключение вы успешно создали безопасный и эффективный бэкенд для проекта astro, используя back4app на протяжении этого руководства вы определили и настроили схему базы данных использовали rest и graphql api для чтения и записи данных обеспечили безопасность данных с помощью acl, clp и аутентификации пользователей расширили логику через cloud code и запланированные задачи управляли хранением файлов для изображений или документов интегрировали webhooks для внешних уведомлений изучили панель администратора для упрощенного управления данными этот подход подчеркивает, как построить надежный, масштабируемый и легкий в обслуживании бэкенд для astro используя переменные окружения, вы сохраняете свои учетные данные в безопасности, обеспечивая при этом гибкость вашего кода для будущего роста следующие шаги разверните ваш проект astro на хостинг платформах, которые поддерживают серверный рендеринг или среды на основе node добавьте расширенные функции , такие как контроль доступа на основе ролей или специализированные интеграции платежей, используя cloud code или внешние api оптимизируйте производительность с помощью стратегий кэширования и настройки содержимого вашего окна просмотра для улучшения пользовательского опыта просмотрите документацию back4app чтобы узнать о журналах, аналитике и более продвинутых мерах безопасности продолжайте исследовать функции реального времени с помощью live queries и создавайте по настоящему динамичные, совместные приложения