본문 바로가기

서버지식/웹 서비스

[HTTP]Rest API

Rest API란 무엇일까?

  • 웹 애플리케이션은 HTTP 메소드를 이용해 서버와 통신한다. 대표적으로 다음과 같다.
    • GET: 웹 페이지나 데이터를 요청한다.
    • POST: 새로운 글이나 데이터를 전송한다.
    • DELETE: 저장된 글이나 데이터를 삭제한다.
  • 클라이언트와 서버가 HTTP 통신을 할 때는 어떤 요청을 보내고 받느냐에 따라 메소드의 사용이 달라진다.
  • 이 메소드의 사용은 아무런 규칙 없이 이루어지는 것이 아니고, 제대로 보내고 받을 수 있는 일종의 규약이 존재한다. 이 규약을 REST API(Represntational State Transfer API)라고 한다.
  • 즉, 웹에서 사용되는 데이터나 자원(Resource)HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식을 말한다.
  • 제대로 보내고 받을 수 있도록하는 방식을 말하는데, 그렇다면 어떻게 만들 수 있을까?

 

Richardson 성숙도 모델 (RMM)

  • 리차드슨이라는 사람이 좋은 REST API를 작성하기 위해 지켜야 할 규칙들을 구조화하여 모델을 만들었다. 이 모델을 살펴보면 어떤게 좋은 REST API인지, 어떻게 해야 만들수 있을지 감을 잡을 수 있을 것이다.


0단계: HTTP 사용

  • HTTP 프로토콜을 사용하는 것이 REST API를 만드는 것의 출발점이다. 따라서 이번 단계에서는 HTTP 프로토콜을 사용하면 된다.


1단계: Endpoint 사용

  • 개별 리소스와 통신을 준수하기 위해, 개별 리소스에 맞는 적절한 엔드포인트를 사용하여 요청과 응답을 해야한다.

※엔드포인트

: 요청을 보낸 곳응답을 해줄 리소스가 저장된 장소이다. API에서는 엔드포인트는 URL주소로 표기되어 클라이언트가 원하는 리소스의 위치를 나타내고, 요청을 보낸 위치를 나타낸다.

  • `/doctors/허준` 이라는 엔드포인트에 접근하여 date를 조회하는 메소드를 사용했고, 의사 허준에 대한 리소스에 성공적으로 접근하여 데이터를 조회했다.
  • `/slots/12` 이라는 엔드포인트에 접근하여 patrient를 추가하는 메소드를 사용했고, id가 123인 환자의 예약 정보 리소스에 성공적으로 접근하여 patient를 추가했다.
  • `doctors`, `slots`과 같은 엔드포인트 작성 시, 동사, HTTP 메소드, 혹은 어떤 행위에 대한 단어 사용은 지양하고, 리소스에 집중해 명사 형태의 단어로 작성해야 한다.

  • 또한 `reason: `과 같이 사용한 리소스에 대한 정보와 함께 리소스 사용에 대한 성공/실패 여부를 반환해 주어야 한다.

 

2단계: 적절한 HTTP 메소드 사용

  • 앞의 예시처럼 모든 요청을 POST 메소드를 사용할게 아니라, CRUD(Create, Read, Update, Delete) 용도에 맞는 HTTP 메소드를 사용해야 한다.

  • 예약 가능한 시간 확인하기 위한 요청에는 GET 메소드와 date 파라미터를 이용하여 요청한다.
  • 응답 코드도 `201 Created`로 명확하게 작성해야 하며, 이때 클라이언트가 Location 헤더에 작성된 URI를 통해 관련 리소스를 확인 할 수 있도록 해야한다.

3단계: 응답에 리소스의 URI를 포함한 링크 요소 삽입

3단계는 필수적인 것은 아니다.

  • 예약 가능한 시간 확인 요청에 대한 응답에 링크 요소를 삽입한다. 이 링크 요소에는 그 시간대에 예약을 할 수 있는 링크를 삽입하는 기능을 넣는다. 그러면 클라이언트는 더욱 편리하게 API를 이용할 수 있다.