공부 자료/네트워크

[네트워크] REST API

희희웃는청바지 2022. 10. 3. 13:31

[REST API란?]

REST (Representational StateTransfer)

: 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식으로, HTTP(웹)의 장점(무상태성; 서버의 상태를 고려하지 않음)을 최대한 활용할 수 있는 아키텍처를 의미

: 리소스 식별이 가장 중요한 핵심

API (Application Program Interface)

: 운영체제와 운영프로그램 사이의 통신에 사용되는 언어나 메시지 형식을 의미

Rest API

: 웹에서 사용되는 데이터나 자원(resource)을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식

 

Ex) 식당의 손님으로서 주문을 위해 메뉴판을 보았을 때 메뉴가 정돈이 되어있지 않거나 알아볼 수 없다면?

즉, 서버와 클라이언트도 데이터와 리소스를 요청하고 요청에 따른 응답을 전달하기 위한 메뉴판이 필요함

따라서 HTTP 프로토콜 기반으로 요청과 응답에 따라 리소스를 주고받기 위해 알아보기 쉽고 잘 작성된 메뉴판이 필요한데, 해당 역할을 API가 수행해야 하므로 서로 잘 알아볼 수 있도록 작성되어야 함.

 

 

[좋은 REST API 디자인 방법]

RMM(Richardson Maturity Model)

: 리차드슨은 REST API를 잘 적용하기 위해 4단계 모델을 만듦

 *실제로 3단계까지 지키기 어렵기에 2단계까지만 적용해도 좋은 API 디자인이라 판단하며 이 경우 HTTP API라고 부름

 

[0단계] HTTP 사용

: 단순히 HTTP 프로토콜을 사용하기만 해도 되며, REST API 작성을 위한 기본 단계

: 단일 URI를 가지며, 일반적으로 HTTP 메서드(일반적으로 POST)를 사용

 

[1단계] 개별 리소스와의 통신 준수

: 모든 자원은 개별 리소스에 맞는 엔드포인드(Endpoint)를 사용해야 한다는 것과 요청하고 받은 자원에 대한 정보를 응답으로 전달해야 한다는 것을 의미

 * 엔드포인트 작성 시에는 동사, HTTP 메서드, 혹은 어떤 행위에 대한 단어 사용은 지양하고 리소스에 집중해 명사 형태의 단어로 작성하는 것이 중요

 * 리소스(Resource)

    : 모든 자원을 HTTP URI로 표현하며, 동사가 아닌 명사로 표현함 (단, 예외로 적어야 하는 경우가 존재하기는 함)

    : 대문자를 사용하지 않으며, 길이가 길어질 경우 하이픈(-)을 통해 연결함.

 

[2단계] HTTP 메소드 원칙 준수

: CRUD에 맞게 적절한 HTTP 메서드를 사용하는 것에 중점을 둚

 

* HTTP 메서드

1) GET : 서버의 데이터를 변화시키지 않는 요청
2) POST : 요청마다 새로운 리소스를 생성
3) PUT    : 교체, 요청마다 같은 리소스를 반환
** 매 요청마다 같은 리소스를 반환하는 특징을 멱등(idempotent)하다고 한다. 그렇기 때문에 멱등성을 가지는 PUT과 그렇지 않은 POST는 구분이 필요함
4) PATCH : 수정 (PUT과 구분하여 사용 필요)
5) DELETE : 삭제


* HTTP Status Code (대표적인 사용 코드)
200 : OK
201 : Created, 리소스가 정상적으로 생성
301 : Moved Permanently, 리소스의 URI가 변경 됨
400 : Invalid Request, 잘못 된 요청
401 : UnAuthorized, 인가되지 않은 요청
404 : Not Found, 리소스를 찾을 수 없음
500 : Internal Server Error, 서버의 내부 에러

 

[3단계] HATEOAS 원칙 준수

: HATEOAS(Hypertext As The Engine Of Application State)로 하이퍼미디어 컨트롤을 적용함

 

 

* [추가]

  : 5가지의 기본적은 REST API 디자인 가이드