第3回は、第2回の続きとして、投稿アプリに投稿表示、作成、更新、削除の機能を実装していきます。この過程で、リクエストの受け取り方法、レスポンスの生成方法の詳細を理解します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載のサンプルコードをGitHubで公開しています。こちらからダウンロードしてみてください。
前回は、Actix Webによる開発例として、シンプルな投稿アプリを作成し、投稿の一覧表示機能を実装しました。今回は、このアプリを拡張し、投稿の表示、作成、更新、削除といった定番の機能を実装していきます。その過程で、Actix Webにおけるリクエストデータの解釈やレスポンスデータ生成の詳細を紹介していきます。
投稿アプリで使うルートとハンドラー関数の対応は以下の通りとします(図1)。RESTfulに近い成り立ちとなりますが、Webブラウザからの呼び出しになるので、基本的にHTTP GETとPOSTを使用したものとなります。
本稿では指定投稿の表示ページ、新規投稿の作成ページを説明します。編集ページについては作成ページとほぼ同じ流れになるので、削除機能ともども配布サンプルを参照してください。
これから多数のページを作成していきますが、ルーティングで対応するハンドラー関数がない場合に表示するデフォルトページを用意しておきます。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)は、(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!") }
処理としては、HTTPステータス404を返すとともに、"Page Not found!"と表示するだけのシンプルなものです。後述するヘッダやフッタも含めるなど内容を拡張してもよいでしょう。アプリケーションをビルド、実行して、/posts/notexistなどの存在しないパスに対して"Page Not found!"と表示されればデフォルトページの登録は成功です。
Copyright © ITmedia, Inc. All Rights Reserved.