본문 바로가기

Spring

SPRING - REST API

API (Application Programming Interface) 란 ?

  • Open API 는 프로그래밍에서 사용할 수 있는 개방되어 있는 상태의 Interface이다.
  • 네이버 , 카카오 등 포털 서비스 사이트나 통계청 , 기상청 등과 같은 관공서 , 공공 데이터 포털이 가지고 있는 데이터를 외부 응용 프로그램에서 사용할 수 있도록 OPEN API 를 제공하고 있다.
  • OPEN API 와 함께 거론 되는 기술이 REST 이며 ,  대부분의 OPEN API는 REST 방식으로 지원한다.

 

REST 란 ?

  • 'Representational State Transfer' 의 약어로 하나의 URI(Uniform Resource Identifier) 는  하나의 교유한 리소스(Resource)를 대표하도록 설계 된다는 개념에 전송방식을 결합해서 원하는 작업을 지정한다.

  • HTTP URI 를 통해 제어할 자원 (Resource)를 명시하고 , HTTP Method (GET , POST , PUT , DELETE )를 통해 해당 자원 (Resource )를 제어하는 명력을 내리는 방식의 아키텍처

 

REST 의 구성

  1. 자원 (Resource) - URI
  2. 행위 (Verb) -  HTTP METHOD
  3. 표현 (Representations)

 

기존 Service 와 REST Service

  • 기존의 전송방식과는 달리 서브는 요청으로 받은 리소스에 대해 순수한 데이터를 전송한다.
  • GET / POST 외에 PUT , DELETE 방식을 사용하여 리소스에 대한 CRUD를 처리 할 수 있다.

 

REST의 특징

  1. 유니폼 인터페이스 : 유니폼 인터페이스란 '일관된 인터페이스'를 의미한다. REST 서버는 HTTP 표준 전송 규약을 따르기 때문에 어떤 프로그래밍 언어로 만들어졌느냐와  상관없이 플랫폼 및 기술에 종속되지 않고 사용할 수 있다는 것을 의미한다.   
  2. 무상태성 : 무상태성이란 서버에 상태 정보를 따로 보관하거나 관리하지 않는다는 의미이다.  서버는 클라이언트가 보낸 요청에 대하여 세션(Session)이나 쿠키 정보를 별도로 보관하지 않는다. 이렇게 구성된 서비스는 서버가 불필요한 정보를 관리하지 않으므로 비즈니스 로직의 자유도가 높고 설계가  단순하다.

  3. 캐시 가능성 :  REST는 HTTP 표준을 그대로 사용하므로 HTTP의 캐싱 기능을 적용할 수 있다. 이 기능을 이용하기 위해서는 응답과 요청이 모두 캐싱 가능한지(Cacheable) 명시가 필요하며 , 캐싱이 가능한  경우 클라이언트에서 캐시에 저장해두고 같은 요청에 대해서는 해당 데이터를 가져다 사용한다. 이 기능을 사용하면 서버의 트랜잭션 부하가 줄어 효율적이며 사용자 입장에서 성능이 개선된다.
  4. 레이어 시스템 : 네트워크 상의 여러 계층으로 구성될 수 있다.

  5. 클라이언트 - 서버 아키텍처 :  REST 서버는 API를 제공하고 클라이언트는 사용자 정보를 관리하는 구조로 분리해 설계한다. 이 구성은 서로에 대한 의존성을 찾누는 기능을 한다.

 

REST의 URI  설계 규칙

 

1. URI의 마지막에는  '/'를 포함하지 않는다.

http://localhost.com/product/ (x)
http://localhost.com/product/ (o)

2. 언더바 (_)는 사용하지 않는다. 대신에 하이픈 (-)을 사용한다.

http://localhost.com/company_name/ (x)
http://localhost.com/company-name/ (o)

3. URL에는 행위 (동사)가 아는 결과(명사)를 포함한다.

GET (행위) http://localhost.com/show/product/1 (x)
GET (행위) http://localhost.com/product/1 (o)

행위는 HTTP 메서드로 표현할 수 있어야한다.

4.URI는 소문자로 작성해야 한다.

 

그 이유는 일부 웹 서버의 운영체제는 리소스 경로 부분의 대소문자를 다른 문자로 인식하기 때문이다.

 

5. 파일 확장자는 URI에 포함하지 않는다.

 

HTTP에서 제공하는 Accpet 헤더를 사용하는 것이 좋다.

 http://localhost.com/product/1/photo.jpg (X)
 GET / product/1/photo HTTP/1.1 Host: localhost.com Accept: image/jpg

6. 자원을 표현할 때  Collection (문서 , 객체의 집합)과 Document (하나의 문서 , 객체 ) 사용

http://localhost.com/sports/baseball/players/31

 

 

REST 관련 Annotation

 

 

출처 : 위키북스 - 스프링 부트  - 핵심 가이드 - 장정우 지음