EROKE ORIGINAL WEBBOOK

10년 뒤에도 깨지지 않는 API 설계

전체 목차22개 장
  1. 10년 뒤에도 깨지지 않는 API 설계: 1장. API는 함수가 아니라 조직 간 약속이다
  2. 10년 뒤에도 깨지지 않는 API 설계: 2장. 스타일을 문제에 맞게 고른다
  3. 10년 뒤에도 깨지지 않는 API 설계: 3장. Resource와 상태 전이를 모델링한다
  4. 10년 뒤에도 깨지지 않는 API 설계: 4장. HTTP 의미를 지킨다
  5. 10년 뒤에도 깨지지 않는 API 설계: 5장. 오류를 RFC 9457 계약으로 만든다
  6. 10년 뒤에도 깨지지 않는 API 설계: 6장. 입력 schema는 닫힌 세계가 아니다
  7. 10년 뒤에도 깨지지 않는 API 설계: 7장. Pagination은 데이터 변화까지 설계한다
  8. 10년 뒤에도 깨지지 않는 API 설계: 8장. 동시성은 ETag와 version으로 드러낸다
  9. 10년 뒤에도 깨지지 않는 API 설계: 9장. 멱등성은 키 저장소까지 포함한다
  10. 10년 뒤에도 깨지지 않는 API 설계: 10장. 인증과 인가를 분리한다
  11. 10년 뒤에도 깨지지 않는 API 설계: 11장. Rate limit은 공정성과 복구 계약이다
  12. 10년 뒤에도 깨지지 않는 API 설계: 12장. 비동기 작업에 상태 resource를 준다
  13. 10년 뒤에도 깨지지 않는 API 설계: 13장. Webhook은 서명·중복·순서가 핵심이다
  14. 10년 뒤에도 깨지지 않는 API 설계: 14장. Schema evolution은 소비자 관점이다
  15. 10년 뒤에도 깨지지 않는 API 설계: 15장. Version은 마지막 수단이다
  16. 10년 뒤에도 깨지지 않는 API 설계: 16장. OpenAPI를 실행 계약으로 쓴다
  17. 10년 뒤에도 깨지지 않는 API 설계: 17장. SDK는 제품이다
  18. 10년 뒤에도 깨지지 않는 API 설계: 18장. Gateway와 API 책임을 나눈다
  19. 10년 뒤에도 깨지지 않는 API 설계: 19장. 관측 가능성을 계약에 넣는다
  20. 10년 뒤에도 깨지지 않는 API 설계: 20장. API 보안 test를 자동화한다
  21. 10년 뒤에도 깨지지 않는 API 설계: 21장. Deprecation과 종료를 운영한다
  22. 10년 뒤에도 깨지지 않는 API 설계: 22장. 최종 캡스톤과 출간 게이트

HTTP·OpenAPI·OAuth·Webhook·SDK의 호환성과 운영 계약

장기 소비자를 위한 호환성과 운영 계약을 설계한다.

상태: 출간 후보 웹교정쇄 · 자동 QA 통과 · API·보안 감수 대기 · 22개 장

HTTP·OpenAPI·OAuth·Webhook·SDK의 호환성과 운영 계약

기준일: 2026-08-14 · 상태: 출간 후보 웹교정쇄 · 자동 QA 후 사람 현장 감수 대기

FieldPass Partner API를 소비자가 안전하게 업그레이드할 수 있는 장기 계약으로 만든다. 대상 독자는 REST endpoint는 만들지만 버전 변경·재시도·오류·SDK 운영이 어려운 백엔드 개발자다. 기능을 따라 입력하는 데서 끝내지 않고 결정의 전제, 실패, 증거와 rollback을 한 세트로 남긴다. 숫자·한도·가격·UI는 영구 사실이 아니며 실습 직전 공식 문서를 다시 확인한다.

FieldPass는 방문 예약, 기사 배정, 사진, 결제와 정산을 가진 합성 B2B 서비스다. 여섯 권이 같은 tenant-demo, res-demo-101, run-demo-001을 사용한다. 따라서 도메인 결정이 API, telemetry, infrastructure, event와 edge에서 같은 의미인지 비교할 수 있다.

  1. npm run test로 여섯 위험 fixture를 실행한다.
  2. npm run build로 원고와 SVG를 재생성한다.
  3. lab/public/index.html을 열어 입력·판정·증거·원복을 같은 화면에 기록한다.
  4. 실제 cloud·domain 적용은 소유자 승인, 비용 상한과 별도 staging에서만 한다.

cd fieldpass-platform
npm run qa
npm start

먼저 version 9로 의도한 실패와 Problem Details를 확인하고 새 process에서 version 1로 성공·Outbox 대사를 실행한다. 실제 cloud·domain 변경은 소유자 승인과 비용 상한이 있는 staging에서만 한다.

동일 fixture로 실행한 FieldPass 실제 API 화면
동일 fixture로 실행한 FieldPass 실제 API 화면
소비자까지 이어지는 계약
소비자까지 이어지는 계약
변경 호환성 게이트
변경 호환성 게이트
API 전체 수명주기
API 전체 수명주기

{"type":"https://api.example.invalid/problems/version-conflict","title":"Version conflict","status":409,"instance":"urn:demo:incident:01"}

POST /v1/reservations HTTP/1.1
Idempotency-Key: demo-command-001
If-Match: "v3"

compareApiSchemas({required:['id','status']},{required:['id','status','memo']});

node --test test/platform-lab.test.mjs

contracts/openapi.yaml을 정본으로 열고 예약 확정 요청의 필수 header, expectedVersion과 Problem Details를 확인한다. npm run verify:openapi 뒤 실제 HTTP E2E를 실행해 spec과 runtime의 status·content-type·ETag가 같은지 대사한다. 문서 generator 성공은 계약 일치의 증거가 아니다.

memo 필드를 선택 필드로 추가한 schema와 필수 필드로 추가한 schema를 만든다. 기존 consumer fixture가 전자는 견디고 후자는 호환성 gate에서 실패해야 한다. enum 추가, 알 수 없는 field, null과 누락, cursor의 동일 시각 tie-break도 같은 방식으로 시험한다.

멱등성 실습은 같은 key·같은 body의 결과 재사용과 같은 key·다른 body의 409를 모두 검증한다. webhook은 raw body signature, timestamp, replay window, eventId inbox와 재전송 log가 필요하다. 제거할 endpoint에는 소비자 inventory, 대체 경로, 관측 기간과 rollback window를 붙인다.

목차

  1. 1장. API는 함수가 아니라 조직 간 약속이다
  2. 2장. 스타일을 문제에 맞게 고른다
  3. 3장. Resource와 상태 전이를 모델링한다
  4. 4장. HTTP 의미를 지킨다
  5. 5장. 오류를 RFC 9457 계약으로 만든다
  6. 6장. 입력 schema는 닫힌 세계가 아니다
  7. 7장. Pagination은 데이터 변화까지 설계한다
  8. 8장. 동시성은 ETag와 version으로 드러낸다
  9. 9장. 멱등성은 키 저장소까지 포함한다
  10. 10장. 인증과 인가를 분리한다
  11. 11장. Rate limit은 공정성과 복구 계약이다
  12. 12장. 비동기 작업에 상태 resource를 준다
  13. 13장. Webhook은 서명·중복·순서가 핵심이다
  14. 14장. Schema evolution은 소비자 관점이다
  15. 15장. Version은 마지막 수단이다
  16. 16장. OpenAPI를 실행 계약으로 쓴다
  17. 17장. SDK는 제품이다
  18. 18장. Gateway와 API 책임을 나눈다
  19. 19장. 관측 가능성을 계약에 넣는다
  20. 20장. API 보안 test를 자동화한다
  21. 21장. Deprecation과 종료를 운영한다
  22. 22장. 최종 캡스톤과 출간 게이트