ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • REST API 소개
    백기선(인프런 강의)/스프링 기반 REST API 개발 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을 제공

     

     

     

    참고

     

     

    반응형

    '백기선(인프런 강의) > 스프링 기반 REST API 개발' 카테고리의 다른 글

    REST API 보안 적용  (0) 2021.01.24
    이벤트 생성 API 개발 -3  (0) 2021.01.24
    이벤트 생성 API 개발 -2  (0) 2021.01.23
    스프링 HATEOAS  (0) 2021.01.23
    이벤트 생성 API 개발 - 1  (0) 2021.01.22
Designed by Tistory.