코딩공부/T.I.L

2022-01-28 REST API

지구야 사랑해 2022. 1. 28. 10:35

REST API 란?

 

웹 애플리케이션에서는 HTTP 메서드를 이용해 서버와 통신함.

 

GET을 통해 웹 페이지나 데이터를 요청하고, POST로 새로운 글이나 데이터를 전송하거나

 

PUT 을 통해 갱신하고, DELETE로 데이터를 삭제할 수 있음.

 

이렇게 어떤 요청을 보내고 받느냐에 따라 메서드의 사용이 달라지는게 당연

 

REST는 Representational State Transfer의 약자로, 웹에서 사용되는 데이터나 자원을 HTTP URI로 표현하고 

 

HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식을 말함!

 

다시말해 HTTP 프로토콜 기반으로 요청과 응답을 주고받기 위한 잘 작성된 메뉴판(API)가 필요함!

 

좋은 REST API를 디자인하는 방법

 

 

엄밀히 3단계까지는 지키기 어렵기 때문에 2단계까지만 적용해도 좋은 API 디자인이고, 이런 경우 HTTP API 라고도 부름

 

REST 성숙도 모델 - 0단계

 

0단계는 단순히 HTTP 프로토콜을 사용하면 됨.

 

예를들어 병원예약을 할때 내가 원하는 시간에 예약하는 상황을 예로 들어 보면

 

HTTP 프로토콜을 사용한거임..

 

근데 REST API로는 적절하지 않음 어느 부분이며 왜 그럴까?

 

계속 POST만 써서?

 

 

REST 성숙도 모델 - 1단계

 

REST API는 웹에서 사용되는 모든 데이터나 자원을 HTTP URI로 표현한다고 했는데

 

그래서 모든 자원은 개별 리소스에 맞는 엔드포인트를 사용해야 한다는 것 

그리고 요청하고 받는 자원에 대한 정보를 응답으로 전달해야 한다는 것이 1단계에서 지켜야 하는 것

 

앞에 0단계에서는 모든 요청에서 엔드포인트로 /appointment 사용

 

하지만 1단계에서는 요청하는 리소스가 무엇인지에 따라 각기 다른 엔드포인트로 구분하여 사용해야함!

 

- /doctors/허준 은 허준이라는 의사의 예약 가능한 시간대를 자원(리소스)로 응답받고 싶은 거임. 그래서 이게 엔드포인트

 

- /slots/123 은 123이라는 id를 가진 리소스가 변경되기 때문에 엔트포인트로 사용

 

위와 같이 어떤 리소스를 변화시키는지, 혹은 어떤 응답이 제공되는지에 따라 각기 다른 엔드포인트를 사용해야 함!

 

적절한 엔드포인트 사용! : 동사, HTTP메서드, 행위에 대한 단어 사용은 지양, 리소스에 집중해 명사 형태의 단어로 작성

 

 

또한 요청에 따른 응답으로 리소스를 전달할 때에도 사용한 리소스에 대한 정보와 함께 리소스 사용에 대한

성공/실패 여부를 반환해야함

 

 

 

REST 성숙도 모델 - 2단계

 

2단계에서는 CRUD에 맞게 적절한 HTTP 메서드를 사용하는 것에 중점을 둠.

 

예약 가능한 시간을 확인한다는 것은 read이므로 GET 메서드를 사용하고

 

예약을 생성하기 위해서는 POST 메서드를 사용하는게 바람직 하다.

 

또한 응답도 새롭게 생성된 리소스를 보내주기 때문에, 응답 코드도 201 Created로 명확하게 작성하자.

 

마지막으로 관련 리소스를 클라이언트가 Location 헤더에 작성된 URI를 통해 확인할 수 있도록 하자.

 

 

메서드에도 규칙이 있는데

 

  • GET 메서드 는 서버의 데이터를 변화시키지 않는 요청에 사용해야 함
  • POST는 요청마다 새로운 리소스를 생성
  • PUT은 요청마다 같은 리소스를 반환(매 요청마다 같은 리소스를 반환하는 특징을 멱등하다고 함)

 

 

API를 작성할 때,  REST 성숙도 모델의 2단계까지 적용을 하면 HTTP API라 불러야 한다 하지만

 

3단계는 좀 오바??랄까??? 여튼..

 

 

 

REST 성숙도 모델 - 3단계

 

마지막 단계는 HATEOAX(Hypertext As The Engine Of Application State)의 약어로 표현되는 하이퍼미디어 컨트롤을 적용

 

2단계와 동일하지만, 응답에는 리소스의 URI를 포함한 링크 요소를 삽입하여 작성 함. 

 

예를 들어 위와 같이 예약시간을 확인한 후에는 그 시간대에 예약을 할 수 있는 링크를 삽입하거나..(귀찮을듯)

 

특정시간에 예약을 완료하고 나서는 응답 내에 그 예약을 다시 확인할 수 있도록 링크를 작성해 넣을 수도 있다

 

 

Reference

위의 원칙에 따라 API를 작성했다면 가장 좋겠지만, 개발자 혹은 개발 상황에 따라 위의 원칙을 꼭 지키지 못할 수도 있습니다. 다음의 다양한 API를 참고하여, 모범적인 API 디자인을 할 수 있도록 학습해 보세요.