CS

[REST API]REST API란 무엇인가

Ash_jisu 2023. 8. 4. 18:26

REST

  • REST(Representational State Transfer)
    • 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는것이다.
    1. HTTP URI을 통해 자원을 명시하고,
    2. HTTP Method(POST, GET, PUT, DELETE, PATCH 등)을 통해
    3. 해당 자원에 대한 CRUD Operation를 적용한다.
  • CRUD Operation
    • Rest에서의 CRUD Operation 동작 예시
      • Create: 데이터 생성(POST)
      • Read: 데이터 조회(GET)
      • Update: 데이터 수정(PUT, PATCH)
      • Delete: 데이터 삭제(DELETE)

 

 

REST 구성 요소

  • 3가지로 구성된다.
    1. 자원(Resource): HTTP URL
    2. 자원에 대한 행위(Verb) : HTTP Method
    3. 자원에 대한 행위의 내용 (Representations) : HTTP Message Pay Load

 

REST의 특징

  1. Server-Client(서버-클라이언트 구조)
    • 서버는 리소스를 관리하고, 클라이언트는 리소스에 대한 요청을 보내고 응답을 받는 구조로 동작한다.
  2. Stateless(무상태)
    • REST는 각 요청을 독립적으로 처리, 따라서 클라이언트의 각 요청은 서버의 이전 상태와 관계없이 완전한 요청 정보를 포함해야한다. 
  3. Cacheable(캐시 처리 가능)
    • REST는 응답을 캐시 할 수있다. 따라서 클라이언트가 동일한 요청을 나중에 다시 보내면, 캐시된 응답을 재사용하여 네트워크 대역폭 절약, 애플레키의션의 성능을 향상시킨다.
  4. Layered System(계층화)
    • 서버와 클라이언트 간의 역활과 책임을 분리를 통해 시스템의 복잡성을 줄이고 유지보수를 용이하게한다.
  5. Uniform Interface(인터페이스 일관성)
    • 리소스에 대한 조작은 통일된 방식으로 이루어져야 한다.

 

REST의 장단점

- 장점

  • 기존 HTTP 프로토콜 인프라를 사용하기 때문에 REST API사용을 위한 별도의 인프라 구축 필요없다.

  • HTTP 프로토콜의 표준을 활용하여 여러 추갖적인 장점을 함께 가져 갈 수 있다.
    • GET, POST, PUT, DELETE활용하여 다양한 리소스를 생성, 조회, 수정, 삭제가능하다.
  • HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
    • ex. 웹브라우저, 모바일 애플리케이션, 서버 사이드 언어(java, python, node.js), 데스크톱 애플리케이션, 클라우드 서비스, IoT 장치등이 그 예시이다.
  • Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.
      ※Hypermedia: 클라이언트와 서버간의 상호작용을 동적으로 만드는 기술이다.

  • REST API 메시지는 프로토콜에 의도하는 바를 나타내므로 쉽게 파악 할 수 있다.

  • 서버와 클라이언트의 역활을 명확하게 분리한다.

 

- 단점

  • HTTP Method 형태가 제한적이다.
    • GET, POST, PUT, DELETE등으로만 조작의 의미를 다 담기에는 표현하기 어렵다.
  • 브라우저를 통해 테스트할 일이 많은 서비스라면 전문성이 요구된다.
    • HTTP Header에 정보를 담아서 요청해야 하는 경우가 있는데 그럴경우 테스트하기 어려워진다.
  • 구형 브라우저에서는 호환되지 않아 지원못하는 동작이 많다.
    • ex. 익스플로어

 

 

 

 


REST API란

REST의 원리를 따르는 API

  • API: 개발자들이 다른 시스템의 기능을 사용하고 데이터를 가져오고 조작할 수 있도록 인터페이스를 제공한다.

REST API 설계 예시

  1. URL는 동사보다는 명사를, 대문자보다는 소문자를 사용하여야한다.
  2. URL는 마지막에 슬래시를 포함하지 않는다.
  3. 언더바 대신 하이폰을 사용한다.
  4. 파일확장자는 URL에 포함하지 않는다.
  5. 행위를 포함하지 않는다.
    • bad ex. http://cocktails/createdNewRecipes

 

 


컨트롤러에서 실제로 URL을 통해 정보를 받는 방법(+다중매핑)

  • 기존의 정보받는 방식

예시로 만일 칵테일 레시피를 주간순으로 준다고 생각을 해보자

아래는 http에서 아래와 같이 경로에 쿼리 파라미터를 포함시켜서 GET요청을 보낸다고 생각하겠다.

GET /community/period-cocktails?period=weekly  //앞이 경로, ?뒤에 period가 쿼리파라미터

그러면 RESTAPI를 활용해 데이터를 받는다. url 마지막 부분에서 이뤄지는 정보제공을 통해 우리는 컨트롤러에서 읽을수있다. 바로 GetMapping 메소드를 통해서 말이다.

@GetMapping("/community/period-cocktails")
 public List<CocktailRecipe> getCocktailRecipesByPeriod(@RequestParam("period") String period) {
    // period 값에 따라 처리하는 로직
		reuturn result;
}




  • 두개의 url에서 하나의 서비스를 이용하는 경우(다중 매핑)

우리는 컨트롤러안에 있는 getCocktailRecipesByPeriod를 2개의 URL과 매핑시켜주면된다. 여러방법이 있는데 그중 value 속성에 배열로 여러 URL을 저장하는 방법을 예시로 들겠다.

    // 다중 매핑
    @RequestMapping(value = {"/community/period-cocktails", "/period-recipes/search"}, method = RequestMethod.GET)
    public List<CocktailRecipe> getCocktailRecipesByPeriod(@RequestParam("period") String period) {
				 // period 값에 따라 처리하는 로직
        return result;
    }
}