ilokesto

빠른 시작

이 안내에서는 직접 작성한 작은 OpenAPI 호환 타입으로 실제 요청을 보냅니다. 애플리케이션에서는 보통 이 타입을 openapi-typescript 같은 도구가 생성한 paths 타입으로 바꿉니다.

1. 설치

Fetcher 릴리스는 beta 배포 태그로 게시됩니다. 선택한 beta 채널 릴리스와 피어 의존성인 ky를 함께 설치하세요.

npm install @ilokesto/fetcher@beta ky

quick-start.ts를 만드세요.

import { createFetcher } from '@ilokesto/fetcher/openapi';

type ApiPaths = {
  '/users/{id}': {
    get: {
      parameters: { path: { id: string } };
      responses: {
        200: { content: { 'application/json': { id: number; name: string } } };
      };
    };
  };
  '/posts': {
    post: {
      requestBody: {
        required: true;
        content: { 'application/json': { title: string } };
      };
      responses: {
        201: { content: { 'application/json': { id: number; title: string } } };
      };
    };
  };
};

const api = createFetcher<ApiPaths>({
  prefixUrl: 'https://jsonplaceholder.typicode.com',
});

const user = await api
  .get('/users/{id}', {
    params: { path: { id: '1' } },
  })
  .json();

console.log(user.name);

TypeScript 실행기로 실행하세요(예: npx tsx quick-start.ts). Leanne Graham이 출력됩니다. 경로 템플릿은 ky에 도달하기 전에 실제 값으로 채워지고, user는 JSON 응답에서 { id: number; name: string }으로 추론됩니다.

아래 예시는 위에서 만든 api 클라이언트를 확장하는 코드 조각입니다. 생성된 paths 타입도 자체 엔드포인트에 같은 계약을 제공합니다.

타입 안전한 본문 보내기

const post = await api
  .post('/posts', {
    json: {
      title: 'Typed facade',
    },
  })
  .json();

json, formData, formUrlEncoded는 서로 동시에 쓸 수 없는 단축 본문 형태입니다. 세 번째 인자는 timeout, signal, hooks, context, 명시적인 본문 덮어쓰기 같은 일반 ky 옵션에 사용하세요.

ky 조합 방식 유지하기

const authed = api.extend({
  headers: {
    Authorization: `Bearer ${token}`,
  },
});

await authed.get('/users/{id}', {
  params: { path: { id: '42' } },
});

create, extend, 훅, 재시도, timeout, 커스텀 fetch, HTTPError 동작은 ky와 호환되게 유지됩니다. fetcher는 OpenAPI 형태의 입력을 준비한 뒤 내부 KyInstance에 요청을 위임합니다.

예외를 원하지 않으면 safe 사용하기

const result = await api.safe.get('/users/{id}', {
  params: { path: { id: '42' } },
});

if (result.ok) {
  result.data;
} else {
  result.error;
  result.response;
}

기본 API는 여전히 ky처럼 예외를 던집니다. safe는 같은 요청을 판별 가능한 결과로 변환합니다.

다음 단계

목차