포스트

REST API

REST API

REST API


API

  • Application Programming Interface
  • 응용 프로그램에서 사용할 수 있도록 다른 응용 프로그램을 제어할 수 있께 만든 인터페이스
  • API를 사용하면 내부 구현 로직을 알지 못해도 정의되어 있는 기능을 쉽게 사용할 수 있음

  • 여기서 인터페이스는 어떤 장치간 정보를 주고 받는 방법을 말한다.
  • i.e. 마우스, 키보드, 터치패드

REST

  • Representational State Transfer, 자원 상태 전달?
  • 자원을 이름으로 구분하여 자원의 상태를 교환하는 것을 의미
  • 서버와 클라이언트 통신 방식 중 하나

  • HTTP URI를 통해 Resource을 명시하고,
  • HTTP Method를 통해 해당 Resource에 대한 CRUD Operation을 적용하는 것
    • 자원을 교환하는 것
  • 그 결과를 HTTP Status Code로 응답하는 것

Resource

  • Collection: 복수의 자원을 가리키는 자원
    • https://api.example.com/topics
  • Element: 단수의 자원을 가리키는 자원
    • https://api.example.com/topics/1234
    • https://api.example.com/topics/rest-api

Method

  • CRUD Operation
    • Create: POST
    • Read: GET
    • Update: PUT, PATCH
    • Delete: DELETE

REST 특징

  • Server-Client 구조
    • 자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client
    • 서버와 클라이언트가 독립적으로 분리되어 있어야 함
  • Stateless
    • 요청 간의 클라이언트 정보가 서버에 저장되어서는 안됨 (규칙)
    • 서버는 각 요청을 완전히 독립적으로 처리해야 함
    • 이전 요청이 다음 요청에 영향을 주면 안됨
  • Cacheable
    • 클라이언트는 응답을 캐시할 수 있어야 함
      • HTTP 프로토콜을 그대로 사용하기 때문에 HTTP의 특징인 캐싱 기능을 사용할 수 있음
    • 대량의 요청을 효율적으로 처리하기 위해 캐시를 사용
  • 계층화 (Layered System)
    • 클라이언트는 서버의 구성과 상관없이 REST API 서버로 요청
    • 서버는 다중 계층으로 구성될 수 있음 (로드 밸런싱, 보안 요소, 캐시 등)
  • Code on Demand (Optional)
    • 요청을 받으면 서버에서 클라이언트로 코드 또는 스크립트(로직)을 전달하여 클라이언트 기능 확장
  • 인터페이스 일관성 (Uniform Interface)
    • 정보가 표준 형식으로 전송되기 위해 구성 요소간 통합 인터페이스를 제공
    • HTTP 프로토콜을 따르는 모든 플랫폼에서 사용 가능하게끔 설계

REST 장점

  • HTTP 표준 프로토콜을 사용하는 모든 플랫폼에서 호환가능
  • 서버와 클라이언트의 역할을 명확하게 분리
  • 여러 서비스 설계에서 생길 수 있는 문제를 최소화

REST API

  • REST 아키텍처의 조건을 준수하는 어플리케이션 프로그래밍 인터페이스
  • RESTful: REST 아키텍처를 구현하는 웹 서비스

REST API 특징

  • REST 기반으로 시스템을 분산하여 확장성과 재사용성을 높임
  • HTTP 표준을 따르고 있어 여러 프로그래밍 언어로 구현할 수 있음

REST API 설계 규칙

  • 웹기반의 REST API를 설계할 경우에는 URI를 통해 자원을 표현해야 함
    • https://api.example.com/v1/users/1234
    • Resource: users
    • Resource ID: 1234
  • ⭐ 자원에 대한 조작은 Method를 통해 표현해야 함
    • URI에 행위가 들어가면 안됨
      • URI는 자원을 표현
    • HEADER를 통해 CRUD를 표현하여 동작을 요청해야 함
  • 메세지를 통한 리소스 조작
    • HEADER를 통해 content-type을 지정하여 데이터를 전달
    • 대표적 형식으로는 HTML, XML, JSON, TEXT 등이 있음
      • 이건 REST가 정의하는 것이 아님
  • 문법, 표기법
    • URI에는 소문자를 사용
    • Resource의 이름이나 URI가 길어질 경우 하이픈(-)을 사용
    • 언더바(_)는 사용하지 않음
    • 파일 확장자는 URI에 포함하지 않음

메모


참고

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.