
ts-rest는 TypteScript 기반의 API Contract 를 중심으로 서버와 클라이언트 간의 타입 안정성을 보장하는 라이브러리
핵심 키워드
API의 진짜 인터페이스는 Controller도 아니고, Client 함수도 아니라 하나의 Typescript Contract다
을 하나의 contract 객체로 선언하고, 해당 contract를
로 사용
| 기존 방식 | ts-rest |
|---|---|
| 서버 DTO 따로 | 단일 contract |
| 클라이언트 API 타입 수동 작성 | 자동 생성 |
| 타입은 컴파일 타임 전용 | 런타임 검증 포함 |
| 서버 변경시 프론트 깨짐 | 컴파일 단계에서 즉시 감지 |
공식 문서에서 지적하는 기존 API 개발의 근본적인 문제는 다음과 같다.
보통 API는 Controller, Swagger 문서, 프론트 API 함수 세곳에 흩어져 정의된다.
ts-rest는 해당 정의가 오직 contract에서만 존재해야 한다는 철학을 가진다.
공식 문서에서 명확히 말하는 포인트는 다음과 같다.
ts-rest는 Typescript 자체를 스펙 언어로 사용
Contract란 “계약”이라는 의미로 다음과 같은 API 문서를 하나의 계약으로 정의하고 정적으로 선언한 객체다.
1{
2 method: 'GET' | 'POST' | ...
3 path: '/users/:id'
4 body?: Schema
5 query?: Schema
6 headers?: Schema
7 responses: {
8 200: Schema
9 404?: Schema
10 }
11}
12
해당 Contract는 다음 용도로 사용된다.
따라서, ts-rest에서 Contract는 타입+런타임 스펙이다.