REST? RESTful API?

Yeon Jeffrey Seo·2021년 9월 26일

네트워크

목록 보기
5/9

REST란?

"REpresentational State Transfer"
자원을 이름(자원의 표현, uri)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것.
소프트웨어 개발 아키텍처 중 한 형식이다.

일반적인 프로그래밍의 경우 특정 함수를 호출 할때, 함수의 이름을 사용해서 그 함수를 호출한다.
그렇다면 웹은? 클라이언트와 서버 사이에서 '통신'을 통해 CRUD에 해당하는 함수를 호출해야 하는데, 이때 representation과 HTTP method를 사용한다.
어떤 자원에 대해 함수를 호출할 것이냐?를 자원의 대표(URI)로 표현한다.
어떤 자원에 대해 어떤 동작을 수행할 것이냐?는 HTTP method로 정의한다.
즉, REST란 클라이언트와 서버간 통신을 어떻게 표현할 것인가?를 정의하는 것이다.

REST의 구성 요소

  1. 자원(Resource): URI
    • 서버에 존재하는 데이터
    • 모든 자원은 고유의 URI를 가지며, 클라이언트는 이 URI를 지정하여 해당 자원에 CRUD 명령 수행
  2. 행위 (Verb) : HTTP Method
    • 클라이언트가 자원을 조작하는 것
  3. 표현 (Representation of Resource)
    • 클라이언트가 HTTP Method로 자원을 조작하면 서버가 그에 대한 응답을 보낸다.
    • 그 응답의 형태라고 볼 수 있겠다.(JSON, XML, CSV ....)

REST API?

REST 아키텍처를 기반으로 서비스 API를 구현한 것. 한마디로 REST한(RESTful) API
그렇다면 왜 RESTful API를 작성해야 할까? DELETE 기능을 POST 메서드로 구현해도 동작하지만, 다른 사람이 그 코드를 본다면? 혹은 작성자가 유지보수를 해야 한다면? 가독성이 많이 떨어질 것이다. 결국 RESTful API는 "우리 다같이 API좀 일관성 있게 만듭시다!" 라고 약속한 비공식적 규약이라 할 수 있다.

RESTful API 작성 예시

먼저 RESTful하지 못한 예를 살펴보는 것이 이해가 빠를 것 같다.

  1. CRUD에 맞지 않는 HTTP method를 사용하는 경우
    • ex) POST method를 사용해서 DELETE를 구현
  2. Route에 자원을 표현하는 것이 아닌 행위를 표현하는 경우
    • ex) 실제로 나는 항해 1주차 과제를 하면서, API route를 다음과 같이 작성했다.
    • /api/comments/add-comment

RESTful API 작성 예시

기능 CRUD HTTP method ROUTE
resource 전체를 조회 READ GET /resources
특정 resource를 조회 READ GET /resources/:id
조건을 만족하는 resource들을 조회하거나 정렬 READ GET /resources/?query=condition
특정 resource의 전체를 수정 UPDATE PUT /resources/:id
특정 resource의 일부 수정 UPDATE PATCH /resources/:id
특정 resource를 삭제 DELETE DELETE /resources/:id

위의 표에서 route를 잘 살펴 보면, /resources는 resource 자원의 "집합"에 대해 CRUD를 수행하기 때문에, 복수형으로 표기한다.

Path variable vs Query string

  • :id (path variable)
    resources 자원 중에서 특정 자원을 식별할 경우에는 path variable을 사용한다.

  • ?query (query string)
    resources 자원들을 정렬, 필터링을 할 경우 사용한다.

결론

REST는 클라이언트와 서버 간 CRUD 수행시 무엇을, 어떻게 표현할 것인가에 대한 방법론이다.
이 REST를 적용한 API를 REST API or RESTful API라 부른다.
REST API를 작성하는 목적은 간단하다. 가독성이 좋고, 일관성 있는 API를 작성하는 것.
혼자서만 작업하는 API의 경우에는, POST 메서드를 사용해서 DELETE를 수행한다던지, /api/resources/delete-resource 라는 url을 작성해도 무관할 것이다. 하지만 그게 아니라면 RESTful API를 작성할 것.

profile
The best time to plant a tree was twenty years ago. The second best time is now.

5개의 댓글

comment-user-thumbnail
2021년 9월 27일

오우 정리가 잘 되 있는거 같아서 이해가 잘되네용~

1개의 답글
comment-user-thumbnail
2021년 10월 3일

REST로 설계를 하고있지만 로그인을 /login이라고 할 때 마다 저항감이 드네요

1개의 답글