【シンジ】戦略×エンジニア×Webデザイナー

Webコンサル、デザイン、サービス開発、経営に関することを呟きます。

【プログラミング初心者向け】RUSTで簡単なAPIを構築してみた

f:id:Shinji0418s:20210224092940j:plain

どうも。株)WIREBASEの中村です。

 

今回は、PostgresのORMとして人気のあるRustを使ってシンプルなAPIを構築してみようと思います。特に初心者の方に分かりやすいようStep by Stepで分かりやすく説明していきます。

今回のプロジェクトは、RocketやDiesel等のフレームワークを使って、Medium(https://medium.com/)という米国の記事投稿サイトに投稿している記事リンクを管理するためのAPIを構築してみようと思います。

 

もくじは以下の通りです。

  • 1. セットアップ
  • 2. コードを書く

 

先ずは、これから作るAPIの構造を決めましょう。大きく分けて3つの要素で構成します。

/user: ユーザーアカウントを作成して、ユーザーのアクセストークンを認証
/auth: アクセストークンを取得するためのグループ形成
/posts: Medium上の投稿リンクを作成or取得。

実際に構築した後、サーバーで実行したときに得られる出力は以下の通りです。

Mounting /user:=> POST /user application/json (create)=> GET /user/info (info)=> GET /user/info [2] (info_error)Mounting /auth:=> POST /auth/login (login)Mounting /posts:=> POST /posts (create)=> GET /posts (read)=> POST /posts [2] (create_error)Rocket has launched from http://0.0.0.0:8000

 

1. セットアップ

先ずは、RustをダウンロードしてPostgresのインスタンスは実行しているところから始めます。

 

Rustのプロジェクトを立ち上げます。(ここでは、blog-backendとプロジェクトを名付けます)

cargo new blog-backend

 

Rocketのフレームワークを使いたいので、ナイトリーバージョンのRustを使う必要があるので、以下のコマンドを実行します。

rustup override set nightly

rustup update && cargo update

 

次にDieselをインストールして、Medium内のデータベースとの接続リンクを指定します。


cargo
install diesel_cli --no-default-features --features "postgres"export DATABASE_URL=postgres//user:pass@localhost/blog

diesel setup

 

前述の通り、ユーザーと投稿、二つのデータタイプが必要なので、それぞれテーブルを生成します。

先ずは、ユーザーから、

diesel migration generate users

 

そうすると、ディレクトリ(migrations/date_of_creation_users/)内にup.sqlとdown.sqlというファイルが生成されます。

up.sql

f:id:Shinji0418s:20210224085909p:plain

down.sql

f:id:Shinji0418s:20210224090153p:plain

 

投稿も同じ手順でテーブルを生成します。

up.sql

f:id:Shinji0418s:20210224090300p:plain

down.sql

f:id:Shinji0418s:20210224090313p:plain

 

そして最後にCargo.tomlファイルに必要な全ての依存関係を定義します。

f:id:Shinji0418s:20210224090529p:plain

 

これでコーディングに入れます。

 

2. コードを書く

先ずは下記のソースコードを書きます。

f:id:Shinji0418s:20210224090808p:plain

 

データベースと接続するため、以下のソースコードファイルを使用してプールを作成し、データベース接続を再利用できるようにします。

f:id:Shinji0418s:20210224091023p:plain

 

Rocketのサーバーを起動して、ユーザーと投稿モジュールの両方をマウントするmain関数を指定します。

f:id:Shinji0418s:20210224091222p:plain

 

次はユーザー側の構築です。

f:id:Shinji0418s:20210224091548p:plain

 

そして認証機能はJWTを使います。

f:id:Shinji0418s:20210224091651p:plain

 

このファイルでは、基本的にユーザーの認証が必要となるリクエストは全てチェックするようになっています。アクセストークンが見つからなかったり、無効だったりするとリクエストが転送されるようになっています。

 

最後に、ユーザーと認証プロセスに必要なpandora関数を定義します。

f:id:Shinji0418s:20210224091930p:plain

 

投稿サイドのモジュール生成も同じようなプロセスをふみます。

f:id:Shinji0418s:20210224092044p:plain

最後に、2つのルートを定義します。1つは有効なアクセストークンを含んだリクエストを処理するためのルート、もう1つは不正なエラーを送信するためのルートになります。

 

f:id:Shinji0418s:20210224092108p:plain

 

そして、実行をするとどうでしょうか。これでプログラミング初心者でも簡単にRustのフレームワークを使ってAPIを構築できましたね。

cargo run

 

それでは、今日はこの辺で。

 

 株)WIREBASE中村LINE↓

友だち追加

株)WIREBASE中村Twitter