소개 (Introduction)
dench-fetch는 네이티브 Fetch API를 기반으로 동작하는 TypeScript HTTP 요청 빌더입니다.
Fetch API의 RequestInit 객체를 요청마다 직접 작성하는 대신, HTTP 메서드와 요청 설정을 메서드 체인으로 조합하고 마지막에 실행 메서드를 호출하는 방식을 제공합니다.
import { dench } from 'dench-fetch';
type User = {
id: number;
name: string;
};
const api = dench('https://api.example.com');
const user = await api
.get<User>('/users/1')
.auth('access-token')
.timeout(3000)
.toJson();
왜 dench-fetch인가요?
네이티브 Fetch API는 유연하지만, 반복되는 설정이 많아지면 요청의 핵심 의도를 파악하기 어려워질 수 있습니다.
const response = await fetch('https://api.example.com/users/1', {
method: 'GET',
headers: {
Authorization: 'Bearer access-token',
},
signal: AbortSignal.timeout(3000),
});
if (!response.ok) {
throw new Error(`Request failed: ${response.status}`);
}
const user = await response.json();
같은 요청을 dench-fetch에서는 HTTP 메서드, 인증, 제한 시간, 응답 형식을 순서대로 읽을 수 있는 체인으로 표현합니다.
주요 특징
- Fetch API 기반: 내부적으로 전역
fetch를 사용하며, 필요하면toResponse()로 네이티브Response를 받을 수 있습니다. - 명시적인 실행 시점: 설정 메서드는 요청을 구성하고,
toJson(),toFormData(),toResponse()가 실제 요청을 실행합니다. - 타입 기반 응답 처리:
get<T>(),post<T>(),put<T>(),delete<T>()에서 JSON 응답 타입을 지정할 수 있습니다. - 요청 본문 도우미: JSON,
FormData,Blob, URL 인코딩 데이터, 원시 body를 전송하는 메서드를 제공합니다. - 공통 설정 재사용:
copy()와api()를 사용해 인증, timeout 등의 설정을 재사용할 수 있습니다. - 기본 URL 경계 정규화: base URL과 API 경로 사이의 중복 슬래시를 기본적으로 정리합니다.
- HTTP 오류 처리: 응답의
ok가false이면 오류를 던지며, 등록된 오류 콜백도 호출합니다.
지원하는 요청
현재 클라이언트는 다음 HTTP 메서드를 지원합니다.
| 메서드 | 빌더 | 요청 body 도우미 |
|---|---|---|
| GET | get<T>() | 지원하지 않음 |
| POST | post<T>() | 지원 |
| PUT | put<T>() | 지원 |
| DELETE | delete<T>() | 지원하지 않음 |
dench-fetch는 Fetch API를 대체하는 별도의 네트워크 엔진이 아닙니다. Fetch API 위에서 요청 구성을 더 읽기 쉽고 재사용 가능하게 만드는 도구입니다.
다음 문서에서는 설치 방법과 핵심 개념, 기본 사용법을 순서대로 설명합니다.