この投稿では、Deno、Oak フレームワーク、DenoKV データベースを使用して REST API を作成する方法を説明します。
これらすべてを行うためのシンプルな書籍 API を構築します。まずは、これらのテクノロジーについて理解しましょう。
Deno は Javascript を単純化することを目指しています。
開発者が Node で直面する問題の多くを修正することでこれを実現します。 Deno の直接的なアプローチは、開発者がより安全で効率的な最新の JavaScript コードを作成するのに役立ちます。
Deno の大きなセールスポイントはそのセキュリティです。デフォルトでは、開発者が明示的に許可しない限り、ファイル システム、ネットワーク、または環境変数へのアクセスは許可されません。また、Deno は開発者に追加の構成を必要とせずにネイティブ TypeScript サポートを提供します。
Deno に付属するその他の機能は次のとおりです:
Oak は、開発者が Web アプリと API を構築するのに役立つ Deno のミドルウェア フレームワークです。
Node.js の Express と同様に、HTTP リクエストの処理、ルーティングの管理、ミドルウェアの統合のためのツールが提供されます。 Oak には、すぐに使える TypeScript も含まれており、Deno のセキュリティと最新のランタイム環境の恩恵を受けています。これにより、開発者は使い慣れた構文を使用しながら、より最新の機能を利用できるようになります。
Oak を使用すると、開発者は安全、効率的、進歩的な環境で TypeScript ファーストの実践を採用できます。
DenoKV は、Deno の構造化データを管理するキーと値のデータベースです。
各データまたは「値」には一意の識別子または「キー」があり、そのキーを参照することでデータを簡単に取得できます。このアプローチにより、開発者は別のデータベース サーバーをセットアップせずにデータを管理できます。 DenoKV は、軽量アプリケーションと高速プロトタイピングに最適です。
開発者は、コードと並行してデータを管理するための簡単なソリューションを入手できます。
curl -fsSL https://deno.land/install.sh | sh
macOS の場合: シェルの使用
irm https://deno.land/install.ps1 | iex
Windows の場合: PowerShell の使用
curl -fsSL https://deno.land/install.sh | sh
Linux の場合: シェルの使用
インストールをテストするには、deno -version.
コマンド deno init deno-oak-demo を実行して、deno-oak-demo という新しいプロジェクトを作成し、それに cd します
次に、deno-oak-demo ディレクトリに 4 つの新しいファイルを作成する必要があります。
deno-oak-demo ディレクトリは次のようになります
次に、Visual Studio Code で Deno を使用するためのサポートを追加する Deno の公式 VSCode 拡張機能をインストールする必要があります。
コマンド deno add jsr:@oak/oak を使用して、Oak フレームワークを依存関係としてインストールします。
deno.json ファイルは次のようになります
Deno にパッケージをインストールするたびに、そのパッケージはインポートとして deno.json ファイルに配置されます。次に、このパッケージをファイルにインポートする場合は、deno.json で定義されたエイリアスを使用するか、パッケージの URL を直接参照できます。
book.types.ts ファイルに次のコードを追加します
curl -fsSL https://deno.land/install.sh | sh
そして book.dto.ts ファイルにこれを追加します
irm https://deno.land/install.ps1 | iex
次のコードを validation.ts に追加します
curl -fsSL https://deno.land/install.sh | sh
まず、Oak Router、Book インターフェイス、createBookSchema および updateBookSchema を book.routes.ts ファイルにインポートします。
export interface Book { id: string; title: string; author: string; description: string; }
次に、DenoKV データベースを初期化し、HTTP ルートを処理する新しいルーター インスタンスを作成します。
export interface CreateBookDTO { title: string; author: string; description: string; }
次に、ID で書籍を取得するヘルパー関数を作成します。
import { z } from "https://deno.land/x/zod@v3.17.0/mod.ts"; export const createBookSchema = z.object({ title: z.string(), author: z.string(), description: z.string(), }); export const updateBookSchema = z.object({ title: z.string().optional(), author: z.string().optional(), description: z.string().optional(), });
kv.get は 2 つの文字列を含む配列を受け取ります: 1 つは名前空間「books」を表し、もう 1 つは取得される特定の書籍のキーを表します。
次に、ID によって単一の書籍を取得するルート ハンドラーを定義しましょう:
import { Router } from "@oak/oak/router"; import type { Book } from "./book.types.ts"; import { createBookSchema, updateBookSchema } from "./validation.ts";
Express とは異なり、Oak ではリクエストとレスポンスの両方がコンテキスト オブジェクトからアクセスされます。コンテキスト オブジェクトにはリクエスト データとレスポンス メソッドの両方があり、HTTP インタラクションを処理する効率的な方法が提供されます。
次に、すべての書籍を取得するルート ハンドラーを追加します。
const kv = await Deno.openKv(); const bookRouter = new Router;
Kv.list は、共通のプレフィックス (名前空間) を共有するすべてのキーと値のペアを取得します。
次に、ルート ハンドラーを追加して新しいブックを作成します。
async function getBookById(id: string) { const entry = await kv.get(["books", id]); return entry.value as Book | null; }
Kv.set を使用して、新しいキーと値のペアを DB に保存できます。この場合、配列 (名前空間とキーの 2 つの文字列) と保存する値を受け取ります。
次に、ID によって書籍を更新するためのルート ハンドラーを追加します。
curl -fsSL https://deno.land/install.sh | sh
kv.set は、キーと値のペアの値を更新するために使用することもできます。この場合、配列 (名前空間と値が更新されるキーという 2 つの文字列を含む) と更新される新しい値を受け取ります。
最後に、ID で書籍を削除するルート ハンドラーを追加しましょう:
irm https://deno.land/install.ps1 | iex
kv.delete は、指定されたキーと値のペアを削除します。
main.ts ファイルに次のコードを追加します:
curl -fsSL https://deno.land/install.sh | sh
アプリを実行するには、deno.json に小さな変更を加える必要があります。
export interface Book { id: string; title: string; author: string; description: string; }
DenoKV はまだ不安定な API であるため、--stable-kv フラグを追加しました。
また、Deno のネット アクセスを許可する --allow-net フラグを追加しました。
これを配置すると、deno run dev を実行してアプリを起動できます。
投稿は終わりました。
これで、Deno Oak と DenoKV データベースを使用して REST API を作成できるようになりました。
以上がDeno および Oak Framework を使用した REST API 構築ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。