RESTful API란?
- 로이 필딩이 2000년에 정의한 네트워크 소프트웨어 아키텍처
- 네트워크에서 통신을 구성할 때 사용하는 설계 지침
- REST 아키텍쳐의 원칙을 따르면서 개발 된 Web API
- REST의 원칙을 따르는 시스템을 아우러 RESTful API라 지칭
- 일관적인 규칙을 통한 API의 이해도 및 호환성을 높이는 것이 주 목적
API(Application Programming Interface)란?
- 응용 프로그램 간에 상호 작용할 수 있도록 만든 인터페이스
- Web API, Library API, Operating System API 등
- 외부 서비스가 특정 기능을 사용하거나 데이터에 접근할 수 있게 하는 방법을 제공
- 웹 개발에서는 주로 Web API를 말하며, HTTP를 통해 클라이언트와 서버 간의 통신을 제공
- Web API의 경우 데이터를 JSON, XML 등 여러 형식으로 주고받을 수 있으나, 현재는 대부분 JSON형식으로 통신을 주고 받음
REST(Representational State Transfer)란?
- 2000년도에 HTTP의 주요 저자 중 한 사람인 로이 필딩(Roy Fielding)이 최초로 소개
- 당시 웹(HTTP) 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표
- REST의 구성요소
- 자원(RESOURCE)
자원을 구별하기 위한 “/users/1”과 같은 HTTP URL
- 행위(Verb)
HTTP METHOD
- 표현(Representations)
서로 주고 받는 데이터의 형식 (JSON, XML, TEXT 등)
- REST의 특징
- Resource-Centric(자원 중심적)
REST는 자원을 중심으로 설계되어 각 자원은 고유한 식별자를 가짐
- Uniform Interface(인터페이스 일관성)
통일된 인터페이스를 사용하여 클라이언트와 서버 간의 상호 작용을 단순화
- ⚠Stateless(무상태성)
클라이언트의 이전 상태를 서버가 저장 및 관리를 하지 않음
- Self-descriptive(자체 표현)
각 요청과 응답은 자원의 상태에 대한 정보를 포함하여 상호 작용이 용이
- Server-Client Architecture(서버-클라이언트 구조)
자원을 가진 쪽이 서버, 그 자원을 요청하는 쪽이 클라이언트로 구성
- Layered System(계층화)
클라이언트는 REST API Server만 호출 가능
보안, 로드 밸런싱, 암호화 계층 등을 추가해 다중 계층으로 구성해 구조상의 유연성을 증가
로드밸런싱, 공유 캐시 등을 통해 확장성과 보안성을 향상
PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용 가능
- Cacheable(캐시 처리 가능)
대량의 요청을 효율적으로 처리하기 위해 캐시가 요구
웹에서 사용하는 기존의 인프라를 그대로 활용하여 캐싱 기능을 적용 가능 > Was
- Code-On-Demand(optional)
선택 사항으로 Server로부터 스크립트를 받아서 Client에서 실행
RESTful API의 규칙
- URI는 정보의 자원을 표현해야 한다.
- resource는 복수형 명사를 소문자로 작성해야 한다.
ex) GET /user/1 -> GET /users/1
- 자원에 대한 행위는 HTTP Method로 표현해야 한다.
ex) GET /users/detail/1 -> GET /users/1
ex) POST /users/insert/3 -> POST /users/3
- URL은 동사(행위)가 아닌 명사(결과)로 표현해야 한다.
ex) GET /select-users/detail/1 -> GET /users/1+