TIL 34. What is REST API?

Drageon Lee·2022년 1월 16일
0

CS

목록 보기
6/9

Today's topic

우리는 API를 만들면서 또는 CS를 공부하면서 REST API에 대해 자주 접한다. REST API란 대충은 얼버무릴 수 있지만 정확하게 먼지는 쉽게 설명하기 어렵다. REST API가 뭔지에 대해 이번 posting을 통해서 알아보자!

👉 What is "REST"?

REST란 Representational State Transfer의 약자로 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이다.

이렇게 위의 정의만으로는 쉽게 알아먹기 힘들다. 쉽게 풀어써 보면, 자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고 받는 것을 의미한다. 이것도 좀 어려운가?

다시 말해, RESTHTTP URL을 통해 자원(쉽게 말해 주소)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD(CREATE, READ, UPDATE, DELETE) 오퍼레이션을 적용하는 것이라고 할 수 있겠다.

👉 REST의 구성 요소

REST를 구성하는 요소에는 크게 3가지가 있다.

  1. URI - 정보의 자원을 표현
  2. HTTP method - 자원의 operation에 대한 표현
    ex) GET / POST / PUT / DELETE
  3. 자원의 표현 - server에서의 응답
  1. URI
  • URI는 정보의 자원을 표현해야 한다. 자원의 형태는 명사를 사용한다.
    아래는 잘못된 예시와 올바를 예시를 나타내었다.
    URI에는 자원에 대해서만 나타나야 하므로 delete와 같은 operation에 대한 단어가 들어가면 안된다.

    잘못된 예시 :
    GET /student/delete/1
    
     올바른 예시 : 
    DELETE /student/1

    ❗️ URI setting 시 주의 할 점
    1) '/'는 계층을 구분할 때 사용한다.
    2) URI 마지막 문자로 '/' 포함하지 않는다.
    3) '-'(하이픈)은 가독성을 높이기 위해 사용한다.
    4) 언더 바('_') URI에 넣지 않는다.
    5) URI 경로에는 소문자만 사용된다.
    6) URI 경로에 파일확장자는 포함시키지 않는다.

  1. 자원에 대한 operation은 HTTP method(GET/POST/PUT/DELETE)로 표현한다.
    HTTP method를 통해 각각에 맞게 CRUD 가 가능하다,
  • POST : Create
  • GET : Read
  • PUT : Update
  • DELETE : Delete
  1. 요청한 HTTP method따라 CRUD가 적용되며, 해당 operation에 대한 응답을 한다.(with 상태 코드)

👉 REST를 위한 조건

해당 조건 들을 준수하면 개별 컴포넌트는 자유롭게 구현할 수 있다.

  1. Interface의 일관성
    일관적인 interface로 분리되어 있어야 한다.

  2. Stateless
    각 요청 간 클라이언트의 context(상태 정보)가 서버에 저장되어서는 안 된다.

  3. Cache 가능
    REST의 가장 큰 특징 중 하나라고 한다. REST는 웹 표준인 HTTP를 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 사용할 수 있다. 따라서 HTTP가 가진 캐싱 기능을 적용할 수 있는데, HTTP 프로토콜 표준에서 사용하는 Last-Modified 태그나 E-Tag 등을 이용하면 쉽게 구현이 가능하다고 한다.

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

  5. Client-Server 구조
    REST 서버는 API 제공, Client는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 되어있어 Server와 Client의 역할이 명확히 나뉘기 때문에 각 필드에서 개발해야할 점이 명확해지고 서로 간의 의존성이 줄어들게 된다.

  6. Self-descriptiveness(자체 표현 구조)
    REST API만 보고도 쉽게 알 수 있다. 즉 HTTP method와 URI만 보고도 어떤 operation을 하는지 목적을 쉽게 알 수 있다.

👉 그럼 API는?

API는 Applicationo Programming Interface의 약자로, 응용 프로그램(애플리케이션)에서 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.
주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.

즉, 애플리케이션과 운영체제 그리고 애플리케이션과 프로그래밍 언어가 제공하는 기능 사이의 '상호 작용'을 도와줍니다.
ex) 리모컨 역할 - 우리가 TV를 켜거나 에어컨을 킬 때 중간에서 작용을 도와주는 역할

  • API의 역할을 식당의 점원과 비교한 그림

👉 그럼 Web API의 역할은?

  1. 서버와 데이터베이스안의 리소스에 접근할 수 있게 해준다.
    - API는 접근 권한이 인가된 client에게만 서버와 데이터베이스에 접근할 수 있게 함
  2. 모든 요청과 응답을 표준화 한다.
    - 어떤 브랜드의 client에서 접속하던 동일한 API를 사용하기 때문에 클라이언트의 요청과 서버의 응답을 하나의 API로 표준화 한다.

👉 Finally, RESTful API란?

REST API guide를 따라서 API를 작성하여 Web sevice할 때 그 API를 RESTful API라 한다.

📖 출처 :

My opinion

이번 posting을 하며 RESTful API에 대해 정확하게 짚어 볼 수 있었다. 이번 posting을 통해 정확한 의미를 알았으므로 RESTful API를 잘 따르고 있었는 지 한번 되짚어 봐야겠다!

profile
운동하는 개발자

0개의 댓글