Quickstarters
Feature Overview
How to Build a Backend for Elixir?
40 мин
введение в этом учебном пособии вы узнаете как создать бэкенд для elixir с использованием back4app мы пройдем через интеграцию основных функций back4app — таких как управление базами данных, функции cloud code, rest и graphql api, аутентификация пользователей и запросы в реальном времени (live queries) — чтобы создать безопасный, масштабируемый и надежный бэкенд elixir, работающий на виртуальной машине erlang (beam) и использующий otp (erlang otp), известен своей отказоустойчивой, конкурентной средой, которая хорошо сочетается с back4app для формирования современной, высокопроизводительной инфраструктуры вы увидите, как быстрая настройка back4app и интуитивно понятная среда могут значительно сократить ваше время и усилия по сравнению с ручной настройкой серверов и баз данных это включает в себя использование сопоставления шаблонов, а также интеграцию с веб фреймворком по вашему выбору в elixir к концу этого учебного пособия у вас будет прочная основа, которую вы сможете расширить в готовое к производству приложение или улучшить с помощью пользовательской логики и сторонних api предварительные требования чтобы завершить этот учебник, вам потребуется учетная запись back4app и новый проект back4app начало работы с back4app https //www back4app com/docs/get started/new parse app если у вас нет учетной записи, вы можете создать ее бесплатно следуйте приведенному выше руководству, чтобы подготовить ваш проект базовая среда разработки elixir убедитесь, что у вас установлен elixir на вашем компьютере если вы планируете использовать веб фреймворк, такой как phoenix, смотрите руководство по установке phoenix https //hexdocs pm/phoenix/installation html для справки знание концепций elixir официальная документация elixir https //elixir lang org/docs html если вы новичок в elixir, ознакомьтесь с этими ресурсами или учебником для начинающих перед началом убедитесь, что у вас есть все эти предварительные условия перед началом наличие вашего проекта back4app и готовой локальной среды elixir поможет вам следовать более плавно шаг 1 – создание нового проекта на back4app и подключение создать новый проект первый шаг в создании бэкенда для elixir на back4app – это создание нового проекта если вы еще не создали его, выполните следующие шаги войдите в свою учетную запись back4app нажмите кнопку “новое приложение” в вашей панели управления back4app дайте вашему приложению имя (например, “elixir backend tutorial”) после создания проекта вы увидите его в своем дашборде back4app этот проект станет основой для всех конфигураций бэкенда, обсуждаемых в этом руководстве подключение через rest или graphql back4app использует платформу parse в качестве основы в данный момент для elixir нет официального sdk parse вместо этого вы можете легко подключиться к back4app, используя rest или graphql api в вашем проекте elixir вы получите ваш application id и rest или graphql ключи в разделе “настройки приложения” или “безопасность и ключи” в дашборде back4app настройте http запросы, используя библиотеку elixir, такую как httpoison https //hex pm/packages/httpoison или tesla https //hex pm/packages/tesla например, чтобы сохранить учетные данные в конфигурационном файле ( config/dev exs или аналогичном) config \ my app, \ b4a, app id "your application id", rest key "your rest api key", server url "https //parseapi back4app com" затем вы можете ссылаться на эти учетные данные в вашем коде для выполнения rest запросов в течение этого руководства мы покажем, как взаимодействовать с базой данных back4app, системой пользователей и другими функциями, используя стандартные http или graphql запросы шаг 2 – настройка базы данных создание модели данных в back4app данные хранятся в классах вы можете создать новый класс в панели управления back4app перейдите в раздел “база данных” в вашей панели управления back4app создайте новый класс (например, “todo”) и добавьте соответствующие столбцы, такие как заголовок (string) и iscompleted (boolean) создание модели данных с помощью ai агента back4app также предоставляет ai агента, который поможет вам описать и создать вашу модель данных откройте ai агента из панели управления вашим приложением или из меню опишите вашу модель данных простым языком (например, “пожалуйста, создайте новое приложение todo с полной схемой класса ”) позвольте ai агенту создать схему автоматически чтение и запись данных с использованием sdk (если применимо) поскольку elixir не имеет официального sdk parse, мы пропустим прямое использование sdk вместо этого мы продемонстрируем rest , graphql , и live queries подходы ниже чтение и запись данных с использованием rest api установите http клиент, такой как httpoison в вашем mix exs defp deps do \[ {\ httpoison, " > 1 8"} ] end затем выполните mix deps get чтобы создать (сохранить) объект todo из вашего приложения elixir defmodule myapp todo do @moduledoc false require logger alias myapp config def create todo(title, is completed) do url = config server url() <> "/classes/todo" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] body = jason encode!(%{"title" => title, "iscompleted" => is completed}) case httpoison post(url, body, headers) do {\ ok, %httpoison response{status code 201, body resp body}} > logger info("todo created #{resp body}") {\ ok, resp body} {\ ok, %httpoison response{status code status, body error body}} > logger error("error creating todo (#{status}) #{error body}") {\ error, error body} {\ error, error} > logger error("http error #{inspect(error)}") {\ error, error} end end end и чтобы запросить ваши объекты todo def fetch todos() do url = config server url() <> "/classes/todo" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()} ] httpoison get(url, headers) end чтение и запись данных с использованием graphql api вы также можете взаимодействовать через graphql например, создание todo mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } в elixir вы также можете отправить это с помощью http клиента graph query = """ mutation { createtodo(input { fields { title "new from graphql", iscompleted false } }) { todo { objectid title } } } """ url = config server url() <> "/graphql" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] httpoison post(url, jason encode!(%{"query" => graph query}), headers) работа с живыми запросами (необязательно) для обновлений в реальном времени back4app предлагает живые запросы вы можете включить живые запросы в настройках вашего приложения настройки сервера поскольку в данный момент нет нативной библиотеки клиента elixir parse, вы обычно подключаетесь через канал phoenix или любой пользовательский клиент websocket к предоставленному wss\ //your subdomain here b4a io конечному пункту это может быть более сложным, требуя пользовательского кода для обработки подписок, сообщений и т д шаг 3 – применение безопасности с помощью acl и clp краткий обзор back4app предлагает списки контроля доступа (acl) и разрешения на уровне класса (clp) для защиты и управления доступом к данным acl применяются к отдельным объектам, в то время как clp применяются ко всему классу пошагово разрешения на уровне класса (clps) в вашей панели управления back4app, в разделе база данных , выберите класс (например, “todo”) и откройте вкладку разрешения на уровне класса настройте параметры (например, “требуется аутентификация” или “нет доступа” для публичных пользователей) настройка acl при создании или обновлении объекта вы можете отправить данные acl в вашем rest или graphql запросе например, укажите поле acl в json, если вам нужен детальный контроль на уровне объекта для получения дополнительной информации посетите руководство по безопасности приложений https //www back4app com/docs/security/parse security шаг 4 – написание функций облачного кода почему облачный код облачный код позволяет вам выполнять серверную логику без управления собственными серверами с elixir вы обычно полагаетесь на otp для параллелизма, но здесь вы можете просто создать javascript облачный код в back4app для обработки валидации, триггеров или пользовательской бизнес логики этот код выполняется на parse server, поэтому вы можете сосредоточить свой код elixir на задачах клиента или микросервиса, в то время как основная работа выполняется в облачном коде пример функции в вашем main js на панели управления back4app или с помощью cli // main js parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); развертывание разверните через back4app cli https //www back4app com/docs/local development/parse cli или вставив в панель управления под cloud code > functions и нажав deploy вызов cloud code из elixir вы можете использовать defmodule myapp cloudfunctions do alias myapp config def calculate text length(text) do url = config server url() <> "/functions/calculatetextlength" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] body = jason encode!(%{text text}) httpoison post(url, body, headers) end end шаг 5 – настройка аутентификации включить или настроить аутентификацию back4app использует класс user для аутентификации вы можете легко управлять регистрацией, входом и сбросом пароля из elixir вы обычно будете использовать rest вызовы defmodule myapp auth do alias myapp config def sign up user(username, password, email) do url = config server url() <> "/users" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] body = jason encode!(%{ username username, password password, email email }) httpoison post(url, body, headers) end def log in user(username, password) do url = config server url() <> "/login?username=#{username}\&password=#{password}" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()} ] httpoison get(url, headers) end end социальный вход back4app поддерживает интеграцию с google, apple, facebook и другими в большинстве случаев вы будете направлять пользователей в поток oauth, а затем использовать токены, возвращаемые этими провайдерами, для завершения входа в parse см документация по социальному входу https //www back4app com/docs/platform/sign in with apple для получения подробной информации шаг 6 – обработка хранения файлов настройка хранения файлов back4app безопасно хранит файлы из elixir вы можете загружать файлы через rest defmodule myapp filestorage do alias myapp config require logger def upload file(file path) do file name = path basename(file path) url = config server url() <> "/files/#{file name}" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/octet stream"} ] body = file read!(file path) case httpoison post(url, body, headers) do {\ ok, %httpoison response{status code 201, body resp body}} > logger info("file uploaded #{resp body}") {\ ok, resp body} error > logger error("error uploading file #{inspect(error)}") error end end end вы получите ответ в формате json с url файла, который вы можете сохранить в классе (например, фото ) для справки соображения безопасности вы можете настроить, кто может загружать файлы в fileupload настройках вашего проекта back4app, ограничив загрузку только для аутентифицированных пользователей, если это необходимо шаг 7 – подтверждение электронной почты и сброс пароля обзор подтверждение электронной почты гарантирует, что пользователи владеют адресом электронной почты, использованным при регистрации сброс пароля позволяет им безопасно восстанавливать учетные записи оба этих функционала встроены в back4app конфигурация панели управления back4app включите подтверждение электронной почты в настройках вашего приложения «настройки приложения» или «аутентификация» настройте адрес отправителя и шаблоны электронной почты включите сброс пароля чтобы пользователи могли сбрасывать его по ссылке, отправленной им по электронной почте код/реализация после включения в панели управления вы можете инициировать сброс пароля defmodule myapp auth do def request password reset(email) do url = config server url() <> "/requestpasswordreset" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] body = jason encode!(%{email email}) httpoison post(url, body, headers) end end шаг 8 – планирование задач с помощью облачных заданий какие работы в облаке работы в облаке позволяют вам автоматизировать рутинные задачи, такие как очистка старых данных или отправка периодических электронных писем вы пишете их в cloud code пример // main js parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo'); const query = new parse query(todo); const now = new date(); const thirty days = 30 24 60 60 1000; const cutoff = new date(now thirty days); query lessthan('createdat', cutoff); try { const oldtodos = await query find({ usemasterkey true }); await parse object destroyall(oldtodos, { usemasterkey true }); return `deleted ${oldtodos length} old todos `; } catch (err) { throw new error('error during cleanup ' + err message); } }); разверните код перейдите в панель управления back4app > настройки приложения > настройки сервера > фоновые задачи запланируйте выполнение задачи ежедневно или с частотой по вашему выбору шаг 9 – интеграция вебхуков определение вебхуки позволяют вашему приложению back4app отправлять http запросы на внешний сервис (например, канал slack или stripe), когда происходят определенные события конфигурация перейдите к конфигурации вебхуков в вашей панели управления back4app > дополнительно > вебхуки установите конечную точку (например, https //your service com/webhook endpoint ) настройте триггеры такие как “новая запись в классе todo ” пример если вы хотите отправлять данные в slack каждый раз, когда создается задача todo, вы можете добавить новый вебхук, указывающий на ваш url для входящего вебхука slack вы также можете определить вебхуки в облачном коде, отправляя пользовательские http запросы в триггерах, таких как aftersave шаг 10 – изучение панели администратора back4app где это найти приложение back4app admin app – это удобный интерфейс для управления вашими данными вы можете включить его из app dashboard > more > admin app функции создать первого администратора , который настраивает роль b4aadminuser и дополнительные классы назначить поддомен для доступа к интерфейсу администратора войти для просмотра и управления данными в простом интерфейсе заключение следуя этому руководству о том, как создать бэкенд для elixir с помощью back4app, вы создали безопасный бэкенд на платформе back4app, используя elixir для интеграции настроили базу данных с классами, типами данных и отношениями использовали rest/graphql для взаимодействия с вашими данными из elixir применили безопасность с использованием acl и clp добавили пользовательскую логику с помощью функций cloud code настроили аутентификацию пользователей с проверкой электронной почты и сбросом паролей обработали хранение файлов и их извлечение запланировали фоновые задачи для автоматизации интегрировали внешние сервисы с помощью вебхуков изучили панель администратора back4app для удобного управления данными с моделью параллелизма elixir (работающей на erlang vm) и otp, в сочетании с масштабируемыми и гибкими услугами back4app, вы можете создавать высоконадежные бэкенды продолжайте изучать более продвинутые функции, интегрируйте свою бизнес логику и позвольте back4app помочь вам справиться с тяжелой работой следующие шаги создайте приложение elixir, готовое к производству , наложив этот бэкенд на ваш предпочтительный веб фреймворк elixir/phoenix интегрируйте расширенные функции такие как контроль доступа на основе ролей или сторонние api (платежные шлюзы, сервисы обмена сообщениями) изучите официальную документацию back4app по вопросам безопасности, журналам, настройке производительности и многому другому посмотрите другие учебники по приложениям в реальном времени, iot панелям управления или услугам на основе местоположения с сопоставлением шаблонов и параллелизмом otp у вас есть все необходимое для решения широкого спектра задач!