HTTP/네트워크 - REST API

jeongjwon·2023년 3월 29일
0

SEB FE

목록 보기
29/56

📌 REST API

REST (REpresentation State Transfer) : 웹(http)의 장점을 최대한 활용할 수 있는 아키텍처
REST API : 웹에서 사용되는 자원(Resource)을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식

REST 성숙도 모델 RMM

모든 단계를 충족시 REST API
BUT, 2단계까지만 충족해도 좋은 API 디자인 = HTTP API


REST 성숙도 모델 0단계 - HTTP 사용

단순히 HTTP 프로토콜을 사용하는 것 ➡️ REST API 라고 할 수는 없고 출발점


REST 성숙도 모델 1단계 - 개별 리소스와의 통신 준수

모든 자원은 개별 리소스에 맞는 엔드포인트(Endpoint)를 사용해야하고 요청하고 받는 자원에 대한 정보를 응답으로 전달해야 한다는 것
* 엔드 포인트 : 동사, HTTP 메서드, 혹은 어떤 행위에 대한 단어 사용은 지양하고, 리소스에 집중하여 명사 형태의 단어로 작성하는 것이 바람직하다.
* 요청에 따른 응답시 사용한 리소스에 대한 정보와 함께 리소스 사용에 대한 성공/실패 여부를 반환(상태 코드 Status Codes) 해야 한다.
* 상태코드보기

ㄴ 0단계에서의 요청의 엔드포인트는 모두 /appointment 를 사용하였다.
1단계에서는 요청하는 리소스에 맞게 각기 다른 엔드포인트로 구분하여 사용하여야 한다.
따라서 예약 가능한 시간 확인의 요청에서는 '허준'의사의 예약가능한 시간대이기 때문에 /doctors/허준 으로,
특정 시간에 예약의 요청에서는 실제 '허준'의사의 각기 다른 id를 가진 slots 들로 리소스가 변경되어 /slots/123 으로 엔드포인트로 사용하였다.
요청에 대한 응답으로 리소스 사용에 대한 성공과 실패를 둘 다 나타낼 수 있다.


REST 성숙도 모델 2단계 - HTTP 메소드 원칙 준수

CRUD 에 맞게 적절한 HTTP 메서드를 사용하는 것 ➡️ 2단계까지 적용시 대체적으로 잘 작성된 API = 3단계까지 만족못한 API 를 HTTP API 라고 한다.

ㄴ 예약 가능한 시간을 확인한다는 것은 시간을 조회(READ) 하는 행위이므로 POST 보다는 GET 메서드를 사용하여 요청을 보낸다. 이때, GET 메서드는 body 를 가지지 않기 때문에 query parameter를 사용하여 필요한 리소스를 전달한다.
특정시간에 예약한다는 것은 예약을 생성(CREATE) 한다는 것이므로 POST 를 그대로 작성해야 한다.POST 요청에 대한 응답은 새롭게 생성된 리소스를 보내주기 때문에 응답코드는 명확하게 작성해야 하고, 관련 리소스를 클라이언트가 Location 헤더에 작성된 URI를 통해 확인할 수 있도록 한다.

* HTTP 메서드 규칙

  • GET : 서버의 데이터를 변화시키지 않는 요청에 사용해야 한다. body 를 가지지 않아 query parameter로 필요한 리소스를 전달한다.
  • POST : 요청마다 새로운 리소스를 생성한다.
  • PUT : 요청마다 같은 리소스를 반환한다.(=멱등 idempotent), 교체
  • PATCH : 수정

REST 성숙도 모델 3단계 - HATEOAS 준수

HATEOAS (HYPERMEDIA As The Engine Of Application State) 하이퍼미디어 컨트롤을 적용시키는 것. 2단계에서 요청은 동일하나, 응답에서 리소스의 URL를 포함한 링크 요소를 삽입하여 작성해 새로운 기능에 접근할 수 있도록 하는 것이 핵심 포인트이다. ➡️ 조금 더 쉽고, 효율적으로 리소스와 기능에 접근할 수 있게 하는 요소가 될 수 있다.

ㄴ 예약 가능한 시간 확인의 응답에서는 가능한 시간대와 더불어 예약할 수 있는 링크를 삽입하거나, 특정 시간 예약의 요청의 응답에서는 그 예약을 확인하거나 취소할 수 있는 링크를 삽입하여 새로운 기능에 접근할 수 있도록 했다.


OPEN API

공공데이터에 쉽게 접근할 수 있도록 정부가 제공하는 공공데이터
오픈소스처럼 누구에게나 열려있는 API이지만, 무제한으로 이용할 수 있는 것은 아니다.
API마다 정해진 이용수칙을 따라야한다.

API Key

서버를 운용시 아무에게나 리스소를 제공할 수는 없기 때문에 리소스에 접근권한을 가질 수 있는 API Key를 서버에서 이용자에게 제공하고, 이용자는 데이터 요청시 API Key를 전달함으로써 서버는 그 응답을 온전히 줄 수 있다.

0개의 댓글