-
[Back End] Rest APIWeb Development/부스트코스 - Back-End(Java) 2020. 3. 14. 21:33
Rest API 개요
- 배경 : 클라이언트의 종류가 웹 브라우저, 안드로이드 앱, IOS 앱 등으로 다양해지면서, 이러한 클라이언트들에게 정보를 제공하는 방식을 하나로 일원화 시키고 싶어졌다.
- 일원화시키는 방식 중에 대표적인 방식이 HTTP 프로토콜로 API를 제공하는 것 이다.
- HTTP 프로토콜로 제공하는 API를 REST API라고 한다.
API(Application Programming Interface)
- API(응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.
- 주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.
- https://docs.oracle.com/javase/8/docs/api/ 왼쪽 링크에서 java 8의 API 문서를 볼 수 있다. java가 제공하는 클래스와 인터페이스에 대한 설명이 API 문서이다. 어떤 메소드가 어떻게 내부적으로 구현되어있는지는 알 수 없지만, 사용할 때 구현 코드를 알지 못해서 인터페이스만 알면 사용할 수 있다. 이렇게 프로그래밍을 할 때 필요한 인터페이스를 API라고 한다.
REST API(Representational State Transfer API)
- 2000년도 Roy Fielding의 박사학위 논문에서 최초로 소개되었다.
- REST API란 말그대로 REST 형식의 API를 말한다.
- REST API란 핵심 컨텐츠 및 기능을 외부 사이트에서 활용할 수 있도록 제공되는 인터페이스이다.
- 예를 들어, 네이버에서 블로그에 글을 저장하거나 글 목록을 읽어갈 수 있도록 외부에 기능을 제공하거나, 우체국에서 우편번호를 조회할 수 있는 기능을 제공하거나, 구글에서 구글 지도를 사용할 수 있도록 제공하는 것들을 말한다.
- 웹 브라우저 뿐만 아니라 앱 등 다양한 클라이언트가 등장하면서, 그러한 클라이언트들에게 대응하기 위해 REST API가 널리 사용되기 시작했다.
- 서비스 업체들이 다양한 REST API를 제공함으로서, 클라이언트는 이러한 REST API들을 조합한 애플리케이션을 ㅁ나들 수 있게 되었다. 이를 매시업(Mashup)이라고 한다.
REST API의 정확한 정의
- REST는 다음과 같은 스타일(제약조건의 집합)들을 반드시 지켜야 한다고 말한다.
- client-server
- stateless
- cache
- uniform interface
- layered system
- code-on-demand (optional)
- HTTP 프로토콜을 사용한다면 client-server, stateless, cache, lared system, code-on-demand 등에 대해서는 모두 쉽게 구현할 수 있다.
- 하지만 문제는 아래와 같은 uniform interface이다.
- 리소스가 URI로 식별되야 합니다.
- 리소스를 생성, 수정, 추가하고자 할 때 HTTP메시지에 표현을 해서 전송해야 합니다.
- 메시지는 스스로 설명할 수 있어야 합니다. (Self-descriptive message)
- 애플리케이션의 상태는 Hyperlink를 이용해 전이되야 합니다. (HATEOAS)
- 1번과 2번은 지키기 어렵지 않다. 하지만 3번과 4번은 지키기 어렵다. 응답 결과에 보통 JSON 메세지를 사용하게 되는데, 이 JSON 메세지가 어디에 전달되는지 그리고 JSON 메세지를 구성하는 것이 어떤 의미를 표현해야만 메세지 스스로 설명할 수 있다고 말할 수 있는데, 그게 쉽지 않다.
- 우리가 웹 게시판을 사용할 때 리스트 보기를 보면, 상세보기나 글쓰기로 이동할 수 있는 링크가 있다. 상세 보기에서는 글 수정이나 글 삭제로 갈 수 있는 링크가 있다. 이렇게 웹 페이지를 보면, 웹 페이지 자체에 관련된 링크가 있는 것을 알 수 있는데 이를 HATEOAS라고 말한다. 이런 HATEOAS를 API에서 제공하는 것은 쉽지 않다.
Web API(혹은 HTTP API)를 사용한다.
- REST API는 쉽지 않다. 그래서 보통은 Web API를 사용한다.
- REST의 uniform interface를 지원하는 것은 쉽지 않기 때문에 많은 서비스가 REST에서 바라는 것을 모두 지원하지 않고 API를 만들게 된다.
- REST의 모든 것을 제공하지 않고 REST API라고 말하는 경우도 있다.
- REST의 모든 것을 제공하지 않고 Web API 혹은 HTTP API라고 부르는 경우도 있다.
'Web Development > 부스트코스 - Back-End(Java)' 카테고리의 다른 글
[Front End] Web UI development (0) 2020.03.15 [Back End] Web API (0) 2020.03.14 [Back End] JDBC - 실습 (0) 2020.03.14 [Back End] JDBC (0) 2020.03.14 [Back End] JSTL, EL, Maven (0) 2020.03.09