Quickstarters
Feature Overview
如何为 Elixir 构建后端?
37 分
介绍 在本教程中,您将学习 如何使用 back4app 构建 elixir 的后端 。 我们将逐步介绍集成 back4app 的基本功能——如数据库管理、云代码函数、rest 和 graphql api、用户身份验证以及实时查询(实时查询)——以创建一个安全、可扩展且强大的后端。 elixir 运行在 erlang vm(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 上创建新项目并连接 创建新项目 在 back4app 上 如何为 elixir 构建后端 的第一步是创建一个新项目。如果您还没有创建,请按照以下步骤操作: 登录到您的 back4app 账户 。 点击您的 back4app 仪表板上的“新应用”按钮 。 给您的应用命名 (例如,“elixir backend tutorial”)。 一旦项目创建完成,您将在您的 back4app 控制面板中看到它列出。这个项目将是本教程中讨论的所有后端配置的基础。 通过 rest 或 graphql 连接 back4app 使用 parse 平台作为基础。目前,elixir 没有官方的 parse sdk。相反,您可以轻松地使用 rest 或 graphql api 连接到 back4app。在您的 elixir 项目中,您将: 从您的应用程序的 “应用设置” 或 “安全与密钥” 部分获取您的 应用程序 id 和 rest 或 graphql 密钥 。 使用 elixir 库配置 http 请求,例如 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 调用。在本指南中,我们将展示如何使用标准的 http 或 graphql 请求与 back4app 数据库、用户系统和其他功能进行交互。 步骤 2 – 设置数据库 创建数据模型 在 back4app 中,数据存储在 类 您可以在 back4app 仪表板中创建一个新类 导航到您的 back4app 仪表板中的 “数据库” 部分 。 创建一个新类 (例如,“待办事项”)并添加相关列,例如标题(字符串)和 iscompleted(布尔值)。 使用 ai 代理创建数据模型 back4app 还提供了一个 ai 代理来帮助您描述和创建数据模型 从您的应用仪表板或菜单中打开 ai 代理 用简单的语言描述您的数据模型 (例如,“请创建一个带有完整类模式的新待办事项应用。”)。 让 ai 代理自动创建模式 使用sdk读取和写入数据(如适用) 由于elixir没有官方的parse sdk,我们将跳过直接使用sdk。相反,我们将在下面展示 rest , graphql , 和 实时查询 方法。 使用rest api读取和写入数据 在你的 mix exs 中安装一个http客户端,如 httpoison defp deps do \[ {\ httpoison, " > 1 8"} ] end 然后,运行 mix deps get 从你的elixir应用程序创建(保存)一个todo对象: 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 提供了 访问控制列表 (acls) 和 类级权限 (clps) 来保护和管理数据访问。acls 适用于单个对象,而 clps 适用于整个类。 逐步指南 类级权限 (clps) 在您的 back4app 控制面板中,选择 数据库 , 选择一个类(例如,“待办事项”)并打开 类级权限 标签。调整设置(例如,“需要身份验证”或“无访问权限”)。 配置 acls 在创建或更新对象时,您可以在 rest 或 graphql 请求中发送 acl 数据。例如,如果您需要对每个对象进行细粒度控制,请在 json 中指定 acl 字段。 有关更多信息,请访问 应用安全指南 https //www back4app com/docs/security/parse security 。 步骤 4 – 编写云代码函数 为什么使用云代码 云代码让您可以运行服务器端逻辑,而无需管理自己的服务器。使用 elixir,您通常依赖 otp 进行并发,但在这里,您可以简单地在 back4app 中创建 javascript 云代码来处理验证、触发器或自定义业务逻辑。这段代码在 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 调用云代码 从 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 使用 parse 用户 类进行身份验证。您可以轻松管理注册、登录和密码重置。在 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 您将收到一个包含文件 url 的 json 响应,您可以将其存储在一个类中(例如, 照片 ) 以供参考。 安全考虑 您可以在 back4app 项目的 fileupload 设置中配置谁可以上传文件,如果需要,可以限制上传仅限经过身份验证的用户。 步骤 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 步 – 集成 webhooks 定义 webhooks 允许您的 back4app 应用在某些事件发生时向外部服务(例如,slack 频道或 stripe)发送 http 请求。 配置 导航到 webhooks 配置 在您的 back4app 控制面板 > 更多 > webhooks。 设置端点 (例如, https //your service com/webhook endpoint )。 配置触发器 ,例如“todo 类中的新记录。” 示例 如果您希望在创建 todo 时将数据发送到 slack,您可以添加一个新的 webhook 指向您的 slack 传入 webhook url。您还可以通过在触发器中发送自定义 http 请求来定义 cloud code 中的 webhooks,例如 aftersave 。 步骤 10 – 探索 back4app 管理面板 在哪里找到它 这个 back4app 管理应用 是一个用户友好的界面,用于管理您的数据。您可以从 应用仪表板 > 更多 > 管理应用 启用它。 功能 创建第一个管理员用户 , 这将设置 b4aadminuser 角色和其他类。 分配一个子域名 以访问管理界面。 登录 以在简单的界面中查看和管理数据。 结论 通过遵循本教程,您可以使用 back4app 为 elixir 构建后端: 在 back4app 平台上创建了一个安全的后端 结构,使用 elixir 进行集成。 设置了一个数据库 ,包括类、数据类型和关系。 使用 rest/graphql 从 elixir 与您的数据进行交互。 应用了安全性 ,使用 acl 和 clp。 添加了自定义逻辑 ,使用 cloud code 函数。 配置了用户身份验证 ,包括电子邮件验证和密码重置。 处理了文件存储 和检索。 安排了后台作业 以实现自动化。 集成了外部服务 ,使用 webhook。 探索了 back4app 管理面板 以便于数据管理。 借助 elixir 的并发模型(由 erlang vm 提供支持)和 otp,结合 back4app 的可扩展和灵活的服务,您可以构建高度可靠的后端。 继续探索更高级的功能,集成您的业务逻辑,让 back4app 帮助您处理繁重的工作。 下一步 构建一个生产就绪的 elixir 应用 ,通过将此后端与您首选的 elixir/phoenix 网络框架结合。 集成高级功能 ,如基于角色的访问控制或第三方 api(支付网关、消息服务)。 探索 back4app 的官方文档 ,了解高级安全性、日志、性能调优等更多内容。 查看其他教程 ,了解实时应用、物联网仪表板或基于位置的服务。借助模式匹配和 otp 并发,您可以应对各种应用!