OPEN API
OPEN API는 프로그래밍에서 사용할 수 있는 개방되어 있는 상태의 Interface를 말한다. OPEN API와 함께 거론되는 기술이 REST이며, 대부분의 OPEN API는 REST 방식으로 지원된다.
- naver, kakao등 포털 사이트나 통계청, 기상청 등과 같은 관공서는 대부분 공공 데이터 포탈(www.data.go.kr)이 가지고 있는 데이터를 외부 응용프로그램에서 사용할 수 있도록 OPEN API를 제공한다.
REST(Representational State Transfer) 란?
하나의 URI는 하나의 고유한 리소스(Resource)를 대표하도록 설계된다는 개념에 전송방식을 결합해서 원하는 작업을 지정한다.
- 웹의 장점을 최대한 활용할 수 있는 아키텍처(설계구조)
- HTTP URI를 통해 제어할 자원(Resource)를 명시하고, HTTP Method(GET, POST, PUT, DELETE)를 통해 해당 자원(Resource)를 제어하는 명령을 내리는 방식의 아키텍처이다.
REST 구성
잘표현된 HTTP URI로 리소스를 정의하고 HTTP method로 리소스에 대한 행위를 정의한다.
리소스는 JSON, XML과 같은 여러가지 언어로 표현할 수 있다.
- 자원(Resource) : URI
- 행위(Verb) : HTTP method
- 표현(Representations)
REST의 특징
- 기존의 전송방식과는 달리 서버는 요청으로 받은 리소스에 대해 순수한 데이터를 전송한다.
- 기존의 GET/POST 외에 PUT, DELETE방식을 사용하여 리소스에 대한 CRUD를 처리할 수 있다.
- HTTP URI를 통해 제어할 자원(Resource)를 명시하고, HTTP method(GET/POST/PUT/DELETE)를 통해 해당 자원(Resource)를 제어하는 명령을 내리는 방식의 아키텍처이다.
- 자원을 표현할 때 Collection(문서, 객체의 집합)과 Document(하나의 문서, 객체)사용.
- ex)
http://www.ssafy.com/sport**s**/baseball/player**s**/31
- 가장 큰 단점은 딱 정해진 표준이 없다.
- 하이픈(
-)은 사용가능하지만 언더바(_)는 사용하지 않는다.
- 특별한 경우를 제외하고 대문자를 사용하지 않는다.
- URI 마지막에 슬래시(
/)를 사용하지 않는다.
- 슬래시(
/)로 계층관계를 나타낸다.
- 확장자가 포함된 파일 이름을 직접 포함시키지 않는다.
- URI는 명사를 사용한다.
REST 관련 Annotation
REST API 설계
- URI는 정보의 자원을 표현해야 한다.(행위에 대한 표현이 들어가서는 안된다.)
- 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현한다.
[URI는 정보의 자원을 표현해야 한다.]
GET /board/delete/1
// 잘못된 URI
GET /board/1
// 수정된 URI
위의 두 URI 중 첫번째 URI와 같은 방식은 REST를 제대로 적용하지 못한 URI이다. URI는 자원을 표현하는데 중점을 두어야 한다. delete와 같은 표현이 들어가서는 안된다. 첫 번째의 잘못된 URI는 두번째의 URI와 같이 수정할 수 있다.
기존 웹 접근 방식과 REST API 방식의 차이점
- 기존의 웹은 GET과 POST만으로 자원에대한 CRUD를 처리하며, URI는 액션을 나타냈다.
- REST로 변경할 경우 4가지 method를 모두 사용하여 CRUD를 처리하며, URI는 제어하려는 자원을 나타낸다.
기존 Service와 REST Service의 차이
- 기존 Service: 요청에 대한 처리를 한 후 가공된 data를 이용하여 특정 플랫폼에 적합한 형태의 View로 만들어서 반환한다.
- REST Service: data처리만 한다거나 처리 후 반환될 data가 있다면 JSON이나 XML형식으로 전달한다. View에 대해서는 신경 쓸 필요가 없다. -> 이런 이유로 OPEN API에서 많이 사용한다.
REST API 사용설정 - jackson, json
- Jackson library 사용
- jackson-databind 라이브러리는 객체를 JSON 포맷의 문자열로 변환시켜서 브라우저로 전송한다.
- jacson-dataformat-xml 라이브러리는 객체를 xml로 브라우저로 전송한다.
- pom.xml에 library를 추가하면 사용 가능하다.
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-databind-version}</version>
</dependency>