Как создать Backend для Elm?
В этом учебном пособии вы узнаете, как создать полный бэкенд для приложения Elm с использованием Back4App.
Мы пройдем через интеграцию основных функций Back4app – таких как управление базами данных, функции Cloud Code, REST и GraphQL API, аутентификация пользователей и запросы в реальном времени (Live Queries) – чтобы создать безопасный, масштабируемый и надежный бэкенд, который бесшовно взаимодействует с вашим фронтендом Elm.
Вы также увидите, как быстрая настройка и интуитивно понятная среда Back4app могут значительно сократить время и усилия по сравнению с ручной настройкой серверов и баз данных.
В процессе вы получите практический опыт работы с ключевыми функциями, включая расширенные функции безопасности, планирование задач с помощью Cloud Jobs и настройку вебхуков для внешних интеграций.
К концу этого учебника вы будете хорошо подготовлены, чтобы улучшить эту базовую настройку до готового к производству приложения или легко интегрировать пользовательскую логику и сторонние API по мере необходимости.
Чтобы завершить этот учебник, вам потребуется:
- Учетная запись Back4App и новый проект Back4app Начало работы с Back4app. Если у вас нет учетной записи, вы можете создать ее бесплатно. Следуйте приведенному выше руководству, чтобы подготовить ваш проект.
- Базовая среда разработки Elm Вы можете настроить это, установив Elm. Убедитесь, что у вас установлена Elm (0.19 или выше) на вашем компьютере.
- Знание Elm Официальная документация Elm. Если вы новичок в Elm, ознакомьтесь с официальной документацией или учебником для начинающих перед началом.
- Библиотека HTTP-запросов или подход GraphQL для Elm Мы будем использовать REST и GraphQL вызовы из Elm, так как нет официального SDK Parse для Elm. Убедитесь, что у вас настроены elm/http и, если необходимо, библиотека GraphQL.
Убедитесь, что у вас есть все эти предварительные требования перед началом. Наличие вашего проекта Back4app и готовой локальной среды Elm поможет вам легче следовать за процессом.
Первый шаг в создании вашего Elm бэкенда на Back4app — это создание нового проекта. Если вы еще не создали его, выполните следующие шаги:
- Войдите в свою учетную запись Back4app.
- Нажмите кнопку “Новое приложение” в вашей панели управления Back4app.
- Дайте вашему приложению имя (например, “Elm-Backend-Tutorial”).
![Document image Document image](https://images.archbee.com/yD3zCY-NNBBIfd0uqcfR5/drXO0UqsgxhFvRDiVmsMb_image.png?format=webp)
После создания проекта вы увидите его в списке на вашей панели управления Back4app. Этот проект станет основой для всех конфигураций бэкенда, обсуждаемых в этом руководстве.
Back4app использует платформу Parse для управления вашими данными, предоставления функций в реальном времени, обработки аутентификации пользователей и многого другого. Поскольку нет официального SDK Parse для Elm, мы будем использовать REST или GraphQL вызовы из нашего Elm приложения для связи с бэкендом Back4app.
Получите ваши ключи Parse: В вашей панели управления Back4app перейдите в раздел “Настройки приложения” или “Безопасность и ключи”, чтобы найти ваш ID приложения, REST API ключ, и GraphQL Endpoint. Вы также найдете URL сервера Parse (часто https://parseapi.back4app.com).
![Document image Document image](https://images.archbee.com/yD3zCY-NNBBIfd0uqcfR5/F9teHXd_M8ERn1OPGirbi_image.png?format=webp)
Из Elm вы можете сохранить эти учетные данные в конфигурационном файле или модуле. Например:
Вы будете использовать эти значения всякий раз, когда будете делать HTTP-запросы к Back4app из Elm. Завершив этот шаг, вы установили безопасное соединение между вашим фронтендом на Elm и бэкендом Back4app.
С вашим проектом Back4app настроенным, вы теперь можете начинать сохранять и извлекать данные через REST или GraphQL из Elm. Для простого примера мы продемонстрируем, как создать и получить Todo элемент.
Мы будем использовать elm/http для выполнения REST-запросов. Вот упрощенный пример, как создать элемент Todo:
Затем вы можете вызвать createTodo или fetchTodos в вашей функции обновления Elm, обработать Http ответы и интегрировать данные в модель вашего приложения.
Если вы предпочитаете тестировать или хотите делать быстрые вызовы вне Elm, вы можете использовать cURL:
Back4app также предоставляет интерфейс GraphQL. Ниже приведен пример мутации GraphQL для создания Todo:
В Elm вы можете использовать библиотеку GraphQL или вручную составлять ваши HTTP-запросы для отправки этих мутаций и запросов, очень похоже на то, как мы использовали elm/http выше.
По умолчанию Parse позволяет создание схемы на лету, но вы также можете определить свои классы и типы данных в панели управления Back4app для большего контроля.
- Перейдите в раздел “База данных” на вашей панели управления Back4app.
- Создайте новый класс (например, “Todo”) и добавьте соответствующие столбцы, такие как заголовок (String) и isCompleted (Boolean).
![Создать новый класс Создать новый класс](https://images.archbee.com/yD3zCY-NNBBIfd0uqcfR5/iaZ_P-7epc_LSMFIPlaZV_image.png?format=webp)
Back4app также поддерживает различные типы данных: String, Number, Boolean, Object, Date, File, Pointer, Array, Relation, GeoPoint, и Polygon. Вы можете выбрать подходящий тип для каждого поля или позволить Parse автоматически создать эти столбцы, когда вы впервые сохраняете объект из вашего приложения Elm, используя подход REST или GraphQL.
![Создать столбец Создать столбец](https://images.archbee.com/yD3zCY-NNBBIfd0uqcfR5/DEh9vyxdBTZcslXxkVQMA_image.png?format=webp)
Back4app предлагает AI-агента, который может помочь вам разработать вашу модель данных:
- Откройте AI-агента из вашей панели управления приложением или в меню.
- Опишите вашу модель данных простым языком (например, “Пожалуйста, создайте новое приложение ToDo на back4app с полной схемой класса.”).
- Позвольте AI-агенту создать схему для вас.
![Document image Document image](https://images.archbee.com/yD3zCY-NNBBIfd0uqcfR5/0snNZwHWzxuXlNu30n7IA_image.png?format=webp)
Использование AI-агента может сэкономить ваше время при настройке архитектуры данных и обеспечить согласованность в вашем приложении.
Если у вас есть реляционные данные – скажем, объект Категория который указывает на несколько Задач – вы можете использовать Указатели или Связи в Parse. Из Elm вы можете управлять этими отношениями, включая поля указателя или связи в ваших REST или GraphQL вызовах.
Например, чтобы добавить указатель через REST:
Когда вы выполняете запрос, вы также можете включить данные указателя, используя параметр ?include=category в REST или используя include в запросах GraphQL.
Для обновлений в реальном времени Back4app предоставляет Живые запросы. Хотя в данный момент нет нативного пакета Elm для живых запросов Parse, вы все равно можете включить его в своей панели управления Back4app:
- Включите живые запросы в настройках вашего приложения Server Settings.
- Используйте конечную точку WebSocket для живых запросов в специализированном клиенте.
Если вы хотите интегрировать живые запросы с Elm, вы можете использовать elm-websocket (или другой индивидуальный подход), чтобы подписаться на изменения. Однако это требует более сложной настройки, так как в данный момент не существует официального клиента Elm для живых запросов.
Back4app серьезно относится к безопасности, предоставляя Списки управления доступом (ACL) и Разрешения на уровне класса (CLP). Эти функции позволяют ограничить, кто может читать или записывать данные на уровне отдельного объекта или класса, обеспечивая, чтобы только авторизованные пользователи могли изменять ваши данные.
![Document image Document image](https://images.archbee.com/yD3zCY-NNBBIfd0uqcfR5/PdAyrw1nqA1QQJFuCc-4t_image.png?format=webp)
ACL применяется к отдельным объектам, чтобы определить, какие пользователи, роли или общественность могут выполнять операции чтения/записи. Вы можете настроить ACL из Elm, включив _ACL свойство в ваш JSON при создании или обновлении объектов через REST или GraphQL.
Например, чтобы создать приватную задачу, вы можете установить:
Это предотвращает чтение или изменение объекта кем-либо, кроме этого пользователя.
![Редактировать ACL Редактировать ACL](https://images.archbee.com/yD3zCY-NNBBIfd0uqcfR5/3YNfxEcv7CKdLC6ca8my6_image.png?format=webp)
CLPs управляют стандартными разрешениями для всего класса, такими как возможность чтения или записи класса публично, или если только определенные роли могут получить к нему доступ.
- Перейдите в свою панель управления Back4app, выберите свое приложение и откройте раздел База данных.
- Выберите класс (например, “Todo”).
- Откройте вкладку Разрешения на уровне класса.
- Настройте свои стандартные параметры, такие как “Требуется аутентификация” для чтения или записи, или “Нет доступа” для публичного.
![Document image Document image](https://images.archbee.com/yD3zCY-NNBBIfd0uqcfR5/MF1Uf7HSJF03Xg6djap9m_image.png?format=webp)
Эти разрешения устанавливают базовые параметры, в то время как ACL уточняют разрешения для отдельных объектов. Надежная модель безопасности обычно сочетает как CLP (широкие ограничения), так и ACL (точные ограничения для каждого объекта). Для получения дополнительной информации перейдите к Руководству по безопасности приложений.
Облачный код – это функция среды Parse Server, которая позволяет вам запускать пользовательский JavaScript код на стороне сервера – без необходимости управлять серверами или инфраструктурой. Написав облачный код, вы можете расширить свой бэкенд Back4app дополнительной бизнес-логикой, валидациями, триггерами и интеграциями, которые работают безопасно и эффективно на сервере Parse.
Когда вы пишете облачный код, вы обычно помещаете свои функции JavaScript, триггеры и любые необходимые модули NPM в файл main.js (или app.js). Этот файл затем развертывается в вашем проекте Back4app, который выполняется в среде Parse Server.
Весь облачный код для вашего приложения Back4app выполняется внутри сервера Parse, который управляется Back4app, поэтому вам не нужно беспокоиться о техническом обслуживании сервера, масштабировании или предоставлении ресурсов. Каждый раз, когда вы обновляете и развертываете свой файл main.js, работающий сервер Parse обновляется с вашим последним кодом.
Вы можете вызывать эти функции Cloud Code из Elm, сделав REST-запрос к:
https://parseapi.back4app.com/functions/fetchExternalData
- Бизнес-логика: Агрегация данных, обработка платежей и т.д.
- Валидация данных: Обеспечение соответствия определенных полей критериям перед сохранением.
- Триггеры: Запуск кода до или после действий сохранения/обновления/удаления.
- Интеграции: Подключение к внешним API или сервисам.
- Обеспечение безопасности: Проверка ролей или разрешений пользователей перед выполнением критических операций.
Развертывание через Back4app CLI:
- Установите CLI (пример для Linux/MacOS):
- Настройте ваш ключ аккаунта:
- Разверните ваш облачный код:
Развертывание через Панель управления:
- В панели управления вашего приложения перейдите в Cloud Code > Functions.
- Скопируйте/вставьте функцию в редактор main.js.
- Нажмите Deploy.
![Document image Document image](https://images.archbee.com/yD3zCY-NNBBIfd0uqcfR5/pGxBQFBhk4prMc8Ub-uho_image.png?format=webp)
Из Elm вы можете вызвать облачную функцию, сделав POST-запрос:
Вы также можете вызывать облачные функции через GraphQL:
Back4app использует класс Parse User в качестве основы для аутентификации. По умолчанию Parse обрабатывает хеширование паролей, токены сессий и безопасное хранение. Вы можете создавать и входить в систему пользователям через REST или GraphQL из вашего приложения Elm.
Back4app и Parse могут интегрироваться с популярными провайдерами OAuth, такими как Google, Facebook, или Apple. Обычно вы настраиваете этих провайдеров в панели управления Back4app, а затем делаете необходимые запросы из Elm. Обратитесь к Документация по социальному входу для подробных шагов настройки.
- Перейдите в настройки электронной почты в вашей панели управления Back4app.
- Включите подтверждение электронной почты для обеспечения проверки новых пользователей на владение их адресами электронной почты.
- Настройте адрес отправителя, шаблоны электронной почты и ваш собственный домен, если это необходимо.
Parse включает класс Parse.File для обработки загрузки файлов, которые Back4app хранит безопасно. Поскольку мы используем REST из Elm, мы можем выполнить загрузку файла с несколькими частями или прикрепить файл в кодировке base64.
После загрузки вы получите URL файла в ответе. Вы можете сохранить этот URL в поле класса Parse или отобразить его в вашем приложении Elm по мере необходимости.
Parse Server предоставляет конфигурации для управления безопасностью загрузки файлов. Например:
Облачные задания в Back4app позволяют вам планировать и выполнять рутинные задачи на вашем сервере, такие как очистка старых данных или отправка периодических электронных писем. Например, задание для удаления задач, старше 30 дней, может выглядеть так:
- Разверните ваш облачный код с новым заданием (через CLI или панель управления).
- Перейдите в панель управления Back4app > Настройки приложения > Настройки сервера > Фоновые задания.
- Запланируйте выполнение задания ежедневно или по мере необходимости.
![Запланировать облачную задачу Запланировать облачную задачу](https://images.archbee.com/yD3zCY-NNBBIfd0uqcfR5/5wG60YnWIST74erryTb-u_image.png?format=webp)
Вебхуки позволяют вашему приложению Back4app отправлять HTTP-запросы на внешний сервис, когда происходят определенные события. Это мощный инструмент для интеграции с системами третьих сторон, такими как платежные шлюзы (например, Stripe), инструменты email-маркетинга или аналитические платформы.
- Перейдите к настройкам вебхуков в вашей панели управления Back4app > Еще > Вебхуки и затем нажмите на Добавить вебхук.
- Настройте триггеры для указания, какие события в ваших классах Back4app или функциях облачного кода будут вызывать вебхук.
![Добавление вебхука Добавление вебхука](https://images.archbee.com/yD3zCY-NNBBIfd0uqcfR5/morUMdwsAbVQ1EmBfUfAA_image.png?format=webp)
Например, если вы хотите уведомлять канал Slack каждый раз, когда создается новая задача:
- Создайте приложение Slack, которое принимает входящие вебхуки.
- Скопируйте URL вебхука Slack.
- В вашей панели управления Back4app установите конечную точку на этот URL Slack для события “Новая запись в классе Todo.”
- Добавьте пользовательские HTTP-заголовки или полезные нагрузки, если это необходимо.
![Вебхук BeforeSave Вебхук BeforeSave](https://images.archbee.com/yD3zCY-NNBBIfd0uqcfR5/fXvy4eRzabyWmN80OMyqW_image.png?format=webp)
Административное приложение Back4app Admin App — это веб-интерфейс управления, предназначенный для нетехнических пользователей, чтобы выполнять операции CRUD и обрабатывать рутинные задачи с данными без написания кода. Он предоставляет ориентированный на модели, дружественный к пользователю интерфейс, который упрощает администрирование баз данных, управление пользовательскими данными и операции на уровне предприятия.
Включите его, перейдя в App Dashboard > More > Admin App и нажав кнопку “Включить административное приложение”.
![Включить административное приложение Включить административное приложение](https://images.archbee.com/yD3zCY-NNBBIfd0uqcfR5/5BTk1ntDh9JLXurObmm_o_image.png?format=webp)
Создайте первого администратора (имя пользователя/пароль), что автоматически создаст новую роль (B4aAdminUser) и классы (B4aSetting, B4aMenuItem и B4aCustomField) в схеме вашего приложения.
![Document image Document image](https://images.archbee.com/yD3zCY-NNBBIfd0uqcfR5/u-pU1yBJJxa9KEM2psjXS_image.png?format=webp)
Выберите поддомен для доступа к административному интерфейсу и завершите настройку.
![Document image Document image](https://images.archbee.com/yD3zCY-NNBBIfd0uqcfR5/_2b71RLDTlQW468017saY_image.png?format=webp)
Войдите с использованием учетных данных администратора, которые вы создали, чтобы получить доступ к новой панели управления административным приложением.
![Document image Document image](https://images.archbee.com/yD3zCY-NNBBIfd0uqcfR5/jOFU8C0qiFm6wiVZXS9l0_image.png?format=webp)
После активации приложение Back4app Admin упрощает просмотр, редактирование или удаление записей из вашей базы данных – без необходимости прямого использования панели управления Parse или серверного кода. С настраиваемыми контролями доступа вы можете безопасно делиться этим интерфейсом с членами команды или клиентами, которым нужен понятный способ управления данными.
Следуя этому подробному руководству, вы:
- Создали безопасный бэкенд для приложения Elm на Back4app.
- Настроили базу данных с классами схем, типами данных и отношениями.
- Интегрировали возможности запросов в реальном времени (Live Queries) для немедленных обновлений данных.
- Применили меры безопасности с использованием ACL и CLP для защиты и управления доступом к данным.
- Реализовали функции Cloud Code для выполнения пользовательской бизнес-логики на стороне сервера.
- Настроили аутентификацию пользователей с поддержкой проверки электронной почты и сброса паролей.
- Управляли загрузкой файлов и их получением, с дополнительными контролями безопасности файлов.
- Запланировали Cloud Jobs для автоматизированных фоновых задач.
- Использовали Webhooks для интеграции с внешними сервисами.
- Изучили панель администратора Back4app для управления данными.
С надежным фронтендом на Elm и мощным бэкендом Back4app вы теперь хорошо подготовлены для разработки функциональных, масштабируемых и безопасных приложений. Продолжайте исследовать более продвинутые функции, интегрируйте свою бизнес-логику и используйте возможности Back4app, чтобы сэкономить вам бесчисленные часы на администрировании серверов и баз данных. Удачного кодирования!
- Создайте готовое к производству приложение на Elm путем расширения этого бэкенда для обработки более сложных моделей данных, стратегий кэширования и оптимизации производительности.
- Интегрируйте продвинутые функции такие как специализированные потоки аутентификации, контроль доступа на основе ролей или внешние API (например, платежные шлюзы).
- Посмотрите официальную документацию Back4app для более глубокого изучения вопросов безопасности, настройки производительности и анализа логов.
- Изучите другие учебные пособия по приложениям для чата в реальном времени, IoT панелям управления или услугам на основе местоположения. Вы можете комбинировать техники, изученные здесь, с API третьих сторон для создания сложных, реальных приложений.
![Doc contributor](https://s3.amazonaws.com/archbee-animals/cat.png)