[개발 상식] RESTful API

2018. 8. 22. 16:50CS/개발 상식

반응형
[개발 상식] RESTful API

해당 시리즈는 Interview_Question_for_Beginner를 기반으로 추가 학습을 진행해 작성하였습니다.

목차

RESTful API?

REST의 기본원칙을 성실히 지킨 API

REST

API 설계의 중심에 자원이 있고 HTTP Method를 통해 자원을 처리 하도록 설계하는 것

  • REpresentational State Transfer의 약자
  • Resource Oriented Architecture이다.

위키백과
월드 와이드 웹(a.k.a WWW)과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식으로, 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반에 대한 패턴

구성요소

  • Resource - URI
    • /user/{userId}
  • Method - 행위, HTTP Method
    • GET, POST, PUT, DELETE
  • Representations - 메시지, 응답 형태
    • xml,json 등으로 응답

중심규칙

  1. URI는 정보의 자원을 표현해야 한다.
  2. 자원에 대한 행위는 HTTP Method로 표현한다.

6가지 원칙(특징)

  1. Uniform Interface(유니폼 인터페이스)
    : URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍쳐 스타일
  2. Stateless (무상태성)
    : 작업을 위한 상태정보를 따로 저장하고 관리하지 않음
    • ex) 세션/쿠키정보를 별도로 저장/관리 하지 않아 API 서버는 들어오는 요청만 처리하면 됨
    • 서비스 자유도 높아짐, 구현이 단순해짐
  3. Cacheable (캐시 가능)
    : HTTP 기존 웹표준 그대로 사용하여 웹에서 사용하는 기존 인프라 그대로 활용 가능
    • HTTP가 가진 캐싱 기능 적용 가능
  4. Self-descriptiveness (자체 표현 구조)
    : REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어있음
  5. Client-Server 구조
    : REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조
    • 클라이언트/서버간 개발 내용이 명확해지고 서로간 의존성이 줄어듦
  6. 계층형 구조
    : REST 서버는 다중 계층으로 구성될 수 있다.
    • (보안, 로드 밸런싱, 암호화 계층을 추가해) 구조상의 유연성을 둘 수 있음
    • (PROXY, 게이트웨이 같은) 네트워크 기반의 중간매체를 사용할 수 있게 함

RESTful API

RESTful하게 API를 디자인 하는 법

  • 리소스와 행위 를 명시적이고 직관적으로 분리
    • 리소스는 URI로 표현, 리소스 명은 명사로 표현되어야 한다.
    • 행위는 분명한 목적에 따라 적절한 HTTP Method로 표현할 것
      • GET(조회), POST(생성), PUT(기존 entity 전체 수정), DELETE(삭제)
      • PATCH(기존 entity 일부 수정)
  • Message는 Header와 Body를 명확하게 분리해서 사용
    • body : Entity에 대한 내용
    • header : 애플리케이션 서버가 행동할 판단의 근거가 되는 컨트롤 정보
      • API 버전 정보, 응답받고자 하는 MIME 타입 등
    • header와 body는 http header 와 http body로 나눌 수도 있고, http body에 들어가는 json 구조로 분리할 수도 있다.
  • API 버전을 관리
    • API의 signature이 변경될 수도 있음에 유의
    • 특정 AI 변경시 하위호환성을 보장해야 함
  • 서버와 클라이언트가 같은 방식을 사용해서 요청
    • URI가 플랫폼 중립적이어야 함
    • form-data든, json이든 하나로 통일한다.

장점

  1. Open API를 제공하기 쉽다
  2. 멀티플랫폼 지원 및 연동이 용이하다.
  3. 원하는 타입으로 데이터를 주고 받을 수 있다.
  4. 기존 웹 인프라(HTTP)를 그대로 사용할 수 있다.

단점

  1. 사용할 수 있는 메소드가 4가지 밖에 없다.
  2. 분산환경에는 부적합하다.
  3. HTTP 통신 모델에 대해서만 지원한다.

Reference

반응형