検索
連載

RustとActix Webで投稿アプリの登録画面を開発しようWebアプリ実装で学ぶ、現場で役立つRust入門(3)(1/2 ページ)

第3回は、第2回の続きとして、投稿アプリに投稿表示、作成、更新、削除の機能を実装していきます。この過程で、リクエストの受け取り方法、レスポンスの生成方法の詳細を理解します。

Share
Tweet
LINE
Hatena
「Webアプリ実装で学ぶ、現場で役立つRust入門」のインデックス

連載:Webアプリ実装で学ぶ、現場で役立つRust入門

 本連載のサンプルコードをGitHubで公開しています。こちらからダウンロードしてみてください。


はじめに

 前回は、Actix Webによる開発例として、シンプルな投稿アプリを作成し、投稿の一覧表示機能を実装しました。今回は、このアプリを拡張し、投稿の表示、作成、更新、削除といった定番の機能を実装していきます。その過程で、Actix Webにおけるリクエストデータの解釈やレスポンスデータ生成の詳細を紹介していきます。

ルートとハンドラー関数の対応を決める

 投稿アプリで使うルートとハンドラー関数の対応は以下の通りとします(図1)。RESTfulに近い成り立ちとなりますが、Webブラウザからの呼び出しになるので、基本的にHTTP GETとPOSTを使用したものとなります。

  • 全投稿の一覧表示(GET、/posts):index関数※作成済み
  • 指定投稿の表示(GET、/posts/{id}):show関数
  • 新規投稿の作成(GET、/posts/new):new関数
  • 新規投稿の登録(POST、/posts/create):create関数
  • 既存投稿の編集(GET、/posts/{id}/edit):edit関数
  • 既存投稿の更新(POST、/posts/update):update関数
  • 既存投稿の削除(GET、/posts/{id}/delete):destroy関数
図1 投稿アプリのページ遷移図
図1 投稿アプリのページ遷移図

 本稿では指定投稿の表示ページ、新規投稿の作成ページを説明します。編集ページについては作成ページとほぼ同じ流れになるので、削除機能ともども配布サンプルを参照してください。

デフォルトページを用意する

 これから多数のページを作成していきますが、ルーティングで対応するハンドラー関数がない場合に表示するデフォルトページを用意しておきます。Actix Webの既定では、該当するページがない場合にはHTTPステータス404を返すだけです。これを、デフォルトページを返すようにしておきましょう。アプリケーションオブジェクト生成後にdefault_serviceメソッドを呼び出すコードを、src/main.rsファイルにリスト1のように追加します。

…略…
use actix_web::{App, HttpServer, Responder, HttpResponse, get, web,	(1)
    middleware::Logger};
…略…
App::new()
    .service(index)
    .default_service(web::to(handler::not_found))			(2)
    .wrap(Logger::default())
})
…略…
リスト1 src/main.rs(デフォルトページの登録)

 (1)は、(2)のためのweb名前空間の追加、(2)は呼び出すnot_found関数をdefault_serviceメソッドで追加しています。not_found関数は、src/handler.rsファイルにリスト2の内容を追記します。

pub async fn not_found() -> impl Responder {
    HttpResponse::NotFound().body("Page Not found!")
}
リスト2 src/handler.rs(not_found関数)

 処理としては、HTTPステータス404を返すとともに、"Page Not found!"と表示するだけのシンプルなものです。後述するヘッダやフッタも含めるなど内容を拡張してもよいでしょう。アプリケーションをビルド、実行して、/posts/notexistなどの存在しないパスに対して"Page Not found!"と表示されればデフォルトページの登録は成功です。

投稿表示機能の実装

Copyright © ITmedia, Inc. All Rights Reserved.

       | 次のページへ
ページトップに戻る