이 게시물에서는 Deno, Oak 프레임워크 및 DenoKV 데이터베이스를 사용하여 REST API를 생성하는 방법을 안내합니다.
이 모든 작업을 수행하기 위해 간단한 도서 API를 구축하겠습니다. 하지만 먼저 이러한 기술을 이해해 봅시다.
데노는 복잡하지 않은 자바스크립트를 지향합니다.
이는 개발자가 Node.js에서 직면하는 많은 문제를 해결함으로써 이루어집니다. Deno의 간단한 접근 방식은 개발자가 보다 안전하고 효율적이며 현대적인 JavaScript 코드를 작성하는 데 도움이 됩니다.
Deno의 가장 큰 장점은 보안입니다. 기본적으로 개발자가 명시적으로 허용하지 않는 한 파일 시스템, 네트워크 또는 환경 변수에 대한 액세스를 허용하지 않습니다. Deno는 또한 개발자에게 추가 구성 없이 기본 TypeScript 지원을 제공합니다.
Deno와 함께 제공되는 기타 기능은 다음과 같습니다.
Oak은 개발자가 웹 앱과 API를 구축하는 데 도움을 주는 Deno용 미들웨어 프레임워크입니다.
Node.js의 Express와 유사하게 HTTP 요청 처리, 라우팅 관리, 미들웨어 통합을 위한 도구를 제공합니다. 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의 경우: 셸 사용
설치를 테스트하려면 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은 두 개의 문자열이 포함된 배열을 사용합니다. 하나는 네임스페이스 "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를 사용하면 새로운 키-값 쌍을 DB에 저장할 수 있습니다. 이 경우 배열(두 개의 문자열, 네임스페이스 및 키 포함)과 저장할 값을 사용합니다.
다음으로 경로 핸들러를 추가하여 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; }
DenoKV는 여전히 불안정한 API이기 때문에 --stable-kv 플래그를 추가했습니다.
또한 Deno 네트워크 액세스 권한을 부여하기 위해 --allow-net 플래그를 추가했습니다.
이렇게 되면 deno run dev를 실행하여 앱을 시작할 수 있습니다.
포스팅이 끝났습니다.
이제 Deno Oak와 DenoKV 데이터베이스를 사용하여 REST API를 생성할 수 있습니다.
위 내용은 Deno 및 Oak Framework를 사용한 REST API 구축 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!