Quickstarters
Feature Overview
How to Build a Backend for Golang?
31 分
はじめに このチュートリアルでは、back4appを使用してgolangの完全なバックエンドを構築し、テストする方法を学びます。 データベース管理、セキュリティ設定、ユーザー認証、ファイルストレージ、cloud codeなど、back4appの重要な機能を統合する方法を説明し、go httpサーバーと連携する安全で柔軟、かつスケーラブルなバックエンドを作成します。 私たちは、専用のparse sdkではなく、golang httpクライアントからデータベースに接続するためにback4appのrestful apiを使用することに焦点を当て、あなたの新しいバックエンドのためのメンテナンスが容易なハンドラ関数を構築する方法を示します。 このアプローチが、ゼロから自分のサーバーを設定することと比較して、開発の複雑さをどのように軽減するかを見ることができます。 back4appのリアルタイムクエリ、ファイルストレージ、ユーザー認証システムに依存することで、バックエンドの作成プロセスを加速させることができます。 最後には、安全なgolangバックエンドを構築し、自動化されたタスクをスケジュールし、外部webhookを統合する方法を知ることができます。 この基盤を生産準備が整ったアプリケーションに拡張したり、必要に応じてカスタムロジックを追加するための準備が整います。 前提条件 back4appアカウント 無料でサインアップする こちら https //www back4app com/ 新しいback4appプロジェクト back4appの始め方 https //www back4app com/docs/get started/new parse app go (golang) 開発環境 マシンにgoがインストールされていることを確認してください。インストラクションは go公式ドキュメント https //go dev/ で見つけることができます。 goのhttpパッケージとrestful apiの基本知識 funcハンドラーの書き方、エラーメッセージの解析、メソッドpostリクエストの処理、httpローカルホストサーバーの設定に慣れていると役立ちます。 進む前にこれらの前提条件を整えておいてください。この設定は、back4appを使用してgolangのバックエンドを構築する方法を発見する際に、あなたの体験をスムーズにします。 ステップ1 – back4appで新しいプロジェクトを作成し接続する 新しいプロジェクトの理由は? 新しいback4appプロジェクトを作成することが最初のステップです。ここでデータを保存し、ファイルストレージを構成し、クラウド関数をスケジュールし、バックグラウンドタスクを追加します。このバックエンドプロジェクトは、すべての後続のステップの基盤となります。 back4appアカウントにログイン 「新しいアプリ」をクリック あなたのback4appダッシュボードで。 アプリの名前を付ける (例えば、「golang backend tutorial」)。 作成されると、ダッシュボードに表示されます。このアプリケーションは、あなたのback4appベースのバックエンドです。 rest apiを介して接続する back4appは、データを作成、更新、削除するためのrestful apiを提供します。golangでは、goの標準ライブラリからのhttpクライアントを使用して、これらのエンドポイントと通信します。 「 アプリケーションid 」と「 rest apiキー 」を見つけるには、あなたのback4appアプリの「 設定 」または「 セキュリティとキー 」セクションに移動します 各リクエストヘッダーにこれらの認証情報が必要です。次のステップで、postメソッド、get、およびその他のhttpリクエストを使用してデータベースに接続する際にこれを示します。 ステップ2 – データベースの設定 データモデルの作成 back4appにデータを保存するには、クラス(テーブル)とカラム(フィールド)を定義します。例えば、「 todo 」クラスを作成したいとしましょう。back4appダッシュボードで手動で作成できます アプリのダッシュボードの「 データベース 」セクションに移動します。 「todo」という名前の新しいクラスを作成します。 タイトル(string)やiscompleted(boolean)などのカラムを追加します。 golangアプリケーションから新しいフィールドを持つオブジェクトを送信することで、システムにカラムを自動作成させることもできます。 aiエージェントを使用したデータモデルの作成 aiエージェントを アプリダッシュボードで開きます。 希望するデータモデルを説明します (例:「タイトルフィールドとiscompletedフィールドを持つ新しいtodoクラスを作成してください。」)。 提案されたスキーマを 受け入れます。 この便利な機能は、データベーススキーマの設計にかかる時間を節約します。 rest apiを使用したデータの読み取りと書き込み(golangの例) 以下は、goのhttpパッケージを使用してデータを作成(postメソッド)および取得(getメソッド)する基本的な例です。あなたの application id と rest api key を環境変数として持っていると仮定します。 package main import ( "bytes" "encoding/json" "fmt" "io/ioutil" "log" "net/http" ) type todo struct { objectid string `json "objectid,omitempty"` title string `json "title,omitempty"` iscompleted bool `json "iscompleted,omitempty"` } func main() { // example create todo newtodo = todo{ title "buy groceries", iscompleted false, } created, err = createtodo(newtodo) if err != nil { log println("error creating todo ", err) } else { log println("created todo with id ", created objectid) } // example fetch todos todos, err = fetchalltodos() if err != nil { log println("error fetching todos ", err) } else { for , t = range todos { log println("fetched todo ", t title, t iscompleted) } } } // createtodo sends a post request to save a new record in the "todo" class func createtodo(todo todo) (todo, error) { // convert struct to json body, = json marshal(todo) // create http request req, err = http newrequest("post", "https //parseapi back4app com/classes/todo", bytes newbuffer(body)) if err != nil { return todo{}, err } // set necessary headers req header set("x parse application id", "your application id") req header set("x parse rest api key", "your rest api key") req header set("content type", "application/json") // execute the request client = \&http client{} resp, err = client do(req) if err != nil { return todo{}, err } defer resp body close() if resp statuscode != http statuscreated && resp statuscode != http statusok { bodybytes, = ioutil readall(resp body) return todo{}, fmt errorf("api error %s", string(bodybytes)) } // parse response var createdtodo todo if err = json newdecoder(resp body) decode(\&createdtodo); err != nil { return todo{}, err } return createdtodo, nil } // fetchalltodos retrieves all todo objects from back4app using get func fetchalltodos() (\[]todo, error) { req, err = http newrequest("get", "https //parseapi back4app com/classes/todo", nil) if err != nil { return nil, err } req header set("x parse application id", "your application id") req header set("x parse rest api key", "your rest api key") client = \&http client{} resp, err = client do(req) if err != nil { return nil, err } defer resp body close() if resp statuscode != http statusok { bodybytes, = ioutil readall(resp body) return nil, fmt errorf("api error %s", string(bodybytes)) } // parse response for "results" key var result struct { results \[]todo `json "results"` } if err = json newdecoder(resp body) decode(\&result); err != nil { return nil, err } return result results, nil } これらの例では、httpクライアントを作成し、必要なヘッダーを追加し、レスポンスコードとエラーメッセージを処理します。 your application id と your rest api key をあなたのback4appプロジェクトからの実際のキーに置き換えることを忘れないでください。 graphql apiを使用したデータの読み取りと書き込み back4appはまた、 https //parseapi back4app com/graphql にgraphqlエンドポイントを提供しています。人気のあるgo graphqlクライアントライブラリ(例えば、 machine box graphql https //github com/machinebox/graphql )を使用してクエリやミューテーションを実行できます。これは、生のrest呼び出しよりも構造化されたアプローチになる可能性があります。 ライブクエリの操作(オプション) アプリでリアルタイムの更新を見たい場合は、back4appダッシュボードでライブクエリを有効にできます。golangには公式のparseライブクエリライブラリはありません。しかし、 wss\ //your subdomain b4a io からのライブクエリの更新をリッスンするために独自のウェブソケット接続を実装できます。この機能は、即時データ同期を必要とする共同作業アプリに役立ちます。 ステップ3 – aclとclpを使用したセキュリティの適用 概要 back4appは、データを保護するためにアクセス制御リスト(acl)とクラスレベルの権限(clp)を提供します。aclは各オブジェクトに定義され、clpはクラス全体の包括的なルールを定義します。 クラスレベルの権限 アプリの データベース ビューに移動します。 クラスを選択します(例: todo )。 「 クラスレベルの権限 」をクリックし、異なるユーザー役割または公開アクセスのために読み取り/書き込みアクセスを設定します。 acl オブジェクトを作成または更新する際にaclを渡すことができます。これにより、特定のユーザーまたは役割のみがデータを読み書きできることが保証されます。詳細については、 アプリセキュリティガイドライン https //www back4app com/docs/security/parse security をご覧ください。 ステップ4 – クラウドコード関数の作成 クラウドコードの利点 クラウドコードを使用すると、サーバー側の関数、トリガー、または検証を実行できます。自分のサーバーを管理することなく、サーバー側から高度なビジネスロジックを追加したり、外部apiを統合したりできます。 クラウド関数の例 簡単な例は、テキストの長さを計算する関数です。back4appダッシュボードの main js ファイルに次のように記述します。 parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); デプロイメント cloud codeをデプロイするには、次のいずれかを使用します back4app cli back4app dashboard の cloud code > functions コードを main js エディタに貼り付けて、 deploy をクリックします。 golangからcloud functionsを呼び出す httpクライアントからrest経由でcloud functionを呼び出すことができます func callcalculatetextlength(txt string) (int, error) { body, = json marshal(map\[string]string{"text" txt}) req, err = http newrequest("post", "https //parseapi back4app com/functions/calculatetextlength", bytes newbuffer(body)) if err != nil { return 0, err } // headers req header set("x parse application id", "your application id") req header set("x parse rest api key", "your rest api key") req header set("content type", "application/json") client = \&http client{} resp, err = client do(req) if err != nil { return 0, err } defer resp body close() if resp statuscode != http statusok { bodybytes, = ioutil readall(resp body) return 0, fmt errorf("api error %s", string(bodybytes)) } var result struct { result map\[string]int `json "result"` } if err = json newdecoder(resp body) decode(\&result); err != nil { return 0, err } return result result\["length"], nil } ステップ 5 – 認証の設定 ユーザー認証を有効にする back4appは、 user クラスを認証に使用します。restを介して新しいユーザーを作成すると、バックエンドは資格情報を安全に保存し、セッショントークンを生成します。 curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"username" "alice", "password" "secret123", "email" "alice\@example com"}' \\ https //parseapi back4app com/users 返されたセッショントークンを使用して、ユーザー権限が必要な後続のリクエストを行います。goでは、前述のようにhttpクライアントから同じタイプのhttpリクエストを送信します。 ソーシャルログイン googleやfacebookなどのソーシャルログインには、back4appでoauth設定を構成する必要があります。これらのフローは、トークンの交換を伴うことがよくあります。詳細については、 appleでサインイン / ソーシャルログインのドキュメント https //www back4app com/docs/platform/sign in with apple を参照してください。 ステップ 6 – ファイルストレージの取り扱い セットアップとアップロード ファイルをbase64エンコードされたデータまたはmultipart/form dataとして送信することで、back4appにファイルを保存できます。 curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{ "file" { "name" "myimage png", " type" "file", "base64" "ivborw0kggoaaaansuheugaa " } }' \\ https //parseapi back4app com/files/myimage png アップロード後、返されたファイルurlまたはファイルポインタを保存することで、オブジェクトにファイルを添付できます。goでは、同様の方法でhttpリクエストを作成します—ファイルコンテンツを適切にエンコードすることを確認してください。 ステップ 7 – メール確認とパスワードリセット 重要性 メール確認は、ユーザーが提供したメールを制御していることを保証し、パスワードリセットはアカウントの回復を助けます。両方の機能はセキュリティと信頼を高めます。 メール確認の有効化 あなたの back4app ダッシュボード に移動します。 「 メール設定 」の下で、確認メールを有効にします。 必要に応じて、メールテンプレートをカスタマイズします。 ユーザーがサインアップすると、確認メールが自動的に送信されます。 パスワードリセット パスワードリセットを開始するには、 requestpasswordreset rest エンドポイント https //docs parseplatform org/rest/guide/#r passwordreset を使用します curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"email" "alice\@example com"}' \\ https //parseapi back4app com/requestpasswordreset curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"email" "alice\@example com"}' \\ https //parseapi back4app com/requestpasswordreset curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"email" "alice\@example com"}' \\ https //parseapi back4app com/requestpasswordreset ステップ 8 – クラウドジョブによるタスクのスケジューリング クラウドジョブの機能 クラウドジョブは、古いデータのクリーンアップや週刊ニュースレターの送信などのタスクを自動化するためにスケジュールに従って実行されます。 parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo'); const query = new parse query(todo); // remove records older than 30 days // }); このジョブをデプロイし、あなたの back4app ダッシュボード > アプリ設定 > サーバー設定 > バックグラウンドジョブ でスケジュールします。 ステップ 9 – ウェブフックの統合 ウェブフックの利点 ウェブフックを使用すると、特定のイベントが発生したときに外部サービスに通知できます。たとえば、新しいtodoアイテムが作成されたときにslackアラートを送信することができます。 back4app ダッシュボードの ウェブフック セクションに移動します。 エンドポイントを設定します (例えば、 https //your external service com/webhook )。 トリガーを割り当てます (例: aftersave のtodo)。 イベントの直接制御を好む場合は、httpクライアントリクエストを記述することでクラウドコードから外部apiをトリガーすることもできます。 ステップ 10 – back4app 管理パネルの探索 概要 back4app管理アプリは、データを管理するために非技術的なチームメンバーと共有できるポイント&クリックインターフェースです。 管理アプリを有効にする back4appダッシュボードの more > admin app に移動します。 それを有効にし、管理ユーザーを作成します。 選択したサブドメインを使用して、データ操作のためのシンプルなuiにログインします。これにより、基本的な操作を実行するために直接クエリやカスタムコードを書く必要がなくなります。 結論 このガイドでは、back4appを使用してgolangのバックエンドを構築する方法を学びました。 restful apiを介してデータベースに接続し、aclとclpでセキュリティ対策を適用し、cloud jobsでスケジュールされたタスクを実行し、webhookを使用して外部サービスと統合し、ユーザー認証とファイルストレージを設定する方法を探りました。 goのhttpパッケージとback4appの強力な機能を使用して、時間を節約し、スケールしやすい強力なバックエンドを作成できます。 基本をマスターしたので、golangハンドラ関数のロジックを拡張し、新しいapiエンドポイントに接続し、ニーズに合ったリッチなアプリケーションを構築できます。 次のステップ golangアプリを洗練させる ロールベースのアクセスなどの高度な機能を追加するか、プロダクション用にhttpサーバーを最適化します。 リアルタイムクエリについてもっと学ぶ コラボレーティブアプリのためにlive queriesを統合します。 高度なback4appドキュメントを探る acl、ログ、分析を微調整します。 サードパーティapiを統合する cloud codeまたは直接webhookを使用してバックエンド機能を拡張します。