REST API에서 REST란 "Representational State Transfer"의 약자이다.HTTP)의 장점을 최대한 활용할 수 있는 아키텍처로 정의되었다.REST API는 웹에서 사용되는 데이터나 자원(Resource)을 HTTP URI로 표현하고,HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식을 사용한다.REST API는 왜 필요할까?REST API를 이해하기 쉽게 설명하자면, 식당에서 손님이 메뉴판을 보고 주문하는 것과 비슷하다.
따라서 HTTP 프로토콜을 기반으로 요청과 응답에 따라 리소스를 주고받기 위해서는 알아보기 쉽고 잘 작성된 메뉴판이 필요한데, 이 역할을 API가 수행해야 하므로 모두가 잘 알아볼 수 있도록 작성하는 것이 중요하다.
➡ 그렇다면 어떻게 해야 적절한 REST API를 디자인할 수 있을까?
REST API를 디자인하는 방법REST API를 작성할 때는 몇 가지 지켜야 할 규칙들이 있다.REST API를 잘 적용하기 위한 4단계 모델을 만들었다.REST 성숙도 모델을 구조화하면 다음과 같다.
REST API라고 부를 수 있다고 주장했지만 실제로 엄밀하게 3단계까지 지키기는 어렵다.HTTP API 라고도 부른다.API를 REST API라고 할 수는 없으며, 0단계는 REST API를 작성하기 위한 기본 단계이다."어벤져스-엔드게임"이라는 영화의 예매 가능한 시간을 확인하고, 어떤 특정 시간에 예매하는 상황을 예로 들어 보자.
REST API의 출발점이다.Resource)와의 통신을 위해 URI로 표현해야 한다./appointment 엔드포인트로 처리하였지만,REST API로서의 특징을 충족시키지 못하게 된다.
"어벤져스-엔드게임"이라는 영화의 예매 가능한 시간대이다./movie/어벤져스-엔드게임이라는 엔드포인트를 사용한 것을 볼 수 있다.slots라는 리소스의 123이라는 id를 가진 리소스가 변경되기 때문에, 하단의 특정 시간에 예매이라는 요청에서는 /slots/123으로 실제 변경되는 리소스를 엔드포인트로 사용하였다.김철수가 어벤져스-엔드게임을 9시에 예매를 진행하였으나 해당 시간의 좌석이 모두 매진되어 예매가 불가능하다고 가정할 때, 아래와 같이 리소스 사용에 대한 실패 여부를 포함한 응답을 받아야 한다.
CRUD(Create, Read, Update, Delete)에 맞는 HTTP 메서드를 사용하는 것이 중요하다.READ)와 예매 생성(CREATE)은 각각 GET과 POST 메서드를 사용해야 한다.GET 메서드는 query parameter를 사용하여 요청하고, POST 메서드는 요청 후 생성된 리소스를 응답으로 보내주며, 이때 응답 코드는 201 Created이어야 한다.Location 헤더를 통해 클라이언트가 관련 리소스를 확인할 수 있도록 해야 REST 성숙도 모델 2단계를 충족하는 것이다.
GET메서드는 서버의 데이터를 변화시키지 않는 요청에 사용해야 한다.
POST메서드는 요청마다 새로운 리소스를 생성하고 ,PUT메서드는 요청마다 같은 리소스를 반환한다. ( 매 요청마다 같은 리소스를 반환하는 특징을 멱등(idempotent)하다고 한다.)
- 멱등성을 가지는
PUT과 그렇지 않은DELETE메서드는 구분하여 사용해야 한다.
PUT은 교체,PATCH는 수정의 용도로 사용하기 때문에 서로 구분하여 사용해야 한다.
- REST 성숙도 모델의 2단계까지 적용하면 대체적으로 잘 작성된
API라 할 수 있으며,
모범적인 API 디자인조차도 REST 성숙도 모델의 3단계까지 적용한 경우는 드물다.
따라서 3단계까지 무조건적으로 모두 적용해야 하는 것은 아니다.
URI를 포함한 링크 요소를 삽입하여 작성해야 한다.
Open API 형태로 제공하고 있으며,API를 확인할 수 있다.API는 "Open"이라는 키워드가 붙어있으며 누구에게나 열려있으나,API마다 이용 수칙이 있고 제한사항(가격, 정보의 제한 등)이 있을 수 있다.Open API를 간단하게 경험해 볼 수 있는 대표적인 페이지로는Open Weather Map이라는 웹 사이트에서 제공하는 날씨 API가 있다.API는 분당 60번, 달마다 100번 호출이 가능하며, 데이터는 JSON 형태로 응답한다.API Key는 API를 사용하기 위해 필요한 인증 토큰으로, 서버가 클라이언트를 인증하고 권한을 부여하기 위해 사용된다.API Key를 발급하여 인증된 클라이언트에게만 데이터를 제공하고 있다. ( 가끔 API key가 필요하지 않은 경우도 있다. )API Key를 제공하여 자원에 접근할 수 있는 권한을 부여하고,API Key를 같이 전달하여 원하는 응답을 받을 수 있다.
와 내용 정리부터 직접 만드신 예시까지! 잘 읽고갑니다 👍