Rust
アイアンウェブフレームワーク
サーチ…
前書き
シンプルな「Hello」サーバー
この例では、サーバー要求を送信するときにユーザーにハードコードされた応答を送信します。
extern crate iron;
use iron::prelude::*;
use iron::status;
// You can pass the handler as a function or a closure. In this
// case, we've chosen a function for clarity.
// Since we don't care about the request, we bind it to _.
fn handler(_: &mut Request) -> IronResult<Response> {
Ok(Response::with((status::Ok, "Hello, Stack Overflow")))
}
fn main() {
Iron::new(handler).http("localhost:1337").expect("Server failed!")
}
この例で新しいIron
サーバーを作成するときは、より詳細なエラーメッセージでエラーをキャッチするexpect
をexpect
してください。プロダクションアプリケーションでは、生成されたエラーを処理します ( http()
マニュアルを参照)。
鉄のインストール
この依存関係をCargo.toml
ファイルに追加します。
[dependencies]
iron = "0.4.0"
cargo build
を実行cargo build
と、CargoはIronの指定バージョンをダウンロードしてインストールします。
アイロンによるシンプルなルーティング
この例では、Ironを使用した基本的なWebルーティングを提供します。
まず、 Cargo.toml
ファイルにIron依存関係を追加する必要があります。
[dependencies]
iron = "0.4.*"
Ironの独自のRouterライブラリを使用します。簡単にするため、IronプロジェクトはこのライブラリをIron coreライブラリの一部として提供し、別の依存関係として追加する必要はありません。次に、IronライブラリとRouterライブラリの両方を参照します。
extern crate iron;
extern crate router;
次に、必要なオブジェクトをインポートして、ルーティングを管理し、ユーザーに応答を返します。
use iron::{Iron, Request, Response, IronResult};
use iron::status;
use router::{Router};
この例では、 main()
関数内にルーティングロジックを記述することで簡単にします。もちろん、アプリケーションが大きくなるにつれて、ルーティング、ロギング、セキュリティ上の問題、およびWebアプリケーションの他の領域を分離する必要があります。今のところ、これは良い出発点です。
fn main() {
let mut router = Router::new();
router.get("/", handler, "handler");
router.get("/:query", query_handler, "query_handler");
これまで達成してきたことを考えてみましょう。私たちのプログラムは現在、新しいIron Router
オブジェクトをインスタンス化し、2つのタイプのURLリクエストに2つの "ハンドラ"を添付します。最初の( "/"
)はドメインのルートで、2番目の( "/:query"
)は任意のパス根の下にある。
単語 "query"の前にセミコロンを使用することで、IronにURLパスのこの部分を変数として渡し、ハンドラに渡すように指示します。
次のコード行は、URLリクエストを管理する独自のrouter
オブジェクトを指定して、Ironをインスタンス化する方法です。ドメインとポートは、この例では単純化のためにハードコードされています。
Iron::new(router).http("localhost:3000").unwrap();
次に、ハンドラ、 handler
、およびquery_handler
2つのインライン関数を宣言します。これらはどちらも固定URLと可変URLを示すために使用されます。
2番目の関数では、リクエストオブジェクトが保持するURLから"query"
変数を取得し、応答としてユーザーに返します。
fn handler(_: &mut Request) -> IronResult<Response> {
Ok(Response::with((status::Ok, "OK")))
}
fn query_handler(req: &mut Request) -> IronResult<Response> {
let ref query = req.extensions.get::<Router>()
.unwrap().find("query").unwrap_or("/");
Ok(Response::with((status::Ok, *query)))
}
}
この例を実行すると、結果はWebブラウザのlocalhost:3000
表示されます。ドメインのルートは"OK"
で応答する必要があり、ルートの下のものはパスを戻す必要があります。
この例の次のステップは、ルーティングの分離と静的ページの提供です。