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
를 같이 전달하여 원하는 응답을 받을 수 있다.
와 내용 정리부터 직접 만드신 예시까지! 잘 읽고갑니다 👍