本文將引導您使用 Deno、Oak 框架和 DenoKV 資料庫建立 REST API。
我們將建立一個簡單的圖書 API 來完成這一切。但首先,讓我們先了解這些技術。
Deno 旨在簡化 Javascript。
它透過解決開發人員在使用 Node.js 時面臨的許多問題來實現這一點。 Deno 簡單的方法可以幫助開發人員編寫更安全、高效、現代的 JavaScript 程式碼。
Deno 的一個巨大賣點是它的安全性。預設情況下,除非開發人員明確允許,否則它不允許存取檔案系統、網路或環境變數。 Deno 還為開發人員提供原生 TypeScript 支持,無需額外配置。
Deno 附帶的其他功能有:
Oak 是 Deno 的中間件框架,可協助開發人員建立 Web 應用程式和 API。
它提供了處理 HTTP 請求、管理路由和整合中間件的工具,類似於 Node.js 中的 Express。 Oak 還具有開箱即用的 TypeScript,並受益於 Deno 的安全性和現代運行時環境。這為開發人員提供了熟悉的語法,同時仍然享受更多現代功能。
Oak 讓開發者在安全、有效率、漸進的環境中採用 TypeScript 優先的實務。
DenoKV 是一個管理 Deno 結構化資料的鍵值資料庫。
每個資料或“值”都有一個唯一的識別碼或“鍵”,可以透過引用其鍵輕鬆取得資料。這種方法允許開發人員管理資料而無需設定單獨的資料庫伺服器。 DenoKV 非常適合輕量級應用和快速原型設計。
開發人員可以獲得一個簡單的解決方案,可以在程式碼旁邊管理資料。
curl -fsSL https://deno.land/install.sh | sh
對於 macOS:使用 Shell
irm https://deno.land/install.ps1 | iex
對於 Windows:使用 PowerShell
curl -fsSL https://deno.land/install.sh | sh
對於 Linux:使用 Shell
若要測試您的安裝,請執行 deno -version。
運行指令 deno init deno-oak-demo 建立一個名為 deno-oak-demo 的新項目,然後 cd 進入它
接下來,您需要在 deno-oak-demo 目錄中建立 4 個新檔案:
您的 eno-oak-demo 目錄現在應該如下所示
接下來,您需要安裝 Deno 的官方 VSCode 擴展,該擴展添加了將 Deno 與 Visual Studio Code 結合使用的支援。
使用指令 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 接受一個包含兩個字串的陣列:一個表示名稱空間“books”,另一個表示正在檢索的特定書籍的鍵。
接下來,讓我們定義路由處理程序以透過 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 可用於在資料庫中儲存新的鍵值對,在本例中,它需要一個陣列(包含兩個字串;命名空間和鍵)和要儲存的值。
接下來,新增路由處理程序以按 id 更新書籍:
curl -fsSL https://deno.land/install.sh | sh
kv.set 也可以用來更新鍵值對的值。在這種情況下,它需要一個陣列(帶有兩個字串;命名空間和將更新其值的鍵)和要更新的新值。
最後,讓我們新增路由處理程序以按 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; }
我們新增了 --stable-kv 標誌,因為 DenoKV 仍然是一個不穩定的 API。
此外,我們還新增了 --allow-net 標誌來授予 Deno 網路存取權限。
完成此操作後,我們可以透過執行 deno run dev 來啟動我們的應用程式。
文章已經結束了。
現在您可以使用 Deno Oak 和 DenoKV 資料庫建立 REST API。
以上是使用 Deno 和 Oak 框架建立 REST API 的指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!