Learning
토픽 159 / 192·시스템 설계 및 아키텍처 패턴

REST API

REST API

HTTP 기반의 자원 중심 API 설계 스타일

특징: 단순성(↑), 캐싱(↑), 실시간 양방향(↓)

구성요소: 자원, HTTP 메서드, 상태 코드, 표현

기술요소: JSON, OpenAPI, HATEOAS

RESTful 6대 원칙 (Roy Fielding)

  • Client-Server 분리: 클라이언트와 서버 역할 분리, 독립적 진화
  • Stateless (무상태): 각 요청은 독립적, 서버가 클라이언트 상태 미보관, 요청에 필요 정보 모두 포함
  • Cacheable (캐시 가능): 응답에 캐시 가능 여부 명시(Cache-Control), 네트워크 효율 향상
  • Uniform Interface (일관된 인터페이스): 자원 식별(URI), 표현을 통한 자원 조작, 자기 서술적 메시지, HATEOAS
  • Layered System (계층화): 클라이언트는 직접 서버인지 중간 계층인지 모름, 프록시/LB/게이트웨이 삽입 가능
  • Code on Demand (선택): 서버가 클라이언트에 실행 코드 전송 가능 (JavaScript 등)

HTTP 메서드별 의미/특성

주요 상태 코드: 200(OK), 201(Created), 204(No Content), 400(Bad Request), 401(Unauthorized), 403(Forbidden), 404(Not Found), 409(Conflict), 429(Too Many Requests), 500(Internal Server Error)

설계 모범사례

  • URI는 명사 복수형 사용 (/users, /orders), 동사 사용 금지
  • 계층 관계는 경로로 표현 (/users/1/orders)
  • 필터/정렬/페이징은 쿼리 파라미터 (?page=1&size=20&sort=name)
  • 버전 관리: URI(/v1/users) 또는 헤더(Accept: application/vnd.api+json;version=1)
  • HATEOAS: 응답에 관련 리소스 링크 포함하여 API 탐색 가능
  • 에러 응답에 code, message, details 포함

적용사례: 웹 API, 모바일 백엔드, 공개 API

비교: REST(자원/HTTP/텍스트) vs RPC(동작/다양) vs GraphQL(쿼리/유연)

연관: HTTP, JSON, API 설계, OpenAPI/Swagger