안녕하세요, 사이드 프로젝트로 routar라는 라이브러리를 만들어서 공유합니다. 부족한 부분이 많기에 피드백 많이 부탁드립니다. 제작 계기 OpenAPI 스펙도 없고 백엔드와 계약을 공유하기도 애매한 REST 프로젝트에서, 프론트가 API 스키마를 직접 정의해야 하는 상황이 많았습니다. Zodios와 ts-rest에서 아이디어를 얻었는데 둘 다 제 상황엔 아쉬운 지점이 있었습니다. Zodios는 axios에 묶여 있는데다가 요청 파라미터가 path/query/body 구분 없이 하나의 배열이라 값이 어디서 오는지 코드만 보고 알기 어려웠고, ts-rest는 contract를 백엔드와 공유하는 걸 전제로 하는데, 때문에 contract의 API가 너무 장황하기도 하고, 특히 contract가 전송 계층(fetch/axios/ky)와 결합되어 재활용이 어렵다는 단점도 크게 다가왔습니다. 그래서 routar에서 request는 { path, query, body }로 명확히 나누고(flatten 옵션도 제공), 전송 계층은 독립된 executor로 완전히 분리했습니다. @routar/core는 zero-dependency이고 axios/ky는 각각 별도 패키지라서, 전송 계층을 바꿔도 라우터·검증 로직에는 어떤 의존성도 끼지 않습니다. 백엔드 소유 여부와 무관하게 프론트 혼자 쓸 수 있는 도구를 만들고 싶었습니다. 기능 소개 const todoRouter = defineRouter('/todos', { getDetail: endpoint({ method: 'GET', path: '/:id', request: { path: z.object({ id: z.number() }) }, response: TodoSchema, }), create: endpoint({ method: 'POST', path: '/', request: { body: z.object({ title: z.string() }) }, response: TodoSchema, }), }); const todoApi = createApi(createFetchExecutor('https://api.example.com'), todoRouter); const todo = await todoApi.getDetail({ path: { id: 1 } }); // GET, path param const next = await todoApi.create({ body: { ...
Show GN: routar - 백엔드 스펙 없이 프론트에서 API 스키마를 간편하게 관리하는 타입세이프 HTTP 클라이언트를 ...
4 weeks ago
13
Related
Strands Decider 2B - 소형 오픈소스 의사결정 모델
53 minutes ago
1
Tell HN: GitHub이 한 달이 지나도 제 소프트웨어의 크랙 복제본 삭제를 거부합니다
56 minutes ago
2
Penguin Mail - AI를 탑재한 Linux용 오픈소스 Rust 이메일 클라이언트
1 hour ago
3
Show GN: 이메일 피싱 모의훈련을 전화로 옮겼습니다. 예고 없는 전화
2 hours ago
3
토론토 기반 VPN 업체, 적법 접근 법안으로 캐나다 떠날 계획
3 hours ago
3
Claude Code의 메시지 제안 기능: 진짜 고객은 모델이라는 생각
3 hours ago
3
Show GN: 추천링크·UTM으로 오프라인 소개의 성과를 추적하는 구조
5 hours ago
3
Tips
click
Popular
프로들도 줄지어 샷 점검… KLPGA 스타 사랑방 된 더헤븐CC 연습장
2 weeks ago
73
iOS 27, iPadOS 27, macOS 27
3 weeks ago
69
손흥민 선제골 발판·골대 불운…LAFC, 7경기 만에 승리
3 weeks ago
65
영림원소프트랩, 나람 통합 ERP 구축…사료 제조·물류·회계 데이터 하나로
2 weeks ago
62
'이 악문' 김영범, 자유형 50m '대회 신기록' 금메달
2 weeks ago
55
© Clint IT 2026. All rights are reserved









English (US) ·