ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • REST API란 무엇인가?
    CS 2023. 12. 5. 17:53

    취업을 위해 모집공고를 보다보면 REST API/ RESTful API라는 단어를 찾아볼 수 있다. 그래서 지난 포스트에서 REST API에 대해 알아보고 정리를 하려고 했으나, HTTP API, HTTPmethod가 선행 되어야 할 것 같아서 HTTP API에 대해 먼저 정리를 했다.

    https://hsch19.tistory.com/23

     

    HTTP API와 HTTP Method

    HTTP는 무엇인가? https://hsch19.tistory.com/4 HTTP 기초 HTTP란 HyperText Transfer Protocol 클라이언트와 서버간의 컨텐츠(HTML/JavaScript/Css/이미지 등)를 주고 받기위해 서로 알아볼 수 있는 메세지라고 할 수 있

    hsch19.tistory.com

    REST란 무엇인가?

    REST는 (REpresentational State Transfer)의 약자로 네트워크 아키텍처 스타일이다.

    네트워크 아키텍처 스타일 : 네트워크 자원을 정의하고 처리하는 방법의 전반을 말한다.

     

    REST는 2000년도 로이필딩(Roy Fielding)의 박사학위 논문에서 최초로 소개되었다. 로이필딩은 HTTP의 주요 저자 중 한명으로 그 당시 웹(HTTP)의 설계의 우수성에 비해 제대로 사용되어지지 못하는 것을 보고 HTTP의 장점을 최대한 활용할 수 있는 아키텍쳐로서 REST를 발표했다.

     

    REST API, RESTful API란 무엇인가?

    즉, REST는 HTTP를 잘 활용하기 위한 원칙이며, REST API는 REST원칙을 준수해서 만든 API를 뜻한다.

    이 원칙을 완벽하게 지키면서 개발하는 것을 RESTful API라고 한다.

     

    REST의 제약조건 4가지

    • 자원의 식별
      요청 내에 기술된 개별 자원을 식별할 수 있어야 한다.
      --> URI를 통해 리소스가 식별되어야 한다.
    • 메시지를 통한 리소스 조작
      클라이언트가 어떤 자원을 지칭하는 메시지와 특정 메타데이터만 가지고 있다면 이것으로 서버 상의 해당 자원을 변경·삭제할 수 있는 충분한 정보를 가지고 있다는 것이다.
      보통 HTTP method를 통해서 표현하게 된다.
    • 자기서술적 메시지
      각 메시지는 자신을 어떻게 처리해야 하는지에 대한 충분한 정보를 포함해야 한다.
      예를 들어 요청 메시지에서 HOST에 대한 정보가 빠져있다거나, 응답 메시지에서 Content-Type이 빠져있는 경우는 자기서술적인 메시지라고 할 수없다.
      HTTP/1.1 200 OK
      Content-Type: application/json
      [ { "op": "remove", "path": "/a/b/c" } ]​
       그렇다면 위와 같은 응답 메시지는 자기서술적이라고 할 수 있을까?
      Content-Type에 JSON이라 제대로 적혀있기 때문에 자기서술적인 메시지라고 볼 수 있으나, 받는사람 입장에서 "op"가 무엇을 뜻하는지 알 수 없기 때문에 자기서술적이지 않다.
    • 애플리케이션의 상태에 대한 엔진으로서 하이퍼미디어
      만약에 클라이언트가 관련된 리소스에 접근하기를 원한다면, 리턴되는 지시자에서 구별될 수 있어야 한다.
      즉, HTML처럼 하이퍼링크가 추가되어 다음에 어떤 API를 호출해야하는지를 해당 링크를 통해 받을 수 있어야한다.

      사용자가 어떤 글을 등록한다면 삭제, 수정과 같은 추가적인 동작을 할 수 있는데, 이런 행동을 상태 전이라고 한다 
      즉, 링크에 상태전이에 대한 정보가 담겨있어야한다. 
      {
        "seq": 1,
        "title": "post 1 ",
        "content": "posted!!",
        "createdAt": "2023-12-05 17:42:00",
        "_links": {
          "self": {
            "href": "http://localhost/board/posts/1"
          },
          "get": {
            "href": "http://localhost/board/posts/1"
          },
          "delete": {
            "href": "http://localhost/board/posts/1"
          },
          "edit": {
            "href": "http://localhost/board/posts/1"
          }
        }
      }
       

    위의 제약조건을 완벽하게 지키면서 개발하는 것을 RESTful API라고 한다.

    하지만, 실무에서 이런 방법으로 개발하는 것은 현실적으로 어렵고, 또 추가 개발 비용대비 효과가 있는 것도 아니라고 한다.

    그러나 이미 많은사람이 해당조건을 지키지 않아도 REST API라고 하기 때문에, HTTP API나 REST API를 거의 같은 의미로 사용하고 있다

     

     


    참고자료

    https://www.inflearn.com/questions/126743/http-api-vs-rest-api

    https://bentist.tistory.com/37

    https://ko.wikipedia.org/wiki/REST

    https://velog.io/@bluewind8791/what-is-rest-api

    https://junuuu.tistory.com/41

     

    'CS' 카테고리의 다른 글

    동시성 제어(Concurrency Control)  (0) 2024.03.26
    쿠키(Cookie)란 무엇인가? (+ Session 추가정리)  (0) 2023.12.18
    NoSQL이란 무엇인가?  (0) 2023.12.14
    HTTP API와 HTTP Method  (0) 2023.12.04
    HTTP 기초  (1) 2023.11.11
Designed by Tistory.