第6回は、第5回の続きとして、投稿アプリにREST APIを導入し、後続の回で利用できるようにします。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載のサンプルコードをGitHubで公開しています。こちらからダウンロードしてみてください。
今回は、これまで作成してきたactix-postsアプリに、Web APIを追加します。追加するAPIはRESTful APIに準拠したものであり、アプリに倣って以下の5個とします。それぞれ、入力、出力ともにJSON文字列とします。
全て、パスを/apiから始めるようにして、既存のハンドラー関数と競合しないようにします。また、更新と削除のHTTPメソッドは、それぞれPUTとDELETEに変更しています。URLパターンのその他の部分は、これまでと同様です。
また、API用のデフォルトのハンドラー関数api_not_foundも用意します。
RESTful APIとは、REST(REpresentational State Transfer)の原則に準拠して設計、構築されたWebシステムの呼び出しインタフェースを指します。RESTは、分散型システムにおけるソフトウェア連携に適した設計原則の考え方に基づいています。具体的には、分かりやすいURLが用いられる、HTTPメソッドの使い方が統一されている、ステートレスである、といったことを満たしていることが挙げられます。
APIは新しいハンドラー関数として実装するので、src/main.rsファイルにルーティングルール登録部分をリスト1のように追記します。APIのパスは/api/〜となっているので、これをスコープという方法でまとめます。
…略… App::new() …略… .service( web::scope("/api") (1) .service(handler::api_index) (2) .service(handler::api_show) .service(handler::api_create) .service(handler::api_update) .service(handler::api_destroy) .default_service(web::to(handler::api_not_found)) ) .default_service(web::to(handler::not_found)) …略…
注目すべきは、(1)のscopeメソッドです。scopeメソッドを使うと、パスの共通部(スコープ)を指定して複数のルーティングルールをグループ化することができます。この場合は、パスが「/api」で始まるものをまとめています。ハンドラー関数の注釈でパスの指定が冗長になるのを防ぎ、保守性を向上させるための仕組みです。
scopeメソッドにチェインさせるserviceメソッドの使い方は、(2)のようにこれまでと変わりません。「/api」下にあるものとして、ハンドラー関数の注釈を調べに行きます。
Copyright © ITmedia, Inc. All Rights Reserved.