Denoの標準HTTPモジュールでルーティング処理を作成する方法

概要

Denoの標準HTTPモジュールを使用して、簡単にルーティング機能を使用する方法を紹介します。
ルーティングは、HTTPリクエストを処理するためのエンドポイントを指定することで定義されます。

以下では、ルーティングの概念、ルートの定義、ルートハンドラの作成、ルーティングパラメータの処理、およびルートのオプションについて詳しく説明します。

ここでは、以下バージョンを使用した、ルーティング方法を説明します。

Deno v1.16.0

また、今回作成するコードは全て、GitHubに掲載しています。

ルーティングを作成する方法

ルーティングは、クライアントからのリクエストが特定のエンドポイントに到達した際に、Denoアプリケーションがどのように処理するかを定義します。

ルーティングは、HTTPメソッド(GET、POST、PUT、DELETEなど)とパス(URL)の組み合わせで定義されます。

以下のコードは、Denoの標準HTTPモジュールを使用して、HTTPリクエストを処理するための基本的なルーティングを作成します。

routing.ts

import { serve } from "https://deno.land/std@0.193.0/http/server.ts";

const server = serve({ port: 8000 });
console.log("HTTP webserver running on: http://localhost:8000/");

for await (const request of server) {
  if (request.method === "GET" && request.url === "/") {
    request.respond({ body: "Hello, from the homepage!" });
  } else if (request.method === "GET" && request.url === "/about") {
    request.respond({ body: "Hello, from the about page!" });
  } else {
    request.respond({ status: 404, body: "Page not found" });
  }
}

解説

  • HTTPサーバーの作成と起動
const server = serve({ port: 8000 });
console.log("HTTP webserver running on: http://localhost:8000/");

ここでは、Denoの標準HTTPモジュールのserve関数を用いてHTTPサーバーを作成し、8000番ポートで起動しています。

  • ルーティングの定義
for await (const request of server) {
  if (request.method === "GET" && request.url === "/") {
    request.respond({ body: "Hello, from the homepage!" });
  } else if (request.method === "GET" && request.url === "/about") {
    request.respond({ body: "Hello, from the about page!" });
  } else {
    request.respond({ status: 404, body: "Page not found" });
  }
}

サーバーがリクエストを受信すると、リクエストのHTTPメソッドとURLに基づいて適切なレスポンスを返します。この例では、GETメソッドの"/“と”/about"パスに対するリクエストを処理し、それ以外のリクエストに対しては404エラーを返します。

テスト

# GETリクエストのテスト
curl -X GET http://localhost:8000/
curl -X GET http://localhost:8000/about
curl -X GET http://localhost:8000/notfound

まとめ

今回の記事では、ルーティングについて学びました。ルーティングは、リクエストのパスとHTTPメソッドに基づいて、適切なハンドラーを選択する処理です。ルーティングを実装することで、Web APIの実装が容易になります。次回は、ルーティングを用いて簡易的なWeb APIを実装します。