Quickstarters
Feature Overview
Como Construir um Backend para Elixir?
40 min
introdução neste tutorial, você aprenderá como construir um backend para elixir usando o back4app vamos percorrer a integração de recursos essenciais do back4app—como gerenciamento de banco de dados, funções de código em nuvem, apis rest e graphql, autenticação de usuários e consultas em tempo real (consultas ao vivo)—para criar um backend seguro, escalável e robusto elixir, rodando na vm erlang (beam) e aproveitando o otp (erlang otp), é conhecido por seu ambiente tolerante a falhas e concorrente, que combina bem com o back4app para formar uma infraestrutura moderna e de alto desempenho você verá como a configuração rápida do back4app e o ambiente intuitivo podem reduzir drasticamente seu tempo e esforço em comparação com a configuração manual de servidores e bancos de dados isso inclui aproveitar o pattern matching, além de se conectar ao framework web de escolha do elixir ao final deste tutorial, você terá uma base sólida que pode ser estendida para uma aplicação pronta para produção ou aprimorada com lógica personalizada e apis de terceiros pré requisitos para completar este tutorial, você precisará uma conta back4app e um novo projeto back4app introdução ao back4app https //www back4app com/docs/get started/new parse app se você não tiver uma conta, pode criar uma gratuitamente siga o guia acima para preparar seu projeto ambiente básico de desenvolvimento elixir certifique se de ter o elixir instalado em sua máquina se você planeja usar um framework web como o phoenix, consulte o guia de instalação do phoenix https //hexdocs pm/phoenix/installation html para referência familiaridade com conceitos de elixir documentação oficial do elixir https //elixir lang org/docs html se você é novo no elixir, revise esses recursos ou um tutorial para iniciantes antes de começar certifique se de ter todos esses pré requisitos em ordem antes de começar ter seu projeto back4app configurado e seu ambiente local de elixir pronto ajudará você a acompanhar mais suavemente passo 1 – criando um novo projeto no back4app e conectando criar um novo projeto o primeiro passo em como construir um backend para elixir no back4app é criar um novo projeto se você ainda não criou um, siga estes passos faça login na sua conta back4app clique no botão “novo app” no seu painel do back4app dê um nome ao seu app (por exemplo, “elixir backend tutorial”) uma vez que o projeto é criado, você verá ele listado no seu painel do back4app este projeto será a base para todas as configurações de backend discutidas neste tutorial conectando via rest ou graphql o back4app usa a plataforma parse como base para elixir, não há sdk oficial do parse no momento em vez disso, você pode se conectar facilmente ao back4app usando as apis rest ou graphql no seu projeto elixir, você irá recuperar seu id da aplicação e chaves rest ou graphql da seção “configurações do app” ou “segurança & chaves” no painel do back4app configurar requisições http usando uma biblioteca elixir como httpoison https //hex pm/packages/httpoison ou tesla https //hex pm/packages/tesla por exemplo, para armazenar credenciais em um arquivo de configuração ( config/dev exs ou similar) config \ my app, \ b4a, app id "your application id", rest key "your rest api key", server url "https //parseapi back4app com" você pode então referenciar essas credenciais no seu código para fazer chamadas rest ao longo deste guia, vamos mostrar como interagir com o banco de dados do back4app, sistema de usuários e outros recursos usando requisições http ou graphql padrão passo 2 – configurando o banco de dados criando um modelo de dados no back4app, os dados são armazenados em classes você pode criar uma nova classe no painel do back4app navegue até a seção “banco de dados” no seu painel do back4app crie uma nova classe (por exemplo, “todo”) e adicione colunas relevantes, como título (string) e iscompleted (boolean) criando um modelo de dados usando o agente de ia o back4app também fornece um agente de ia para ajudá lo a descrever e criar seu modelo de dados abra o agente de ia a partir do seu painel de aplicativos ou do menu descreva seu modelo de dados em linguagem simples (por exemplo, “por favor, crie um novo aplicativo todo com um esquema de classe completo ”) deixe o agente de ia criar o esquema automaticamente lendo e escrevendo dados usando sdk (se aplicável) como o elixir não possui um sdk parse oficial, vamos pular o uso direto do sdk em vez disso, vamos mostrar abordagens de rest , graphql , e consultas ao vivo abaixo lendo e escrevendo dados usando rest api instale um cliente http como httpoison no seu mix exs defp deps do \[ {\ httpoison, " > 1 8"} ] end em seguida, execute mix deps get para criar (salvar) um objeto todo a partir da sua aplicação 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 e para consultar seus objetos 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 lendo e escrevendo dados usando a api graphql você também pode interagir via graphql por exemplo, criando um todo mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } em elixir, você também pode enviar isso com um cliente 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) trabalhando com consultas ao vivo (opcional) para atualizações em tempo real, o back4app oferece consultas ao vivo você pode habilitar consultas ao vivo nas configurações do servidor como não há uma biblioteca cliente parse nativa para elixir no momento, você normalmente se conectaria através de um canal phoenix ou qualquer cliente websocket personalizado para o wss\ //your subdomain here b4a io endpoint fornecido isso pode ser mais avançado, exigindo codificação personalizada para gerenciar assinaturas, mensagens, etc passo 3 – aplicando segurança com acls e clps visão geral breve o back4app oferece listas de controle de acesso (acls) e permissões de nível de classe (clps) para proteger e gerenciar o acesso aos dados as acls se aplicam a objetos individuais, enquanto as clps se aplicam à classe inteira passo a passo permissões de nível de classe (clps) no seu painel do back4app, em banco de dados , selecione uma classe (por exemplo, “todo”) e abra a aba de permissões de nível de classe ajuste as configurações (por exemplo, “requer autenticação” ou “sem acesso” para o público) configurar acls ao criar ou atualizar um objeto, você pode enviar dados de acl na sua solicitação rest ou graphql por exemplo, especifique o campo acl em json se precisar de controle detalhado por objeto para mais informações, visite as diretrizes de segurança do app https //www back4app com/docs/security/parse security passo 4 – escrevendo funções de cloud code por que cloud code o cloud code permite que você execute lógica do lado do servidor sem gerenciar seus próprios servidores com elixir, você geralmente depende do otp para concorrência, mas aqui você pode simplesmente criar cloud code em javascript no back4app para lidar com validação, gatilhos ou lógica de negócios personalizada este código é executado no parse server, então você pode manter seu código elixir focado em tarefas de cliente ou microserviço enquanto o trabalho pesado acontece no cloud code função de exemplo no seu main js no painel do back4app ou usando a 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 }; }); implantação implante via o back4app cli https //www back4app com/docs/local development/parse cli ou colando no painel sob cloud code > functions e clicando em implantar chamando o cloud code do elixir, você pode usar 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 passo 5 – configurando a autenticação ativar ou configurar a autenticação back4app usa a classe user do parse para autenticação você pode gerenciar o registro, login e redefinições de senha facilmente a partir do elixir, você normalmente usará chamadas 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 login social back4app suporta integração com google, apple, facebook e mais na maioria dos casos, você direcionará os usuários para o fluxo oauth, e então usará os tokens retornados por esses provedores para completar o login do parse veja documentação de login social https //www back4app com/docs/platform/sign in with apple para detalhes passo 6 – gerenciando o armazenamento de arquivos configurando o armazenamento de arquivos back4app armazena arquivos de forma segura a partir do elixir, você fará o upload de arquivos via 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 você receberá uma resposta json com a url do arquivo, que pode armazenar em uma classe (por exemplo, foto ) para referência considerações de segurança você pode configurar quem pode enviar arquivos nas configurações de fileupload do seu projeto back4app, restringindo uploads a usuários autenticados, se desejado passo 7 – verificação de email e redefinição de senha visão geral a verificação de e mail garante que os usuários possuam o endereço de e mail usado durante o cadastro a redefinição de senha permite que eles recuperem contas de forma segura ambas as funcionalidades estão integradas no back4app configuração do painel do back4app ativar a verificação de e mail nas “configurações do app” ou “autenticação” do seu app configure o endereço de remetente e os modelos de e mail ativar a redefinição de senha para permitir que os usuários redefinam via um link enviado por e mail código/implementação uma vez ativada no painel, você pode acionar redefinições de senha 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 passo 8 – agendando tarefas com cloud jobs quais trabalhos em nuvem fazem trabalhos em nuvem permitem que você automatize tarefas rotineiras como limpar dados antigos ou enviar e mails periódicos você os escreve em cloud code exemplo // 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); } }); implantar o código vá para o painel do back4app > configurações do app > configurações do servidor > trabalhos em segundo plano agende o trabalho para ser executado diariamente ou com a frequência que você escolher passo 9 – integrando webhooks definição webhooks permitem que sua aplicação back4app envie requisições http para um serviço externo (por exemplo, um canal slack ou stripe) quando certos eventos ocorrem configuração navegue até a configuração de webhooks no seu painel back4app > mais > webhooks defina o endpoint (por exemplo, https //your service com/webhook endpoint ) configure gatilhos como “novo registro na classe todo ” exemplo se você quiser enviar dados para o slack sempre que um todo for criado, você pode adicionar um novo webhook apontando para a url do seu webhook de entrada do slack você também pode definir webhooks no cloud code enviando requisições http personalizadas em gatilhos como aftersave passo 10 – explorando o painel de administração do back4app onde encontrá lo o back4app admin app é uma interface amigável para gerenciar seus dados você pode ativá lo a partir de app dashboard > mais > admin app recursos criar um primeiro usuário administrador , que configura o papel de b4aadminuser e classes adicionais atribuir um subdomínio para acessar a interface de administração fazer login para visualizar e gerenciar dados em uma interface simples conclusão ao seguir este tutorial sobre como construir um backend para elixir com back4app, você tem criado um backend seguro na plataforma do back4app usando elixir para integração configurado um banco de dados com classes, tipos de dados e relacionamentos usado rest/graphql para interagir com seus dados a partir do elixir aplicado segurança usando acls e clps adicionado lógica personalizada com funções de cloud code configurado autenticação de usuário com verificação de e mail e redefinições de senha gerenciado armazenamento de arquivos e recuperação agendado trabalhos em segundo plano para automação integrado serviços externos com webhooks explorado o painel de administração do back4app para fácil gerenciamento de dados com o modelo de concorrência do elixir (potenciado pela erlang vm) e otp, combinado com os serviços escaláveis e flexíveis do back4app, você pode construir backends altamente robustos continue explorando recursos mais avançados, integre sua lógica de negócios e deixe o back4app ajudá lo a lidar com o trabalho pesado próximos passos construa um aplicativo elixir pronto para produção combinando este backend com seu framework web elixir/phoenix preferido integre recursos avançados como controle de acesso baseado em função ou apis de terceiros (gateways de pagamento, serviços de mensagens) explore a documentação oficial do back4app para segurança avançada, logs, ajuste de desempenho e mais confira outros tutoriais para aplicativos em tempo real, painéis de iot ou serviços baseados em localização com correspondência de padrões e concorrência otp à sua disposição, você está preparado para enfrentar uma ampla gama de aplicações!