REST API란 무엇인가 + RESTful API
01 Feb 2021 | NetworkREST API란 무엇인가 + RESTful API
-
REST API의 탄생
- REST (Representational State Transfer)의 약자로 2000년도 로이 필딩 (Roy Fielding)의 박사학위 논문에서 최초 공개
- 웹의 장점을 최대한 활용할 수 있는 아키텍처로서 REST를 발표
-
REST의 구성
- 자원(Resource) - URI
- 행위(Verb) - HTTP Method
- 표현(Representations)
-
REST의 특징
- Uniform (유니폼 인터페이스)
- Uniform Interface는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일
- Stateless (무상태성)
- REST는 stateless 성격을 갖는다
- 세션 정보, 쿠키 정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청을 단순 처리
- 서비스의 자유도가 높아지고 서버 구현이 단순해진다
- Cacheable (캐시 가능)
- REST의 가장 큰 특징은 HTTP라는 기존 웹표준을 그대로 사용하기 때문에, Last-Modified, E-Tag를 이용하여 캐싱 구현이 가능하다
- Self-descriptiveness (자체 표현 구조)
- REST의 또 다른 큰 특징으로 REST API 메시지만 보고도 이해할 수 있는 자체 표현 구조로 되어 있다
- Client - Server 구조
- REST 서버는 API를 제공, 클라이언트는 사용자 인증, 컨텍스트(세션, 로그인 정보) 등을 직접 관리하는 구조로 각각 역할이 명확하여 서로간 의존성이 줄어든다
- Layerd System (계층형 구조)
- REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상 유연성을 확립하고 Proxy, 게이트웨이 등 네트워크 중간매체를 사용할 수 있다
- Uniform (유니폼 인터페이스)
-
REST API 디자인 가이드
-
REST API 설계시 가장 중요한 항목
- URI는 정보의 자원을 표현해야 한다 (리소스명은 명사를 사용)
- 자원에 대한 행위는 HTTP Method (GET,POST,PUT,DELETE)로 표현한다
- POST : URI를 요청하면 리소스를 생성
- GET : 리소스를 조회, 해당 도큐먼트에 대한 자세한 정보를 가져온다
- PUT : 해당 리소스를 수정
- DELETE : 해당 리소스를 삭제
-
URI 설계시 주의할 점
- 슬래시 구분자(/)는 계층 관계를 나타낸다
http://zoo.com/animals/mammals/rabbits
- URI 마지막 문자로 슬래시를 포함하지 않는다
http://zoo.com/animals/mammals/rabbits/ (x) http://zoo.com/animals/mammals/rabbits (o)
- 하이픈(-)은 가독성을 높이는데 사용
- 언더바(_)는 사용하지 않는다
- 대문자 사용을 피한다
- 파일 확장자는 포함시키지 않는다
-
리소스간 관계 표현
GET : /users/{userid}/devices (일반적으로 소유의 관계를 표현할 때)
-
Collection & Document
- 컬렉션은 도큐먼트의 집합체 (복수)
- 도큐먼트는 하나의 문서 (단수)
http://zoo.com/animals/mammals/rabbits/tomy
-
-
HTTP 응답 상태 코드
상태 코드 200 클라이언트의 요청을 정상적으로 수행 201 클라이언트가 리소스 생성을 요청, 해당 리소스가 성공적으로 생성됨
(POST를 통한 리소스 생성 작업시)상태 코드 400 클라이언트의 요청이 부적절할 경우 401 클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청했을 시 403 인증상태와 관계 없이 응답하고 싶지 않은 리소스를 클라이언트가 요청했을 시
(403 보단 400, 404 사용 권고, 403은 리소스가 존재함을 뜻하기 때문)404 찾을 수 없는 페이지 405 클라이언트가 요청한 리소스에서 사용 불가능한 Method가 있을 때 408 요청 시간이 초과됨 409 서버가 요청을 처리하는 과정에서 충돌이 발생한 경우
(회원가입의 중복된 아이디 등)상태 코드 301 클라이언트가 요청한 리소스에 대한 URI가 변경되었을 시 500 서버에 문제가 있을 경우 -
RESTful API란?
- 개발자들이 비공식적으로 의견을 제시한거라 명확한 정의는 없다
- RESTful의 목적은 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것
- CRUD를 전부 POST로만 처리하거나 URI에 관계없는 정보가 들어간 경우 등을 ‘RESTful하지 못하다’ 라고 한다
-
결론
- URI로 자원(Resource)을 명시하고 행위(Method)를 통해 CRUD를 적용하고 특정 표현(JSON 등)을 사용하여 요청을 보낸다