API란?
Application Programming Interface의 약자로, 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스다.
즉, 데이터를 주고받거나 어떤 기능을 다른 프로그램에서 사용할 수 있도록 만든 인터페이스다.
인터페이스란 데이터를 주고 받기 위한, 상호작용 하기 위한 수단이라 생각하면 된다. ex) TV 리모콘
REST API
REST API란 말 그대로 REST한 형식의 API를 말한다.
REST API란 핵심 컨텐츠 및 기능을 외부 사이트에서 활용할 수 있도록 제공되는 인터페이스다.
예를 들면, 네이버에서 블로그에 글을 저장하거나, 글 목록을 읽어갈 수 있도록 외부에 기능을 제공하거나 우체국에서 우편번호를 조회할 수 있는 기능을 제거하거나, 구글에서 구글 지도를 사용할 수 있도록 제공하는 것들을 말한다.
REST란?
REST는 REpresentational State Transfer라는 용어의 약자다.
자원을 이름(URI)로 구분하여 상태 정보를 주고받는 것
URI로 자원을 명시하고 HTTP Method를 이용해 해당 자원에 CRUD Operation을 적용하는 것이다.
REST의 구성
-
자원(Resource) - URI
모든 자원에는 고유한 ID가 존재하고, 이 자원은 Server에 존재한다.
자원은 구분하는 ID는 HTTP URI다.
Client는 URI를 이용해서 자원을 Server에 요청한다.
-
행위(Verb) - HTTP METHOD
HTTP 프로토콜의 Method를 사용한다.
HTTP 프로토콜은 GET, POST, PUT, DELETE 와 같은 메서드를 제공한다.
-
표현(Representation)
Client가 자원의 상태(정보)에 대한 조작을 요청하면 Server는 이에 적절한 응답(Representation)을 보낸다.
REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 Representation으로 나타내어 질 수 있다.
REST의 특징
REST는 다음과 같은 형식을 지켜야 한다.
-
Uniform (유니폼 인터페이스)
Uniform Interface는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말한다.
-
Stateless (무상태성)
REST는 무상태성 성격을 갖는다. 다시 말해 작업을 위한 상태정보를 따로 저장하고 관리하지 않는다. 세션 정보나 쿠키정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순히 처리하면 된다. 때문에 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해진다.
-
Cacheable (캐시 가능)
REST의 가장 큰 특징 중 하나는 HTTP라는 기존 웹표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용이 가능하다. 따라서 HTTP가 가진 캐싱 기능이 적용 가능하다.
-
Self-descriptiveness (자체 표현 구조)
REST의 또 다른 큰 특징 중 하나는 REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어 있다는 것이다.
-
Client-Server 구조
REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어들게 된다.
-
계층형 구조
REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있게 한다.
WEB API
REST API의 Uniform Interface를 지키는 것은 쉬운일이 아니기 때문에 꼭 REST를 지키면서 API를 만들지는 않아도 된다. 이렇게 REST API의 모든 스타일을 구현하지 못한 경우에는 REST API라 부르기 보다는 WEB API, HTTP API라 부른다.
WEB API 규칙
- URI를 잘 표현해야 하고, URI는 정보의 자원을 표현해야 한다.
- 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현한다.
HTTP Method는 다음과 같다.
예)
GET /members : 맴버의 모든 정보를 달라는 요청이다.
GET /members/delete/1 : GET은 정보를 요청할 때 사용한다. 위와 같이 동사로 삭제를 표현하면 안 된다.
DELETE /members/1 : HTTP Method 중의 하나인 DELETE를 이용하여 삭제를 표현해야 한다.
HTTP 상태 코드
API는 요청을 받고 응답을 할 때 상태코드를 반환해야 한다.
각 상태코드의 의미는 다음과 같다.
상태코드 | 의미 |
200 | 요청을 정상적으로 수행함. |
201 | 클라이언트의 리소스 생성 요청을 정상적으로 수행함. |
400 | 클라이언트의 요청이 부적절함. |
401 | 클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청함. |
405 | 클라이언트가 요청한 리소스에 사용할 수 없는 메서드로 요청함. |
301 | 클라이언트가 요청한 리소스의 URI가 변경됨. |
500 | 서버에 문제가 있음. |
REST API는 계속 찾아보고 공부해봐도 대략의 감은 오지만 정확히 뭐다라고 설명하기가 참 어렵다..
마치 정확한 정의는 못내리고 REST를 이루고 있는 속성과 특징으로 설명을 대신하는 거 같은 답답한 느낌을 계속 받는다.
나도 웹개발을 할 때 REST API로 개발했다고는 하지만 실제로 생각보다 RESTful API가 아닌게 많을지도 모르겠다.
참고사이트
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
[Network] REST란? REST API란? RESTful이란? - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
https://meetup.toast.com/posts/92
REST API 제대로 알고 사용하기 : TOAST Meetup
REST API 제대로 알고 사용하기
meetup.toast.com
'공부 > [부스트코스] 웹 프로그래밍' 카테고리의 다른 글
[부스트코스] 웹 프로그래밍 - Spring Core (0) | 2020.03.27 |
---|---|
[부스트코스] 웹 프로그래밍 - 2차 코드리뷰 (0) | 2020.03.19 |
[부스트코스] 웹 프로그래밍 - JSP (0) | 2020.03.04 |
[부스트코스] 웹 프로그래밍 - 1차 코드리뷰 (0) | 2020.02.26 |
[부스트코스] 웹 프로그래밍 - Servlet (0) | 2020.02.21 |