REST API에서 REST는 "Representational State Transfer"의 약자로, 애플리케이션 개발의 아키텍처 중 하나이다.
📌 아키텍처 : 애플리케이션을 설계, 제작하는데 사용하는 패턴과 기술의 총칭
우선 REST의 방식은 다음과 같다.
웹 애플리케이션 상에 존재하는 모든 리소스에 대해 고유의 URI를 부여한다.
HTTP method를 이용해 리소르에 대해 CRUD 명령을 적용한다.
즉, REST란 URI가 부여된 리소스의 상태를 응답(JSON이나 XML로 나타남)으로 전송한다는 의미라고 해석할 수 있다.
이런 REST 방식을 고려하면 만든 API를 REST API라고 부르는 것이다.
최근 OpenAPI, 마이크로 서비스 등을 제공하는 업체 대부분은 REST API를 제공한다.
📌 마이크로 서비스 : 하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처
REST API를 작성할 때는 지켜야 하는 몇가지 규칙들이 있다. 이를 4단계의 모델로 만든 것이다 리차드슨의 성숙도 모델(RMM)이다.
0단계는 단순히 HTTP 프로토콜을 사용하기만 하면 0단계라고 할 수 있다. 하지만 0단계의 API를 REST API라고 할 수는 없고 REST API를 작성하기 위한 기본 단계라고 봐야한다.
밑의 예시가 리소스 URI,HTTP 메소드 등 아무것도 사용하지 않고 HTTP프로토콜 형식을 사용하기만 0단계 상태이다.
1단계에서는 개별 리소스와의 통신을 준수해야 하는 것이 조건이다. 좀 더 풀어서 이야기 해보자면, 앞서 REST에서는 리소스에 URI를 제공한다고 했었고, 모든 요청을 단일 서비스 엔드 포인트로 보내는 것이 아니라 리소스 URI를 엔드 포인트로 설정하여 각각의 리소스와 통신하는 것이다.
밑의 예시를 보면 0단계에서는 엔드포인트가 /appointment
로 모두 동일 했지만 1단계에서는 엔드포인트가/doctor/허준
과 /slots/123
으로, 접근하고자 하는 리소스의 URI를 입력한다.
❗️엔드포인트 작성 시에는 동사,HTTP 메소드, 흑은 어떤 행위에 대한 단어 사용은 지양하고, 리소스에 집중해 명사 형태의 단어로 작성해야 한다
❗️요청에 따른 응답을 줄 때 리소스 사용에 대한 성공/실패 여부를 함께 반환해야 한다.
이전 0단계와 1단게에서는 모든 요청을 POST 메서드 하나만을 사용했다.
2단계에서는 클라이언트의 요청을 CRUD에 맞게 각각의 메서드를 사용하는게 조건이다.
요청의 종류에 따라 사용되는 메소드는 다음과 같다.
메서드를 사용할 때 몇가지 규칙이 있다.
GET
메서드는 서버의 데이터를 변화시키지 않는 요청에 사용해야한다.
POST
메서드는 요청마다 새로운 데이터를 추가한다. 즉 멱등하지 않다. PUT
과 PATCH
는 같은 작업을 계속해서 반복해도 결과가 같다. 즉 멱등하다. 이 멱등성을 잘 이해하고 POST
와 PUT/PATCH
를 적절하게 사용해야한다.
PUT
메소드를 사용할 때 수정할 값만 보내고 나머지 값들을 보내지 않는다면 나머지 데이터의 값들은 null
로 수정된다. PATCH
의 경우 전달받지 못한 데이터의 값은 그대로 유지하고 전달받은 데이터의 값만 수정한다.
📌 멱등성 : 같은 작업을 반복해도 반환되는 값은 같은 특징을 의미한다.
다음은 성숙도 2단계를 적용한 예시이다.
예시는 요청의 목적에 맞게 GET
과 POST
를 적절하게 사용하였다.
이때 단순히 데이터를 조회하기만 하는 GET
은 body가 없기 때문에 필요한 리소스를 query parameter
를 사용하여 전달하였다.
POST
는 body에 추가할 데이터를 넣어주었고 요청이 성공했고, 응답에는 201 created
라는 상태 메시지를 나타내주며 Location헤더에 추가된 리소스의 URI를 넣어주어 클라이언트가 확인할 수 있도록 해주었다.
성숙도 모델의 마지막 단계인 3단계에서는 HATEOAS를 적용하는 것이다.
HATEOAS는 Hypermedia As The Engine Of Application State)의 약어로 응답에 리소스의 URI를 포함한 링크 요소를 추가하는 것이다.
위의 예시에서는 특정 날짜에 예약 가능한 시간을 GET
하자 예약이 가능한 시간의 데이터와 그 시간에 예약을 할 수 있는 링크를 보내준다.
링크로 들어가서 예약을 POST
하자 추가된 데이터의 URI를 Location헤더에 보내주고 데이터를 body에 넣어서 보내주는데 이때 에약 내역을 GET
할 수 있는 링크와 예약을 DELETE
할 수 있는 링크를 함께 보내준다.
공공데이터에 쉽게 접근할 수 있도록 정부는 Open API의 형태로 공공데이터를 제공하고 있다. Open API
포털에 접속해서 원하는 키워드를 검색하면 키워드와 관련된 API를 확인할 수 있다.
Open API는 누구에게나 열려있지만 무제한적으로 사용할 수 있는 것은 아니다. API마다 정해진 이용 수칙이 있고, 그 이용 수칙에 따라 제한사항(가격,정보 제한 등)이 있을 수 있다.
서버를 운영하는데 있어서 비용이 발생하기 때문에 운영자는 익명의 클라이언트에게 데이터를 제공할 의무는 없다.
API Key가 필요한 경우에는 로그인한 이용자에게 권한을 API Key의 형태로 제공하고, 데이터를 요청할 때 이 key를 함께 전달해야 데이터를 받을 수 있도록 한다.