REST API, REST 성숙도 모델

mingyu Lim·2023년 1월 31일
0

react

목록 보기
5/5

REST API

웹에서 사용되는 데이터나 자원(Resource)을 HTTP URI로 표현하고, HTTP프로토콜을 통해 요청과 응답을 정의하는 방식

REST API를 디자인 하는 방법 (Richardson의 성숙도 모델)

단계내용
0단계HTTP 사용
1단계개발 리소스와의 통신 준수
2단계HTTP 메소드 원칙 준수
3단계HATEOAS 원칙 준수

실제로 엄밀하게 3단계까지 지키기 어렵기 때문에 2단계까지만 적용해도 "좋은 API디자인" 이라고 하고 이런 경우를 HTTP API라고 부른다.

REST 성숙도 모델

0단계

단순히 HTTP 프로토콜을 사용하기만 해도 된다. 물론 이 경우, 해당 API를 REST API라고 할 수 없으며, 0 단계는 REST API를 작성하기 위한 기본 단계이다.

(허준이라는 이름의 의사의 예약 가능한 시간을 확인하고, 특정 시간에 예약하는 상황의 예시)

1단계 - 개별 리소스 준수

  • 개별 리소스와의 통신을 준수해야한다.
  • 모든 자원은 개별 리소스에 맞는 엔드포인트를 사용해야하며 요청하고 받는 자원에 대한 정보를 응답으로 전달해야 한다는 것이 1단계의 핵심이다.

  • 시간 확인이라는 요청의 응답으로 받게 되는 자원은 허준이라는 의사의 예약 가능한 시간대이다. 그래서 요청 시 /doctors/허준이라는 엔드포인트를 사용한 것을 볼 수가 있다.
  • 특정 시간에 예약하게 되면, 실제 slots/123으로 실제 변경되는 리소스를 엔드포인트로 사용하였다.

예시와 같이, 어떤 리소스를 변화시키는지와 어떤 응답이 제공되는지에 따라 각기 다른 엔드포인트를 사용하기 때문에 적절한 엔드포인트를 작성하는 것이 중요하다. 또, 엔드포인트 작성 시에는 동사, HTTP메서드, 혹은 어떤 행위에 대한 단어 사용은 지양하고, 자원(Resource) 에 집중해 명사 형태의 단어로 작성하는 것이 바람직한 방법이다.

또한, 아래의 예시 처럼 리소스 사용에 대한 성공/ 실패 여부 또한 반환을 해야한다.

앤드포인트란 (Endpoint)
HTTP메소드의 POST,GET 같은 같은 URL들에 대해서도 다른 요청을 하게끔 구별하게 해주는 항목이다.
즉, Endpoint 는 API가 서버에서 자원(Resource)에 접근할 수 있도록 하는 URL이다.

2단계 - CRUD(Create, Read, Update, Delete)의 중점

HTTP메소드설명
GET조회(Read)
POST추가(Create)
PUT(교체), PATCH(수정)갱신(Update)
DELETE삭제(DELETE)

CRUD에 맞게 적절한 HTTP메서드를 사용하는 것에 중점을 둡니다.
0,1단계의 예시는 모두 POST메서드를 사용하고 있다. 이는 CRUD에 따른 적합한 메서드를 사용한 것이 아니다.

예시를 예를 들면
1. 예약 가능한 시간을 확인하는 것은 조회(Read)하는 행위
2. 특정 시간에 예약한다는 것은 특정시간에 예약을 생성(CREATE)하는 행위

  1. 예약 가능한 시간을 확인하는 것은 조회(Read)하는 행위
    서로 의미 하는 것이 있기 때문에 조회(Read)하기 위해선 GET메서드를 사용하여 요청을 보내고 이때 GET메서드는 body를 가지지 않아 query parameter를 사용하여 필요한 리소스를 전달한다.

  2. 특정 시간에 예약한다는 것은 특정시간에 예약을 생성(CREATE)하는 행위
    예약을 생성하기 위해서는 POST메서드를 사용하여 요청을 보내야 하고, POST요청에 대한 응답이 어떻게 반환되는지가 중요하다. 이 경우 응답은 새롭게 생성된 리소스를 보내주기 때문에, 응답 코드는 201 Created로 명확하게 작성해야 하며, 관련 리소스를 클라이언트가 Location헤더에 작성된 URI를 통해 확인할 수 있도록 하면 완벽하게 REST 성숙도 모델의 2단계를 충족한 것이라고 볼 수가 있다.

HTTP 메서드를 사용할 때 유의 해야 할 몇가지 규칙

  • GET 메서드 같은 경우는 서버의 데이터를 변화시키지 않는 요청에 사용해야 합니다.
  • POST 메서드는 요청마다 새로운 리소스를 생성하고 PUT메서드는 요청마다 같은 리소스를 반환합니다. 이렇게 매 요청마다 같은 리소스를 반환하는 특징을 멱등(idempotent)하다고 합니다. 그렇기 때문에 멱등성을 가지는 메서드 PUT과 그렇지 않은 메서드POST는 구분하여 사용해야 합니다.
  • PUT 메서드와 PATCH 메서드도 구분하여 사용해야 합니다. PUT은 교체, PATCH는 수정의 용도로 사용합니다.

3단계

HATEOAS(Hypermedia As The Engine Of Application State), 하이퍼미디어 컨트롤을 적용한다.
3단계의 요청은 2단계와 동일하지만, 응답에는 리소스의 URI를 포함한 링크 요소를 삽입하여 작성해야한다.

위의 예시와 같이 허준이라는 의사의 예약 가능 시간을 확인한 후, 그 시간대에 예약을 할 수 있는 링크를 삽입하거나, 특정 시간에 예약을 완료하고 나서는 그 예약을 다시 확인할 수 있도록 링크를 작성해 넣는 것 즉,
응답 내에 새로운 링크를 넣어 새로운 기능에 접근할 수 있도록 하는 것이 3단계의 핵심 포인트이다.

Open API

정부에서 제공하는 공공 데이터, 쉽게 접근할 수 있도록 정부는 Open API의 형태로 공공데이터를 제공하고 있다. (공공데이터)

  • 누구에게나 열려있는 API 그렇지만 "무제한으로 이용할 수 있다"라는 의미가 아니다.
  • API마다 정해진 이용 수칙이 있고, 그 이용 수칙에 따라 제한사항들이 있을 수가 있다.

예시

  • Open Weather Map(날씨 API)
    제한적이나마 무료로 날씨 API를 사용할 수 있고, JSON 형태로 응답을 한다.

API Key

  • API를 사용하기 위해서 API Key가 필요하다. 서버를 운용하는 데에 비용이 발생하기 떄문에 서버 입장에서는 조건이 없이 클라이언트에게 데이터를 제공할 의무가 없다.
  • API Key가 필요한 경우에는 로그인한 이용자에게 자원에 접근할 수 있는 API Key를 제공하고 데이터를 요청할 때 API Key를 같이 전달해야 원하는 응답을 받을 수가 있다.

0개의 댓글

관련 채용 정보