본문 바로가기
컴퓨터 공학/네트워크

[네트워크] REST API란? (REST, RESTful)

by tempus 2022. 6. 20.
반응형

우리는 프로그램을 개발할 때 보통은 네트워크 통신을 필요로 합니다. 이때 서버와의 통신을 위한 방법으로 API를 많이 사용하는데 그중에서도 오늘은 REST API에 대해 알아보려고 합니다.

우선 들어가기 전에 API 정의는 다음과 같습니다.

애플리케이션 프로그래밍 인터페이스

쉽게 해석하면 응용 프로그램이 서로 소통하기 위한 일종의 매개체라고 이해하시면 편합니다.

그럼 REST API는 무엇일까요? 말 그대로 해석하시면 됩니다.

REST 기반으로 구현한 API

그럼 이제 우리가 알아야 할 것은 REST라는 단어입니다.

 

REST

HTTP URI를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD를 적용하는 것을 의미. 즉, 자원을 URI로 표시하고 해당 자원의 상태를 주고받는 것을 의미

라고 정의할 수 있는데 쉽게 말하면 서버와 클라이언트가 통신하기 위한 하나의 아키텍처 스타일입니다.

아래가 하나의 REST API 예시 입니다.

 GET /members/simple

GET은 HTTP METHOD 즉 행위를 의미하고 /members/simple은 URI에 해당합니다. 여기서는 URI에 해당하는 자원을 달라는 요청으로 해석할 수 있습니다.

 

그럼 '우리는 왜 주로 REST API를 사용할까?'라는 생각이 듭니다. 이는 다음과 같은 장점이 있기 때문입니다.

  • HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능
  • 서버와 클라이언트의 역할을 명확하게 분리

그렇다고 단점이 없는 것은 아닙니다.

 

  • 표준이 존재하지 않음
  • 사용할 수 있는 메소드가 제한적이다(POST, GET, PUT, DELETE)

이럼에도 불구하고 장점이 더 명확하기 때문에 주로 사용을 하는 것 같습니다.

 

REST 구성 요소

  1. 자원(Resource): URI
    • 모든 자원에 고유한 ID가 존재하고, 이 자원은 Server에 존재한다.
    • 자원을 구별하는 ID는 HTTP URI 다.
    • Client는 URI를 이용해서 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 Server에 요청한다.
  2. 행위(Verb): HTTP Method
    • HTTP 프로토콜의 Method를 사용한다.
    • HTTP 프로토콜은 GET, POST, PUT, DELETE, HEAD 와 같은 메서드를 제공한다.
  3. 표현(Representation of Resource)
    • Client가 자원의 상태(정보)에 대한 조작을 요청하면 Server는 이에 적절한 응답(Representation)을 보낸다.
    • REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 Representation으로 나타내어 질 수 있다.
    • JSON 혹은 XML를 통해 데이터를 주고 받는 것이 일반적이다.

REST 가 필요한 이유는?

  • 다양한 클라이언트의 등장
  • 애플리케이션의 분리 및 통합
  • 최근의 서버 프로그램(REST 기반)은 다양한 브라우저와 OS에서 통신할 수 있어야 한다.

핵심은 다양한 브라우저와 OS에서 통신이 가능하기 때문에 사용을 합니다.

 

RESTful이란?

REST를 REST 답게 쓰기 위한 방법 ⇒ 즉, REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭됩니다.

RESTful의 목적

  • 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것
  • 근본적인 목적은 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것

RESTful 하지 못한 경우

  • CRUD 기능을 모두 POST로만 처리하는 API
  • route에 resource, id외의 정보가 들어가는 경우(/students/updateName) ⇒ Resource들은 명사 형태를 띄어야 한다. url에 동사가 포함되어 있으면 안된다!
반응형

댓글


loading