[개발 상식] RESTful API

olwooz·2023년 1월 30일
0

개발 상식

목록 보기
1/1

RESTful API

  • REpresentational State Transfer
  • 하나의 아키텍쳐로 볼 수 있음 (Resource Oriented Architecture)
  • API 설계의 중심에 자원이 있고 HTTP Method를 통해 자원을 처리하도록 설계

REST 6가지 원칙

https://restfulapi.net/rest-architectural-constraints/

  1. Uniform Interface
    • URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍쳐 스타일
    • Servers and clients may also be replaced and developed independently, as long as the interface between them is not altered
  2. Client-server
    • Once a developer becomes familiar with one of your APIs, he should be able to follow a similar approach for other APIs
  3. Stateless
    • 작업을 위한 상태정보를 따로 저장하고 관리하지 않음 → 세션, 쿠키 등 X, API 서버는 들어오는 요청만을 단순히 처리하면 됨
    • 서비스 자유도 높아지고 서버에서 불필요한 정보를 관리하지 않아 구현이 단순해짐
    • No client context shall be stored on the server between requests. The client is responsible for managing the state of the application.
  4. Cacheable
    • HTTP라는 기존 웹 표준을 그대로 사용하기 때문에 웹 기존 인프라 그대로 활용 가능 → HTTP 캐싱 기능 적용 가능
    • HTTP 프로토콜 표준에서 사용하는 Last-Modified 태그나 E-Tag를 이용하면 캐싱 구현 가능
    • Well-managed caching partially or completely eliminates some client-server interactions, further improving scalability and performance.
  5. Layered system
    • REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있음 PROXY, 게이트웨이 같은 네트워크 기반 중간 매체를 사용할 수 있음
  6. Code on Demand (optional)
    • feel free to return executable code to support a part of your application (e.g. clients may call your API to get a UI widget rendering code)

RESTful하게 API를 디자인한다는 것

  1. 리소스와 행위를 명시적이고 직관적으로 분리
    • 리소스는 URI로 표현되는데 리소스가 가리키는 것은 명사로 표현되어야 함
    • 행위는 HTTP Method로 표현하고, GET(조회), POST(생성), PUT(기존 entity 전체 수정), PATCH(기존 entity 일부 수정), DELETE(삭제)을 분명한 목적으로 사용
  2. Message는 Header와 Body를 명확하게 분리해서 사용
    • Entity에 대한 내용은 body에 담음
    • 애플리케이션 서버가 행동할 판단의 근거가 되는 컨트롤 정보인 API 버전 정보, 응답받고자 하는 MIME 타입 등은 header에 담음
      • MIME - Multipurpose Internet Mail Extensions (이메일과 함께 동봉할 파일을 텍스트로 전환해서 이메일 시스템을 통해 전달하기 위해 개발됨, 현재는 웹을 통해 여러 형태의 파일 전달하는데 쓰임, i.e. 파일 변환)
    • header와 body는 HTTP header와 HTTP body로 나눌 수도 있고, HTTP body에 들어가는 JSON 구조로 분리할 수도 있음
  3. API 버전 관리
    • 환경은 항상 변하기 때문에 API의 signature가 변경될 수도 있음에 유의
    • 특정 API를 변경할 때는 반드시 하위호환성을 보장해야 함
  4. 서버와 클라이언트가 같은 방식을 사용해서 요청
    • 브라우저는 form-data 형식의 submit으로 보내고 서버에서는 JSON 형태로 보내는 식의 분리보다는 둘 다 JSON이든 form-data든 하나로 통일
    • i.e. URI가 플랫폼 중립적이여야 함

장점

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

단점

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

0개의 댓글