REST api란

본 블로그는 공부를 목적으로 한 정리입니다.

주제


  • rest에 대해서 공부해보자

목차


  • REST 개념
  • REST 특징
  • REST 제약조건

REST 개념


RESTRepresentational State Transfer의 약자로 일종의 소프트웨어 아키텍처로 볼 수 있습니다.

Resource(자원)

REST는 HTTP URL를 통해 Resource(자원)Representation(표현)할 수 있습니다.

  • 예를 들면 redmoons 사이트에서 첫 페이지를 표현하면 https://redmoons.github.io/pages/1로 표현이 가능한 것처럼 HTTP URI를 통해 모든 Resource를 표현할 수 있습니다.

이 표현된 Resource를 어떻게 할 것인가에 대해서는 HTTP Method가 수행합니다.

  • POST, GET, PUT, DELETE 이 Method들이 Resource에 대한 CRUD operation를 수행하게 됩니다.
  • POST : Create
  • GET : Select
  • PUT : Create/Update
  • DELETE : Delete

RESTHTTP URI(자원의 표현)HTTP Method(표현된 자원의 행동)으로 나타낼 수 있습니다.

POST vs PUT

POST는 생성을 담당, PUT은 업데이트를 수행한다는데 무엇이 다른걸까?

결론적으로 PUT은 멱등성을 담보하고, POST는 멱등성을 담보하지 않습니다. 여기서 멱등성이란 몇 번을 반복하더라도 같은 값을 보장한다는 것입니다.

  • POST method는 클라이언트가 Resource를 지정하지 않았을 때 Resource를 생성합니다.
// 첫 번째 POST
https://redmoons.github.io/users
// user 생성
{"name":"red"}

// 두 번째 POST
https://redmoons.github.io/users
// user 생성
{"name":"blue"}
  • PUT method는 Resource 위치가 명확히 지정된 요청입니다.
// 첫 번째 PUT
https://redmoons.github.io/users/1
// user 생성
{"name":"red"}

그러므로 PUT을 수행하면 몇 번을 반복하더라도 같은 결과를 보장합니다.(=멱등성을 가진다.)

REST 제약조건 (원리)


REST 아키텍처에 적용되는 6가지 제약 조건이 있습니다.

Uniform Interface(인터페이스 일관성)
  • 일관적인 인터페이스로 분리되어 디커플링된 아케텍쳐를 구현합니다.
  • URI로 지정된 Resource들의 대한 조작들을 일관적으로 처리합니다.
Stateless(무상태)
  • 각 요청 간 클라이언트의 콘텍스트가 서버에 저장되어서는 안 됩니다.
  • 즉 각각의 요청들을 독립적으로 수행 및 처리해야합니다. (이전의 세션을 현재 요청에 쓸 수 없습니다.)
  • 좀더 쉽게 이야기하면 클라이언트로부터 서버로 보내진 서버 session 데이터는 각 요청에 대해 독립적이여야 합니다.
    • 서버의 동작 방식이 일관성을 가지게 됩니다.
Cacheable

클라이언트는 응답을 캐싱할 수 있어야 합니다.

Client-Server
  • 아키텍처를 단순화시키고 작은 단위로 분리(decouple)함으로써 클라이언트-서버의 각 파트가 독립적으로 개선될 수 있도록 해줍니다.
Layered System
  • 클라이언트는 보통 대상 서버에 직접 연결되었는지, 또는 중간 서버를 통해 연결되었는지를 알 수 없습니다.
  • 그로인해 중간 서버는 로드벨런서나 공유 캐시 등을 통해 시스템 규모 확장성을 향상시킬 수 있습니다.
Code on Demand (optional)
  • 자바 애플릿이나 자바스크립트의 제공을 통해 서버가 ‘클라이언트가 실행시킬 수 있는 로직’을 전송하여 기능을 확장시킬 수 있습니다.
  • 쉽게 이야기해 서버로부터 스크립트를 받아 클라이언트가 실행합니다.

출처


https://developer.mozilla.org/ko/docs/Glossary/REST https://bcho.tistory.com/321 https://ko.wikipedia.org/wiki/REST https://en.wikipedia.org/wiki/Representational_state_transfer