[네트워크] REST API
[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)로 하이퍼미디어 컨트롤을 적용함
* [추가]