본문 바로가기
지식의 협곡/CS & AI

RESTful API

by hooni40 2021. 5. 23.
728x90
반응형

CS 공부 DAY6.

RESTful API를 정리해보자

 

API는 이전에 정리를 간단히(?) 해보아서 이번엔 한 발 더 나아가 REST API에 대해 정리하려 한다.

먼저 RESTRepresentational State Transfer라는 용어의 약자이며 ful은 접미사로 ~한 이라는 뜻을 나타낸다.

REST의 기본 원칙을 지킨 디자인을 RESTful이라고 한다.

 

REST 구성

-. 자원(Resurce) : URI / 행위(Verb) : HTTP Method / 표현(Representations)

-. 자원의 표현(URI)을 가지고 상태를 전달(HTTP Methon)하는 것을 나타낸다.

※ URI(Uniform Resource Identifier) : 인터넷에 있는 자원을 나타내는 유일한 주소. (인터넷에서 요구되는 기본 조건)

▶ 하위 개념으로 URL/URN 이 있다

※ HTTP Method : 

Internet / WEB/HTTP/응답 과정

 

Internet / WEB/HTTP/응답 과정

CS 및 정처기 공부 DAY2. 인터넷/WEB/HTTP를 정리하고 실제로 웹 요청시 어떤 동작들이 일어나는지 정리해보자. ◆ 인터넷(Internet) -. 인터넷은 컴퓨터 네트워크들을 서로 연결해주는 범지구적 네트워

hooni40.tistory.com

 

RESTful

-. REST스타일의 아키텍처 제약조건을 모두 만족하는 시스템

 

REST의 특징(제약조건)

1. Uniform Interface  

-. URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일

2. Stateless

-. 무상태성. 작업을 위한 상태 정보를 따로 저장하고 관리하지 않음(세션이나 쿠키 정보를 별도로 저장/관리 X)

-. API 서버는 들어오는 요청만 처리(서비스 자유도 향상 / 구현이 단순화)

3. Cacheable

-. HTTP 웹 표준을 그대로 사용(웹에서 사용하는 기존 인프라 사용 가능 → 캐싱 기능 적용 가능)

4. Self-descriptiveness(자체 표현 구조)

-. REST API 메시지만 봐도 이를 쉽게 이해할 수 있음

5. Client-Server 구조

-. REST 서버는 API 제공하고, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보) 등을 직접 관리

각각의 역할 구분되어있어 서버/클라이언트에서 개발해야 할 내용이 명확해지고 서로 의존성 줄어듦

6. Layered System

-. REST 서버는 다층 계층으로 구성 가능

 

◆ REST API 디자인 가이드

1. URI는 정보의 자원을 표현(리소스 명은 명사 사용)

ex. GET /members/delete/1 (X) : delete 같은 행위의 표현이 들어가면 안 됨

     DELETE /members/1 (O)

2. 자원에 대한 행위는 HTTP Method로 표현(GET/POST/PUT/DELETE 등)

ex. 회원 정보를 가져올 때

GET/ members/1 (O)

ex. 회원을 추가할 때

POST /members/2 (O)

 

◆ RESTful 하게 디자인한다?

1. 자원(URI로 표현)과 행위(HTTP Method로 표현)를 명시적이고 직관적으로 분리

2. Message는 Header(API 버전 정보, MIME타입 등)와 Body(전체)를 명확히 분리하여 사용

3. API 버전을 관리(API 변경에 유의하고 하위 호환성 보장해야 함)

4. 서버와 클라이언트가 같은 방식으로 요청 (둘 다 json 형식으로 하든 form-data으로 하든 통일)

 

◆ 장/단점

장점

-. Open API를 제공하기 쉬움

-. 기존 웹 인프라(HTTP)를 그대로 사용 가능

-. 원하는 타입으로 데이터 주고받을 수 있음

 

단점

-. 사용 가능 메소드가 4가지

-. HTTP 통신 모델에 대해서만 지원

-. 분산 환경에 부적합

 

Reference: Interview_Question_for_Beginner/Development_common_sense at master · JaeYeopHan/Interview_Question_for_Beginner (github.com)

728x90
반응형

'지식의 협곡 > CS & AI' 카테고리의 다른 글

정보처리기사 - 소프트웨어 설계(2)  (0) 2021.07.10
정보처리기사 - 소프트웨어 설계 (1)  (0) 2021.07.09
오픈소스 라이선스  (0) 2021.05.20
API  (0) 2021.05.19
MVC 패턴  (0) 2021.05.17

댓글