Resty: RESTful API 구축을 위한 작은 기수 트리 기반 라이브러리

며칠 전에 나는 내가 만든 라이브러리typed에 대해 게시했는데 사람들이 내가 만든 것을 실제로 사용하게 되기 전에는 결코 일어나지 않았습니다. 문제는 typed를 Node의 http 코어 모듈을 둘러싼 얇은 래퍼인 resty의 동반 라이브러리로 만들었다는 것입니다.

Resty는 Node.js에서 RESTful API를 작성하는 가장 좋은 방법이라고 생각합니다. 가져오기 API에서 일부 구문을 차용하고 물론 형식이 안전합니다. 끝점을 작성하는 방법을 보여 드리겠습니다.



약 3줄의 코드 끝점을 갖는 것은 특히 유형 안전성이 관련되어 있기 때문에 나에게 매우 좋습니다. request.jsonrequest.query 를 자세히 살펴보십시오. 둘 다 typed 함수를 전달해야 합니다. 유효성 검사가 실패하면 무엇이 잘못되었는지에 대한 자세한 설명과 함께 400 Bad Request 오류가 반환됩니다.

또한 postMoviegetMoviesResponse 객체에서 유형을 유추하기 때문에 입력되므로 getMovies가 Response<Movie[]>를 반환하고 postMovie가 Response<Movie>를 반환한다는 것을 알고 있습니다.

위의 예는 단일 파일에 기록되는 여러 엔드포인트를 보여줍니다. 나는 개인적으로 이것을 이렇게 사용하지 않지만(별도의 파일에 엔드포인트를 작성하는 것을 선호함) 데모 목적으로 이렇게 두겠습니다.

그렇다면 끝점을 함께 붙이는 방법은 무엇입니까? createHandler 함수를 사용하여 모든 끝점을 http.createServer와 직접 사용할 수 있는 단일 요청 처리기로 결합할 수 있습니다. createHandler는 가장 빠른 라우터 구현인 koa-router-tree에서 차용하고 채택한 기수 트리 기반 라우터를 내부적으로 구축하며 fastifyfind-my-way보다 훨씬 빠릅니다.

import { createServer } from "http";
import { createHandler } from "resty";
import { postMovie, getMovies } from "./endpoints";

const handler = createHandler(postMovie, getMovies);
const server = createServer(handler);

server.listen(4000, () => console.log("Listening on port 4000"));

지금 당신은 "하지만 이것은 미들웨어를 지원하지 않습니다. 어떻게 cors를 활성화합니까?"라고 생각하고 있습니다. 음, resty 는 좋은 오래된 요청 처리기일 뿐이므로 실제로 connect 과 결합할 수 있습니다.

// app.ts

import connect from "connect";
import logger from "morgan";
import cors from "cors";
import { createHandler } from "resty";
import { postMovie, getMovies } from "./endpoints";

const handler = createHandler(postMovie, getMovies);

export const app = connect();

app.use(logger("dev"));
app.use(cors());
app.use(handler);

이러한 방식으로 작업을 수행할 때 좋은 점은 supertest 를 사용하여 익스프레스 애플리케이션을 테스트하는 것과 같은 방식으로 엔드포인트를 테스트할 수 있다는 것입니다.

요즘 멋진 아이들이 모두 서버리스 API를 작성하고 있다는 것을 알고 있지만, 저는 여전히 단순하고 개인적인 프로젝트를 위해 옛날 방식으로 API를 작성하는 것을 즐깁니다. 어쨌든, 나는 이 라이브러리도 공유할 생각을 했고 누군가가 그것으로부터 도움을 받기를 바랍니다.

건배!


브리엘로프 / 휴식


RESTful API용 구문 설탕





휴식


Syntactic sugar for RESTful APIs.

resty는 RESTful API 구축을 위한 아름답고 단순하며 사용하기 쉬운 API를 제공하는 Node의 핵심 http 모듈 위에 매우 얇은 계층을 추가합니다. 대부분 구문 설탕이지만 몇 가지 추가 기능도 제공합니다.
  • 매우 빠른 기수 트리 기반 라우팅 시스템으로 선언적 방식으로 경로를 정의할 수 있습니다.
  • typed(직접 종속성)을 사용하여 요청 매개변수 및 JSON 페이로드를 검증하는 간단하고 강력한 방법입니다.
  • 오류 응답을 자동으로 생성하는 기본 제공 오류 처리.
  • 관심사 분리: http 핸들러를 모듈 방식으로 작성하고 createHandler 함수를 사용하여 모두 함께 붙입니다.
  • 형식이 안전한 요청 및 응답 개체입니다.

  • 작성 당시resty는 실제 환경에서 완전히 테스트되지 않았으며 프로덕션 용도로는 권장되지 않습니다(아직). 소규모 개인 프로젝트에서 이를 가지고 놀 수 있습니다…

    View on GitHub

    좋은 웹페이지 즐겨찾기