[개발 상식] RESTful API
2018. 8. 22. 16:50ㆍCS/개발 상식
반응형
해당 시리즈는 Interview_Question_for_Beginner를 기반으로 추가 학습을 진행해 작성하였습니다.
목차
RESTful API?
REST
의 기본원칙을 성실히 지킨 API
REST
API 설계의 중심에 자원이 있고 HTTP Method를 통해 자원을 처리 하도록 설계하는 것
- REpresentational State Transfer의 약자
- Resource Oriented Architecture이다.
위키백과
월드 와이드 웹(a.k.a WWW)과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식으로, 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반에 대한 패턴
구성요소
- Resource - URI
/user/{userId}
- Method - 행위, HTTP Method
GET
,POST
,PUT
,DELETE
- Representations - 메시지, 응답 형태
xml
,json
등으로 응답
중심규칙
- URI는 정보의 자원을 표현해야 한다.
- 자원에 대한 행위는 HTTP Method로 표현한다.
6가지 원칙(특징)
- Uniform Interface(유니폼 인터페이스)
: URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍쳐 스타일 - Stateless (무상태성)
: 작업을 위한 상태정보를 따로 저장하고 관리하지 않음
- ex) 세션/쿠키정보를 별도로 저장/관리 하지 않아 API 서버는 들어오는 요청만 처리하면 됨
- 서비스 자유도 높아짐, 구현이 단순해짐
- Cacheable (캐시 가능)
: HTTP 기존 웹표준 그대로 사용하여 웹에서 사용하는 기존 인프라 그대로 활용 가능
- HTTP가 가진 캐싱 기능 적용 가능
- Self-descriptiveness (자체 표현 구조)
: REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어있음 - Client-Server 구조
: REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조
- 클라이언트/서버간 개발 내용이 명확해지고 서로간 의존성이 줄어듦
- 계층형 구조
: REST 서버는 다중 계층으로 구성될 수 있다.
- (보안, 로드 밸런싱, 암호화 계층을 추가해) 구조상의 유연성을 둘 수 있음
- (PROXY, 게이트웨이 같은) 네트워크 기반의 중간매체를 사용할 수 있게 함
RESTful API
RESTful하게 API를 디자인 하는 법
- 리소스와 행위 를 명시적이고 직관적으로 분리
- 리소스는
URI
로 표현, 리소스 명은 명사로 표현되어야 한다. - 행위는 분명한 목적에 따라 적절한
HTTP Method
로 표현할 것
GET(조회)
,POST(생성)
,PUT(기존 entity 전체 수정)
,DELETE(삭제)
PATCH(기존 entity 일부 수정)
- 리소스는
- Message는 Header와 Body를 명확하게 분리해서 사용
- body : Entity에 대한 내용
- header : 애플리케이션 서버가 행동할 판단의 근거가 되는 컨트롤 정보
- API 버전 정보, 응답받고자 하는 MIME 타입 등
- header와 body는 http header 와 http body로 나눌 수도 있고, http body에 들어가는 json 구조로 분리할 수도 있다.
- API 버전을 관리
- API의 signature이 변경될 수도 있음에 유의
- 특정 AI 변경시 하위호환성을 보장해야 함
- 서버와 클라이언트가 같은 방식을 사용해서 요청
- URI가 플랫폼 중립적이어야 함
form-data
든,json
이든 하나로 통일한다.
장점
- Open API를 제공하기 쉽다
- 멀티플랫폼 지원 및 연동이 용이하다.
- 원하는 타입으로 데이터를 주고 받을 수 있다.
- 기존 웹 인프라(HTTP)를 그대로 사용할 수 있다.
단점
- 사용할 수 있는 메소드가 4가지 밖에 없다.
- 분산환경에는 부적합하다.
- HTTP 통신 모델에 대해서만 지원한다.
Reference
반응형