REST API

HEYDAY7·2021년 5월 18일
0
post-thumbnail

개념에 대한 지식이 부족한거 같아 공부한 내용이다.

REST 란

REST는 Representational State Transfer의 약자로 자원을 이름으로 구분하여, 해당 자원의 표현에 의해서 관련 정보를 주고 받는 것을 의미한다. 간단히 얘기하자면 DB에 판매상품 정보가 자원으로 저장되어 있으면, 'items'가 자원의 표현인 것이다.

이러한 REST는 자원을 중심으로 하는 아키텍쳐로ROA(Resource Oriented Architecture)라고도 한다. HTTP 설계를 활용하는 아키텍쳐이며, REST API란 이렇게 RESTFull 한 API를 의미한다.

REST 구성

즉 REST full 한 API는 다음 세가지 요소로 구성되어 있다.

  • 자원 : URI
    각 자원마다 자신의 고유 ID를 갖고, HTTP URI가 자원을 구별하는 ID가 된다.
    /shop/items/:item_id가 하나의 판매상품을 지칭하는 URI인 것이다.

  • 행위 : HTTP 설계를 이용하므로 HTTP 프로토콜이 제공하는 Method를 뜻한다.
    'GET', 'POST', 'PUT', 'DELETE'

  • 표현 : client의 요청에 따른 server의 응답이라고 보면 된다. REST에서는 일반적으로 JSON이나 XML 형식으로 데이터를 주고 받는다. 나는 JSON만 다뤄봤다...

REST의 특징

여러 글을 읽다보니 통일되게 6가지 정도의 특징을 명시하고 있었다. 아직 REST에 완전히 익숙하지 않아 해당 특징들이 모두 와닿진 않았지만 한번쯤 읽어두면 좋을 것 같다. 여기는 내가 이해한 정도, 혹은 이정도 알고 넘어간다의 수준이다. 자세한 내용은 아래 여러 링크들을 참고해보면 좋을 것이다.

  1. Uniform Interface
    URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말합니다. ( 구문을 발췌해왔다. 통일이라는 단어가 핵심이다. )

  2. Stateless / 무상태성
    HTTP 프로토콜을 따르기에 이 무상태성 또한 당연히 같는다.

  3. Cacheable / 캐시 사용 가능

  4. Self-descriptiveness
    나도 느끼기에 아주 큰 장점 중 하나이다. REST API 메시지만 보고도 확실히 어떤 작동을 하는 것인지 이해하기가 편하다.

    ex) GET /post/3 : 3번 id를 갖는 post 정보를 읽어와달라~

  5. Client-Server
    REST 서버는 들어오는 요청에 알맞은 Response를 돌려주고, Client는 사용자의 상태를 컨트롤하고 요청을 쏘는 역할을 한다. 역할의 구분이 확실하여 관리가 쉬워진다.

  6. Layered System / 계층구조
    REST 서버를 다중계층으로 중간중간 다른 계층의 추가로 유연한 구조화가 가능하다고 한다. 직접 해본적은 없지만 느낌은 오는 특징이다.

REST API 설계

핵심 규칙

제일 중요한 부분이다.

  1. URI는 정보의 자원을 표현한다.
    DB에 계층이 존재하고 내가 원하는 DB Table까지 가는 경로라고 생각하면 대부분의 경우에 쉽게 이해할 수 있을 것이다. ㅎㅎ
    ex) /school/projects/

  2. 자원에 대한 행위는 HTTP Method로 표현한다.
    이 말은 다르게 말하면 어떠한 행위를 하는지는 URI에 포함되서는 안된다! 라는 것이다.

ex) POST /school/projects/create -> POST /school/projects
이렇게 create나 delete 같은 행위를 의미하는게 들어가서는 안된다.

API 설계시 기억/주의해야할 점

  1. 슬래시(/)는 계층를 의미한다.
  2. URI가 슬래시로 끝나면 안된다!
    이 부분은 일전에 내가 개발할 때 잘 알지 못했던 것 같다. 확실히 알아간다.
  3. 밑줄은 사용하지 않고, 하이픈을 쓴다.
  4. 소문자를 사용한다.

마무리

애매하게 알았던 개념을 다시 정리하면서 이거저거 새롭게 깨우친 것이 많다. 아직 경험이 적다보니 중간중간 와닿지 않는 부분들도 꽤나 있었다. 차근차근 경험을 늘려 가다보면 언젠간 어느정도 수준 이상의 이해도를 가질 수 있지 않을까 생각한다.

또, 좋은 API란 무엇인가에 대해서도 좀 고민해보면 좋을 것 같다. 인턴을 할 때도 이 고민을 했었고, 그 때 참고했던 글 링크를 하나정도 첨부한다. 결론적으로는 비즈니스적 need에 맞춰야 한다는 것이다!!

What are best practices for REST nested resources?


이 글은 여러 블로그에 올라와있는 글들을 읽고, 직접 적어보면서 공부한 것이다. 참고한 글은 아래와 같다.
https://meetup.toast.com/posts/92
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
https://www.a-mean-blog.com/ko/blog/%ED%86%A0%EB%A7%89%EA%B8%80/_/REST%EC%99%80-RESTful-API
https://spoqa.github.io/2012/02/27/rest-introduction.html

profile
(전) Junior Android Developer (현) Backend 이직 준비생

0개의 댓글