Chapter1. REST API
REST API 란?
- REST: “Representational State Transfer”의 약자
- 웹에서 사용되는 데이터나 자원(Resource)을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식
➡️ HTTP 프로토콜을 통해 요청과 응답에 따라 리소스를 주고받기 위해서는 알아보기 쉽고 잘 작성된 메뉴판이 필요한데, 이 역할을 API가 하므로 잘 알아볼 수 있도록 작성하는 것이 중요!
REST API를 디자인하는 방법
- REST API를 작성할 때는 몇 가지 지켜야 할 규칙이 있음.
로이 필딩의 REST 방법론을 실용적으로 적용하기 위해 리차드슨이 REST API를 잘 적용하기 위한 4단계 모델을 만듬.
REST 성숙도 모델

- 총 4단계(0~3단계)로 나누어짐
- 실제로 3단계까지 지키기 어렵기 때문에 2단계까지만 적용해도 좋은 API 디자인이라고 볼 수 있음. 이런 경우를 HTTP API 라고도 부름
REST 성숙도 모델 - 0단계
- 단순히 HTTP 프로토콜을 사용하기만 해도 됨
- HTTP 프로토콜을 사용하는 것만으로는 REST API라고 할 수는 없음
- 0단계는 REST API를 작성하기 위한 기본 단계

REST 성숙도 모델 - 1단계
- 개별 리소스와의 통신을 준수해야 함
- 모든 자원은 개별 리소스에 맞는 엔드포인트(Endpoint)를 사용해야하며,
요청하고 받는 자원에 대한 정보를 응답으로 전달해야 함
- 앞의 0단계에서는 요청에서의 엔드포인트로 모두
/appointment를 사용
- But, 1단계에서는 요청하는 리소스가 무엇인지에 따라 다른 엔드포인트로 구분하여 사용

- 위의 예시에서 예약 가능한 시간 확인이라는 요청의 응답으로 받게 되는 자원(리소스)은 허준이라는 의사의 예약 가능한 시간대임
그래서 요청 시 /doctors/허준 이라는 엔드포인트를 사용.
- 특정 시간에 예약하면, 실제 slots라는 리소스의 123이라는 id를 가진 리소스가 변경되기 때문에,
/slots/123 을 엔드포인트로 사용
- 엔드포인트 작성 시에는 리소스에 집중해 명사 형태의 단어로 작성하는 것이 좋음
- 또한 요청에 따른 응답으로 리소스를 전달할 때에도 사용한 리소스에 대한 정보와 함께 리소스 사용에 대한 성공/실패 여부를 반환해야함
(밑의 예시: 김코딩이 9시에 예약을 했으나 실패)

REST 성숙도 모델 - 2단계
-
1단계 예시에서는 모든 요청을 CRUD와 상관없이 POST 메서드를 사용하고 있음
-
But, 2단계에서는 CRUD에 맞게 적절한 HTTP 메서드를 사용해야 함

-
위의 예시로 예를 들면
- 예약 가능한 시간 확인
- 예약 가능한 시간을 조회(
READ)하는 행위 → GET 메서드를 사용
query parameter를 사용하여 필요한 리소스를 전달
→/doctors/허준/slots?date=2022-08-10
- 특정 시간에 예약
- 특정 시간에 예약을 생성(
CREATE)하는 행위 →POST 메서드를 사용
- 응답은 새롭게 생성된 리소스를 보내주기 때문에 응답 코드는
201 Created 로 명확하게 작성
- 관련 리소스를 클라이언트가
Location 헤더에 작성된 URI를 통해 확인할 수 있도록 작성
-
HTTP 메서드를 사용할 때 지켜야 할 규칙
GET : 서버의 데이터를 변화시키지 않는 요청에 사용해야 함
POST: 요청마다 새로운 리소스를 생성하고, PUT 메서드는 같은 리소스를 반환.
이렇게 요청마다 같은 리소스를 반환하는 특징을 멱등(idempotent)하다고 함. → 멱등성을 가지는 PUT과 그렇지 않은 POST는 구분하여 사용!
PUT 과 PATCH도 구분하여 사용해야 함
-
3단계까지 적용한 경우는 드뭄. 2단계까지만 해도 충분!
REST 성숙도 모델 - 3단계
- HATEOAS(Hypertext As The Engine Of Application State)라고 불림
- 하이퍼미디어 컨트롤을 적용
- 3단계의 요청은 2단계와 동일. But, 응답에는 리소스의 URI를 포함한 링크 요소를 삽입하여 작성해야 함

- 위의 예시로 예를 들면
- 예약 가능한 시간 확인
- 허준의사의 예약 가능 시간을 확인한 후, 그 시간대에 예약을 할 수 있는 링크를 삽입
- 특정 시간에 예약
→ 이렇게 응답 내에 새로운 링크를 넣어 새로운 기능에 접근할 수 있도록 하는 것이 3단계의 핵심 포인트!
Open API와 API Key
-
Open API
-
누구에게나 열려있는 API이지만 무제한으로 사용가능한 것은 X
-
API마다 정해진 이용 수칙이 있으며, 제한사항(가격, 정보 제한)이 있을 수 있음
-
정부에서는 Open API의 형태로 공공데이터를 제공
-
날씨 API를 제공하는 대표적인 페이지
-
API Key
- API를 이용하기 위해서 필요
- 서버의 문을 여는 열쇠
- 서버를 운용에 비용이 발생하므로 아무 조건 없이 클라이언트에게 데이터를 제공할 의무 없음
- 데이터를 요청할 때 API key를 같이 전달해야 원하는 응답을 받을 수 있음
Chapter2 - Postman
-
브라우저는 서버에 HTTP 요청을 보낼 수 있는 훌륭한 도구지만, 주로 웹 페이지를 받아오는 GET 요청에 사용함.
-
테스트를 위해 GET 요청이 아닌 다른 요청을 보내려면, 개발자 도구의 콘솔 창에서 Web API fetch를 사용해야함
-
테스트를 위해 매번 코드를 작성하는 것은 비효율적.
-
그래서 매번 코드를 작성하는 대신 HTTP 요청을 테스트할 수 있는 다양한 API 테스트 도구들이 있음. 이 중 하나가 Postman (GUI)
-
클라이언트 입장에서 서버 API를 테스트하거나, API를 만드는 과정에서 매우 유용
HTTP API 테스트 도구 (CLI)
- curl (대부분의 리눅스 환경에 내장됨)
- wuzz
HTTP API 테스트 도구 (GUI)
Postman 사용하는 방법
만들어져 있는 API 서버로 예시를 들어보겠음
- HTTP로 소통하기 위해서는 API 서버의 endpoint가 URL로 해야함
- GET 메서드로 kimcoding이 작성한 모든 메시지를 조회하는 법 (http://3.36.72.17:3000/kimcoding/messages) 입력

-
POST 메서드로 kimcoding이 새로운 message를 작성하는 법


- Postman으로 날씨API 받아오는 화면
