API는 무엇인가?
웹 상에서 데이터를 주고 받기 위해 HTTP 프로토콜(규약)을 사용한다. 그리고 HTTP를 사용해서 원활하게 소통하기 위해서 API라는 것을 만들고 활용한다. API는 간략하게 설명하면 , 프로그램끼리 서로 소통할 수 있는 매개체이다
예를 들면, 카페에서 음료를 주문하고 주문 받기 위해서 '메뉴판'을 활용하는 것처럼, 웹의 세계 - 클라이언트와 서버간에도
이런 메뉴판 같은 역할을 해주는 매개체가 필요하다. 이를 API 라고 할 수 있다.
REST API가 무엇인가?
REST API는 웹에서 사용되는 데이터나 자원(Resource)을 HTTP URI로 표현하고,
HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식을 말한다.
HTTP 를 잘 활용하기 위해 고안된 아키텍처 - 방식이라고 했다. API 가 메뉴판이라고 할 때, 보기 좋게 잘 작성된 메뉴판이 주문하기 훨씬 쉬운 것처럼, 잘 정리된 API 가 있으면 그것만 가지고도 HTTP 요청의 내용을 파악하기 쉬워진다.
REST API를 디자인하는 방법
- REST API를 작성할 때는 몇 가지 지켜야 할 규칙들이 있다. REST 방법론을 보다 더 실용적으로 적용하기 위해
레오나르드 리차드슨(Leonard Richardson)은 REST API를 잘 적용하기 위한 4단계 모델을 만들었다.
리차드슨의 REST 성숙도 모델을 구조화하면 아래의 그림과 같다.
REST 성숙도 모델은 총 4단계(0~3단계)로 나누어집니다.
앞서 이야기한 로이 필딩은 이 모델의 모든 단계를 충족해야 REST API라고 부를 수 있다고 주장했습니다. 그러나 실제로 엄밀하게 3단계까지 지키기 어렵기 때문에 2단계까지만 적용해도 좋은 API 디자인이라고 볼 수 있고,
이런 경우를 HTTP API 라고도 부릅니다.
REST 성숙도 모델
0단계 : HTTP 사용
0단계는 단순히 HTTP 프로토콜을 사용하기만 해도 충족된다. 이 단계를 충족했다고 해서 REST API가 되는 것은 아니고,
REST API가 되기 위한 기본 단계라고 할 수 있다.
1단계 : 개별 리소스와의 통신 준수
앞서 설명했듯이 REST API에서는 웹에서 사용되는 모든 리소르를 HTTP URI로 표현한다. 즉, URI는 리소스를 표현해야한다.
그리고 모든 자원은 개별 리소스에 맞는 엔드포인트를 사용해야한다.
API 엔드포인트란 API 호출(요청)이 수행되는 곳이다. 내가 기태에게 '잘 지냈어, 기태야?' 라고 말을 건다면, '기태야?'
라는 부분을 통해서 기태를 호출하는 것이다. 즉 이 인사의 엔드포인트는 '기태'가 될 것이다.
API 서버에 데이터를 요청한다면, 이 데이터는 여기에 있다 => 이렇게 같은 서버 주소에 대해서도 다른 요청,
다른 리소스에 접근할 수 있도록 해주는 URI를 말한다.
2단계 : HTTP 메서드 원칙 준수
HTTP 요청 메서드란 클라이언트가 서버에게 요청의 종류와 목적(행위)를 알리는 방법이다. API를 사용하게 되는 경우가 주로 CRUD에 관련된 것이기 때문에, 이에 해당하는 주요 5가지 메서드를 사용한다. 각 목적에 맞는 정확한 메서드의 사용이 중요하다.
HTTP 메서드를 사용할 때 몇가지 규칙에도 유의해야 한다.
- GET 메서드 같은 경우는 서버의 데이터를 변화시키지 않는 요청에 사용해야 한다.
- POST 메서드는 요청마다 새로운 리소스를 생성하고,
- PUT 메서드는 요청마다 같은 리소스를 반환합니다. 이렇게 매 요청마다 같은 리소스를 반환하는 특징을 멱등(idempotent)
하다고 합니다. 그렇기 때문에 멱등성을 가지는 메서드 PUT과 그렇지 않은 메서드POST는 구분하여 사용한다. - PUT 메서드와 PATCH 메서드도 구분하여 사용해야 합니다. PUT은 교체, PATCH는 수정의 용도로 사용한다.
로이 필딩은 3단계까지 적용되지 못한 API는 REST API가 아닌 HTTP API 라고 불러야 한다고 주장하지만,
2단계까지만이라도 잘 적용된 API 디자인도 바람직한 REST API 디자인이라고 볼 수 있다.
3단계 : HTTP 사용
HATEOAS(Hypermedia As The Engine Of Application State) - 하이퍼 미디어 컨트롤
2단계와 동일하지만, 응답에 리소스의 URI 를 포함한 링크 요소를 삽입해서 작성해야 한다. 이 때 링크 요소에는,
응답을 받은 뒤 할 수 있는 다양한 액션을 위한 많은 하이퍼미디어 컨트롤들을 포함하고 있다.
응답 내에 링크를 넣어서, 응답을 받은 후 새 기능에 접근할 수 있도록 하는 것이 3단계의 핵심이다!
'WEB' 카테고리의 다른 글
웹 표준 & 접근성 알아보기! (0) | 2023.04.27 |
---|---|
[UI/UX] 사용자 인터페이스(UI) / 사용자 경험(UX) 이해하기! (0) | 2023.04.13 |
[NetWork/HTTP] - 페이로드(Payload)란? (0) | 2023.03.30 |
💡 HTTP 간단정리! (0) | 2023.03.29 |