OPEN API(Application Programming Interface)
- 프로그래밍에서 사용할 수 있는 개방되어 있는 상태의 인터페이스
- naver, kakao 등 포털 서비스 사이트나 통계청, 기상청, 우체국 등과 같은 포털 서비스 사이트나 통계청, 기상청, 우체국 등과 같은 관공서, 공공 데이터 포털이 가지고 있는 데이터를 외부 응용 프로그램에서 사용할 수 있도록 OPEN API를 제공하고 있다.
- OPEN API와 함께 거론되는 기술이 REST이며, 대부분의 OPEN API는 REST 방식으로 지원된다.
REST(Representational State Transfer)
REST란?
자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것
- 2000년도 로이 필딩(Roy Fielding)의 박사학위 논문에 최초로 소개됨.
- REST는 'Representational State Transfer'의 약어로 하나의 URI는 하나의 고유한 리소스(Resource)를 대표하도록 설계된다는 개념에 전송방식을 결합해 원하는 작업을 지정한다.
- 웹의 장점을 최대한 활용할 수 있는 아키텍처(설계구조)로써 REST를 발표하였다.
- HTTP URI를 통해 제어할 자원(Resource)를 명시하고, HTTP Method(GET, POST, PUT, DELETE)를 통해 해당 자원(Resource)를 제어하는 명령을 내리는 방식의 아키텍처이다.
REST 구성
- 자원 (Resource) - URI
- 행위 (Verb) - HTTP Method
- 표현 (Representations)
잘 표현된 HTTP URI로 리소스를 정의하고 HTTP method로 리소스에 대한 행위를 정의한다. 리소스는 JSON, XML과 같은 여러 언어로 표현 가능하다.
REST 원칙
- 균일한 인터페이스
서버가 표준 형식으로 정보를 전송한다. 형식이 지정된 리소스를 REST 내에서 표현이라고 부른다.
- 무상태
작업을 위한 상태정보를 따로 저장하고 관리하지 않는다. 세션 정보나 쿠키 정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순히 처리하면 되기 때문에 서비스의 자유도가 높아지고 구현이 단순해진다.
- 계층화 시스템
다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있다. PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수도 있다.
- 캐시 가능성
HTTP 웹표준을 그대로 사용하기 때문에 웹에서 사용하는 기본 인프라를 그대로 활용이 가능하다. 따라서 HTTP가 가진 캐싱 기능을 적용할 수 있다.
- 온디맨드 코드
클라이언트가 리소스에 대한 표현을 처리하는 방법에 대한 Code를 서버가 제공하는 것을 의미한다. HTML 내의 javascript가 대표적인 예시이다.
기존 Service와 REST Service 비교
- 기존 Service : 요청에 대한 처리를 한 후, 가공된 data를 이용하여 특정 플랫폼에 적합한 형태의 View로 만들어 반환함.
- REST Service : data 처리만 한다거나, 처리 후 반환될 data가 있다면 JSON이나 XML 형식으로 전달한다. View에 대해서는 신경 쓸 필요가 없어 OPEN API에서 많이 사용한다.
REST API
API란?
Application Progrmming Interface는 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙을 정의한다. 개발자는 다른 애플리케이션이 프로그래밍 방식으로 애플리케이션과 통신할 수 있도록 API를 표시하거나 생성한다. 웹 API는 클라이언트와 웹 리소스 사이의 게이트웨이라고 생각할 수 있다.
REST API란?
두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스. REST 형식을 따르는 API를 의미한다.
기존 웹 접근 방식과 REST API 방식의 차이
- 기존의 블로그 등은 GET과 POST 만으로 자원에 대한 CRUD를 처리, URI는 액션을 나타냄
- REST로 변경할 경우 4가지 method를 모두 사용하여 CRUD 처리, URI는 제어하려는 자원 나타냄
RESTful API의 장점
- 확장성
REST가 클라이언트-서버 상호 작용을 최적화하기 때문에 효율적으로 크기를 조정할 수 있다.
- 유연성
완전한 클라이언트-서버 분리를 지원해 각 부분이 독립적으로 발전할 수 있도록 서버 구성 요소를 단순화, 분리한다.
- 독립성
사용되는 기술과 독립적이다. API 설계에 영향을 주지 않고 다양한 프로그래밍 언어로 클라이언트 및 서버 애플리케이션을 모두 작성할 수 있다.
REST API 설정 방법
Jackson library
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-databind-version}</version>
</dependency>
REST 관련 Annotation