Quickstarters
Feature Overview
How to Build a Backend for Elixir?
37 分
はじめに このチュートリアルでは、 elixirのバックエンドを構築する方法 を学びます。 データベース管理、cloud code functions、restおよびgraphql api、ユーザー認証、リアルタイムクエリ(ライブクエリ)など、back4appの重要な機能を統合する方法を説明し、安全でスケーラブル、かつ堅牢なバックエンドを作成します。 erlang vm(beam)上で動作し、otp(erlang otp)を活用するelixirは、障害耐性があり、同時実行環境で知られており、back4appと組み合わせることで、現代的で高性能なインフラストラクチャを形成します。 back4appの迅速なセットアップと直感的な環境が、サーバーやデータベースを手動で構成する場合と比較して、時間と労力を大幅に削減できることがわかります。 これには、パターンマッチングを活用し、elixirの選択したwebフレームワークにフックすることが含まれます。 このチュートリアルの終わりまでには、プロダクション準備が整ったアプリケーションに拡張するか、カスタムロジックやサードパーティapiで強化できる堅実な基盤を持つことができます。 前提条件 このチュートリアルを完了するには、次のものが必要です back4appアカウントと新しいback4appプロジェクト back4appの始め方。 https //www back4app com/docs/get started/new parse app アカウントを持っていない場合は、無料で作成できます。上記のガイドに従ってプロジェクトを準備してください。 基本的なelixir開発環境 マシンにelixirがインストールされていることを確認してください。phoenixなどのwebフレームワークを使用する予定がある場合は、 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キー を取得します。 次に、 httpoison や tesla などのelixirライブラリを使用してhttpリクエストを構成します。 たとえば、設定ファイルに資格情報を保存するには( 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ダッシュボードで。 新しいクラスを作成 (例:「todo」)し、タイトル(string)やiscompleted(boolean)などの関連するカラムを追加します。 aiエージェントを使用したデータモデルの作成 back4appは、データモデルを説明し作成するのを助けるaiエージェントも提供しています aiエージェントを開く アプリダッシュボードまたはメニューから。 データモデルを説明する 簡単な言葉で(例:「新しいtodoアプリを完全なクラススキーマで作成してください。」)。 aiエージェントにスキーマを自動的に作成させる 。 sdkを使用したデータの読み取りと書き込み(該当する場合) elixirには公式のparse sdkがないため、直接sdkの使用はスキップします。代わりに、以下に rest , graphql , および live queries アプローチを示します。 rest apiを使用したデータの読み取りと書き込み httpクライアントをインストールします。例えば、 httpoison を mix exs に追加します。 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チャネルまたは提供された wss\ //your subdomain here b4a io エンドポイントにカスタムwebsocketクライアントを介して接続します。これはより高度なもので、サブスクリプション、メッセージなどを処理するためのカスタムコーディングが必要です。 ステップ3 – aclとclpによるセキュリティの適用 簡単な概要 back4appは アクセス制御リスト(acl) と クラスレベルの権限(clp) を提供して、データアクセスを保護および管理します。aclは個々のオブジェクトに適用され、clpはクラス全体に適用されます。 ステップバイステップ クラスレベルの権限 (clp) あなたの back4app ダッシュボードで、 データベース を選択し(例 “todo”)、 クラスレベルの権限 タブを開きます。設定を調整します(例 “認証が必要” または “公開に対するアクセスなし”)。 aclの設定 オブジェクトを作成または更新する際に、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 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 ファイルのurlを含むjsonレスポンスを受け取ります。これはクラス(例 photo )に保存して参照できます。 セキュリティに関する考慮事項 ファイルのアップロードを許可するユーザーを設定するには、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を使用すると、特定のイベントが発生したときに、back4appアプリケーションが外部サービス(例:slackチャンネルやstripe)にhttpリクエストを送信できます。 設定 webhooksの設定に移動 し、back4appダッシュボード > その他 > webhooksを選択します。 エンドポイントを設定 します(例えば、 https //your service com/webhook endpoint )。 トリガーを設定 します。「todoクラスに新しいレコードが追加されたとき」など。 例 todoが作成されるたびにslackにデータを送信したい場合は、slackの受信webhook urlを指す新しいwebhookを追加できます。また、トリガー内でカスタムhttpリクエストを送信することによって、cloud codeでwebhookを定義することもできます。例えば、 aftersave のように。 ステップ10 – back4app管理パネルの探索 どこで見つけるか 「 back4app管理アプリ 」は、データを管理するためのユーザーフレンドリーなインターフェースです。これを「 アプリダッシュボード > その他 > 管理アプリ 」から有効にできます。 機能 最初の管理ユーザーを作成する , これによりb4aadminuserロールと追加のクラスが設定されます。 サブドメインを割り当てる ことで管理インターフェースにアクセスします。 ログインする ことでシンプルなインターフェースでデータを表示および管理します。 結論 このチュートリアルに従って、back4appを使用してelixirのバックエンドを構築することで、あなたは 安全なバックエンド 構造をback4appのプラットフォーム上でelixirを使用して統合しました。 データベースを設定しました クラス、データ型、関係を持つ。 rest/graphqlを使用しました elixirからデータと対話するために。 セキュリティを適用しました aclとclpを使用して。 カスタムロジックを追加しました cloud code関数を使用して。 ユーザー認証を設定しました メール確認とパスワードリセットを使用して。 ファイルストレージを処理しました および取得。 バックグラウンドジョブをスケジュールしました 自動化のために。 外部サービスを統合しました ウェブフックを使用して。 back4app管理パネルを探索しました 簡単なデータ管理のために。 elixirの並行性モデル(erlang vmによって動かされる)とotp、back4appのスケーラブルで柔軟なサービスを組み合わせることで、高度に堅牢なバックエンドを構築できます。 さらに高度な機能を探索し、ビジネスロジックを統合し、back4appに重い作業を処理させましょう。 次のステップ 本番環境向けのelixirアプリを構築する このバックエンドをお好みのelixir/phoenixウェブフレームワークと組み合わせて。 高度な機能を統合する 役割ベースのアクセス制御やサードパーティapi(決済ゲートウェイ、メッセージングサービス)など。 back4appの公式ドキュメントを探る 高度なセキュリティ、ログ、パフォーマンスチューニングなどについて。 他のチュートリアルをチェックする リアルタイムアプリ、iotダッシュボード、または位置情報サービスのために。パターンマッチングとotpの同時実行を駆使して、幅広いアプリケーションに取り組む準備が整っています!