[Web] REST API

Gogh·2023년 1월 2일
0

Web

목록 보기
6/8

🎯 목표 : REST API의 개념 이해

📒 REST ?

📌 특징과 구성

  • Representational State Transfer의 약자로 HTTP 통신의 장점을 최대한 활용할수 있는 설계 아키텍처다.
  • 자원(Resource - URI), 행위(Verb - HTTP Method), 표현(Representations)으로 구성 되어 있다.
  • 특징으로는,
    1. Uniform Interface(유니폼 인터페이스) :
      URI로 지정한 리소스에 대한 조작을 통일 되고 한정적인 인터페이스로 수행하는 아키텍처 스타일.
    2. Stateless(무상태성) :
      작업을 위한 상태 정보를 따로 저장,관리 하지 않으며, 세션,쿠키 정보도 별도로 저장하고 있지 않는다. API서버는 들어오는 요청만 단순히 처리한다.
      서비스 자유도가 높아지고 불필요한 정보를 서버에서 관리하지 않아, 구현이 단순해진다.
    3. Cacheable(캐시 가능) :
      HTTP의 기존 웹 표준을 그대로 적용하기 때문에, 웹에서 사용하는 인프라를 그대로 활용한다. HTTP가 가진 캐싱 기능이 적용 가능하다.
    4. Self-descriptiveness(자체 표현 구조) : REST API 메세지만 보고 쉽게 이해할수 있다.
    5. Client - Server 구조 :
      서버는 API를 제공하고 클라이언트는 사용자 인증, 컨텍스트 등을 직접 관리하는 구조로 각 역할이 확실히 구분된다.
    6. 계층형 구조 :
      다중 계층으로 구성될수 있는데, 보안, 로드 밸런싱, 암호과 계층을 추가해 구조상 유연성을 둘수 있고 프록시와 게이트웨이 같은 네트워크 기반 중간 매체를 사용할수 있게 한다.

📒 REST API 설계 가이드

  • API(Application Programming Interface)
    데이터와 기능의 집합을 클라이언트로 제공하여 유저와의 상호작용을 촉진하며 정보를 서로 교환 가능하도록 만드는 인터페이스.
  • REST API
    REST에 기반하여 API를 구현한 것.
    OpenAPI, 마이크로 서비스 등 서비스 제공 업체 대부분은 REST API를 제공한다.

📌 리소스(URI)

  • 꼭 기억해야 할 가이드로 URI는 정보의 자원에 알맞은 엔드포인트로 표현해야 하며, 동사보다 명사를 사용한다. 자원에 대한 행위는 HTTP Method로 표현 한다.
# 회원을 삭제할때.
  GET /members/delete/1 -> delete와 같은 행위에 대한 표현을 리소스에 적용하면 안된다.
  DELETE /members/1     -> 행위에 대한 표현은 HTTP Method로 표현한다.

# 회원정보를 가져올때.
  GET /members/1

# 회원을 추가
  POST /members/2

# 회원정보 전체 교체
  PUT /members/2

# 회원정보를 일부 교체
  PATCH /members/2
  • 슬래시 구분자는 계층관계를 나타내는데 사용한다.
    http://api.example.com/houses/apartments
    http://api.example.com/animals/mammals/whales
  • URI 마지막 문자로 슬래시를 포함하지 않는다.
    http://api.example.com/houses/apartments/ (X)
    http://api.example.com/houses/apartments  (0)
  • 하이픈(-)은 URI 가독성을 높이는데 사용한다.
  • 언더바(_)는 URI에 사용하지 않는다.
  • URI 경로에는 소문자가 적합하다. 대소문자에 따라 다른 리소스로 인식되기 때문
  • 리소스 파일의 확장자는 URI에 포함시키지 않는다. 파일 확장자는 Accept header를 사용하여 표현한다.
    GET / members/1/345/photo HTTP/1.1 Host: api.example.com Accept: image/jpg
  • 리소스 간의 관계를 표현할때는아래와 같이 표현하며 구체적 표현이 필요할때 서브 리소스에 명시적으로 표현한다.
    /리소스명/리소스 ID/관계가 있는 다른 리소스명
  GET : /users/{userid}/music (일반적으로 소유 ‘has’의 관계를 표현할 때)
  GET : /users/{userid}/favorit/music (관계명이 애매하거나 구체적 표현이 필요할 때)
  • 자원을 표현하는 Collection과 Document
    Document는 단순히 문서 또는 하나의 객체로 이해하면 되겠다. 이 Document의 집합이 Collection이다.
    sports, palyers와 같이 하위 리소스를 포함하는 리소스를 Collection이라 하며, Collection은 복수를 사용한다.
    soccor과 players/13을 하나의 객체, Document로 이해하면 되겠다. 
    http:// api.example.com/sports/soccer
    http:// api.example.com/sports/soccer/players/13

📌 HTTP 응답 상태 코드

RESTful API를 구현할때, 적절한 HTTP 상태 코드를 사용하는 것이 아주 중요하다.

  • 2xx : 클라이언트 요청이 성공적으로 수행됨.
  • 3xx : 클라이언트는 요청을 완료하기 위해 추가적인 행위를 해야한다.
  • 4xx : 클라이언트의 잘못된 요청.
  • 5xx : 서버 오류
  • 200OK : 클라이언트의 요청을 정상적으로 수행함.
  • 201Created : 클라이언트가 리소스 생성을 요청 했을때, 리소스가 성공적으로 생성
  • 301Moved Permanently : 클라이언트가 요청한 리소스에 대한 URI가 변경 되었을때 사용하는 응답코드.
    Location header에 변경된 URI를 표기해 리다이렉션 해주어야 한다.
  • 400Bad Request : 클라이언트의 요청이 부적절 할 경우.
  • 401Unauthorized : 클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청했을때.
  • 403Forbidden : 유저 인증상태와 관계 없이 응답하고 싶지 않은 리소스를 클라이언트가 요청했을때.
  • 404Not Found : 클라이언트가 요청한 리소스가 존재 하지 않을때.
  • 405Method Not Allowed : 클라이언트가 요청한 리소스에서는 사용 불가능한 Method를 이용했을 경우.
  • 500Internal Server Error : 서버에 문제가 있을때.

Reference

https://blog.restcase.com/5-basic-rest-api-design-guidelines/

https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods

https://ko.wikipedia.org/wiki/REST

profile
컴퓨터가 할일은 컴퓨터가

0개의 댓글