NETWORK

[NETWORK] REST API

집한구석 2021. 10. 31. 23:32
728x90

REST 정의

  • Representational State Transfer(대표적인 상태 전달)의 약자
  • 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식
  • REST 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일
  • REST 네트워크 상에서 Client와 Server 사이의 통식 방식중 하나
  • HTTP URI를 통해 자원을 명시, HTTP Method를 통하여 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미하며 웹 사이트의 이미지, 텍스트, DB 내용 등의 모든 자원에 고유한 ID인 HTTP URI를 부여함

REST 장단점

장점

  • 여러 가지 서비스 디자인에서 생길 수 있는 문제를 최소화해준다.
  • Hypermedia API의 기본을 충실히 지키면서 범용성을 보장
  • HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있음

단점

  • 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 값이 왠지 더 어렵게 느낌
  • 구형 브라우저가 아직 제대로 지원해주지 못하는 부분이 있음 (PUT, DELETE 사용 X, pushState를 지원하지 않음)

REST 구성요소

  • 자원(Resource) URI : 모든 자원에 고유한 ID가 존재하고, Server에 존재함, Client는 URI를 이용하여 자원을 지정하고 해당자원의 상태에 대한 조작을 Server에 요청함
  • 행위(Verb) HTTP Method : GET, POST, PUT, DELETE, HEAD와 같은 메서드를 제공함
  • 표현(Representation of Resource) : Client가 자원의 상태(정보)에 대한 조작을 요청하면 Server는 이에 적절한 응답을 보냄, REST에서 JSON, XML, TEXT, RSS등 여러 형태의 Representation으로 나타내어 질 수 있음

REST 특징

  • Server-Client(서버-클라이언트 구조)
  • Stateless(무상태)
  • Cacheable(캐시 처리 가능)
  • Layered System(계층화)
  • Code-On-Demand(optional)
  • Uniform Interface(인터페이스 일관성)

REST API의 정의

  • REST 기반으로 서비스 API를 구현한 것
  • 최근 대부분 REST API를 제공함

REST API의 특징

  • 사내 시스템들도 REST 기반으로 시스템을 분산해 확장성과 재사용성을 높여 유지보수 및 운용을 편리하게 할 수 있음

REST API 설계 기본 규칙

  • URI는 정보의 자원을 표현해야함
  • resource는 명사를 사용하며, 소문자 복수형을 사용하여 표현함
  • URI에 HTTP Method가 들어가면 안되며, 행위에 대한 동사표현이 들어가면 안됨
  • 슬래시 구분자는 계층 관계를 나타내는데 사용
  • URI 마지막 문자로 슬래시를 포함하지 않음
  • 하이픈(-) URI의 가독성을 높이는데 사용하며 밑줄(_)은 사용하지 않음
  • URI 경로에는 소문자, 파일확장자는 URI에 포함하지 않음
  • 리소스 간에는 연관 관계가 있는 경우

RESTful의 개념

  • RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어
  • REST 원리를 다르는 시스템은 RESTful이란 용어로 지칭함

RESTful의 목적

  • 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것
  • RESTFul API를 구현하는 근본적인 목적이 퍼포먼스 향상에 있는게 아니라, 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는게 주동기임

RESTful 하지 못한 경우

  • POST로만 모두 처리하는 API

'NETWORK' 카테고리의 다른 글

[NETWORK] Socket.io / WebSocket  (0) 2021.11.03
[NETWORK] GET / POST 메서드 비교  (0) 2021.11.01
[NETWORK] CORS  (0) 2021.10.31
[NETWORK] 요청 응답 헤더  (0) 2021.10.29
[NETWORK] HTTP / HTTPS  (0) 2021.10.28