레알윙 2021. 1. 21. 21:26
반응형

REST API 소개

API(Application Programming Interface)란?

  • 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다. (구글 위키백과)
  • 쉽게 말하면 사용자(응용프로그램, 클라이언트)와 운영체제(서버)간을 이어주는 역할

 

REST(REresentaional State Transfer)란?

  • 인터넷 상의 시스템 간의 상호 운용성(interoperability)을 제공하는 방법 중 하나
  • REST API : REST 아키텍쳐 스타일을 따르는 API

 

REST 아키텍쳐 스타일(발표영상)

Client-Sever

Server는 자원을 가지고 있고, client는 자원을 요청

 

Stateless(참고)

  • client와 server의 동작, 상태정보를 저장하지 않은 형태
  • server의 응답이 clinent와의 세션 상태와 독립적
  • 장점
    • 서버가 client정보를 저장관리 하지 않으므로 scaling이 자유로움

 

Cache

HTTP 웹 표준을 사용하므로 기존 웹에서 사용하는 인프라를 그대로 사용할 수 있다.

 

Uniform Interface(참고)

  • Identification of resources
    • URI로 식별
  • manipulation of resources through represenations
    • 리소스를 삭제하거나 수정할 때 HTTP메세지에 표현을 담아서 전송해야 한다.
  • self-descrive messages
    • 서버와 클라이언트 사이에서 주고 받는 메세지는 스스로를 설명 해야 한다는 의미이다.
    • 메세지만 보고도 어떤 기능을 수행하는지 알 수 있어야 한다.
    • 확장이 가능해야 한다.

기본적으로 요청메세지는 아래와같이 사용해야 한다.

GET / HTTP/1.1
Host: www.test.kr

응답메세지는 아래와같이 사용해야 한다.

HTTP/1.1 200 OK
Content-Type: application/json-patch+json

[ {op: "remove", path: "a/b/c" } ]

만약 Content-Type: application/json 으로 설정했다면 아래 본문을 제대로 해석할수가 없다.

 

  • hypermedia as the engine of appliaction state (HATEOAS)
    • 하이퍼미디어(링크)를 통해 애플리케이션 상태 변화가 가능해야 한다.
    • 링크 정보를 동적으로 바꿀 수 있다. (Versioning 할 필요 없이!)

HTML로 HATEOAS를 만족하는 HTML 예제

HTTP/1.1 200 OK
Content-Type: text/html

<html>
<head></head>
<body><a herf="/test">test</a></body>
</html>

JSON으로 HATEOAS를 맍고하는 예제

HTTP/1.1 200 OK
Content-Type: application/json
Link: </articles/1>; rel="previous",
      </articles/3>; rel="nest";

{
  "title": "The second article",
  "contents": "blah blah..."
}

 

Layered System

REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있다. 또한 PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수도 있다.

 

Code-On-Demand (optional)

  • 클라이언트는 리소스에 대한 표현을 응답으로 받고 처리해야되는데, 어떻게 처리해야 하는지에 대한 code를 서버가 제공하는 것을 의미
  • 서버에서 제공하는 코드를 실행하기 때문에 보안문제를 야기

 

self-descrive messages 문제 해결 방법

 

 

HATEOAS 해결 방법 

  • 방법1: 데이터에 링크 제공
    • 링크를 어떻게 정의할 것인가? HAL
  • 방법2: 링크 헤더나 Location을 제공

 

 

 

참고

 

 

반응형