지식 창고/CS 전공 지식

[ 감귤'S 기초 상식 03] REST API 란?

감귤밭호지차 2023. 3. 29. 11:10

프론트 엔드의 단골 면접 질문 중 REST API 란 무엇인가를 묻는 질문이 많이 나온다고 들었습니다. API 에 대해서는 " 서버가 클라이언트가 정확한 요청할 수 있게 미리 만들어서 주는 일종의 메뉴판 " 같은 존재임을 알고 계실 겁니다. 그렇다면 REST이 붙은 REST API란 무엇인지 한번 알아보도록 하겠습니다. 

 

 

 

 

∴ API 란,,,, 간단하게 메뉴판 

 

HTTP 프로토콜을 기반으로 클라이언트와 서버가 서로 요청과 응답을 주고 받을 때, 정확하고 유효성 있는  요청과 응답을 받을 수 있기 위해 알아보기 쉽고 잘 작성된 메뉴판의 역할을 수행합니다. 

 

만약 API가 없었다면, DB나 서버가 가지고 있지 않은 데이터를 클라이언트는 잘 모르기 때문에 무작위로 요청을 할 수 있어 이를 방지하기 위해 서버가 미리 API를 만들어 제공합니다. 클라이언트는 이를 보고 알맞게 요청을 하면 되는 것 입니다. 

 

 

 

REST API 란 무엇일까요??

 

Rest API = Representational State Transfer API

" 웹(http) 의 장점을 최대한 활용할 수 있는 아키텍처 " 

" 웹에서 사용되는 데이터나 리소스를 HTTP URI로 표현하고 HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식 " 

 

효율적이고 안정적이며 확장 가능한 분산 시스템을 가져올 수 있는 소프트웨어 아키텍쳐 디자인 제약의 모음으로 이를 준수 했을 경우, 그 시스템은 RESTful 하다고 합니다.

 

 

 

 

 

 

∴ REST API 디자인 :  4단계 성숙도 모델 ( RMM )

 

 

1. Service Architecture : REST

 

(1) REST 성숙도 모델 - 0 단계

 

단순히 HTTP 프로토콜을 사용 및 준수하는 단계 

** REST API 라고 할 수는 없지만 시작을 위한 기본 단계라고 생가하시면 됩니다. 

** 엔드포인트는 요청과 응답 동일

 

(2) REST 성숙도 모델 - 1 단계

 

모든 자원은 개별 리소스에 맞는 엔드 포인트를 사용해야 하며, 요청하고 받는 자원에 대한 정보를 응답으로 전달해야 한다는 것이 1 단계의 핵심입니다.  요청하는 리소스에 따라 엔드포인트를 구분해서 사용해야 하기 때문에  동사, HTTP 메서드, 혹은 어떤 행위에 대한 단어 사용은 지양하고 리소스에 집중하여 명사 형태의 단어로 작성하는 것이 바람직합니다. 

** REST API는 웹에서 사용하는 모든 자원을 HTTP URI로 표현한다고 했기 때문..

 

(3) REST 성숙도 모델 - 2 단계

 

CRUD에 맞게 적절한 HTTP 메서드를 사용하는 것이 중점입니다. 0/1단계에서는 모든 요청을  POST 메서드를 사용하는데 이는 REST API 성숙도 모델에 따르면 적합한 메서드 사용이 아닙니다. 

** GET : 

 

1. HTTP request methods

# GET         :  조회 (Read)  // only retrieve data - data를 받기만
# POST      :  추가 (Creat) // submits an entity to the specified resource - 특정 리소스에 엔티티 제출 
# PUT         :  갱신 (Update) // replaces all current representations of the target resource with the request payload 
                                            // 현재 리소스를 요청 payload로 바꿈 
# PATCH     : 갱신(Update) //  applies partial modifications to a resouce - 부분 수정 사항을 리소스에 적용
# DELETE   :  삭제(Delete)  //  delte
# HEAD  :  ask for a response identical to a GET request , without the response body
                 //  GET 요청과 동일한 응답 요구하지만 응답 body 포함 X 
# OPTIONS  :  describe the communication options for the target resouce
                         // 대상 리소스의 통신 옵션을 묘사/ 설명
# CONNECT : establishes a tunnel to the server identified by the target resource. 
                       // 대상 리로스로 식별된 서버로의 경로/터널을 설립
# TRACE : performs a message loop-back test along the path to the target resource 
                   // 대상 리소스로의 경로를 따라 message loop-back test 를 수행합니다.


 

 

(4) REST 성숙도 모델 - 3 단계

 

HATEOAS ( Hypermedia As The Engine Of Application State ) 라는 하이퍼미디어 컨트롤을 적용하는 3단계는 요청은 2단계와 동일하지만 응답에 URI가 포함된 새로운 링크를 넣어 새로운 기능에 접근할 수 있게 하는 것이 핵심 포인트 입니다. 

예를 들어, 치과 예약 가능 여부 확인이 요청으로 들어왔을 때, 예약 기능을 링크로 가진 응답을 보냄으로써 받는 쪽에서 예약 기능을 이어서 진행 할 수 있게 해주는 역할을 합니다. 

 

 

 

 

Q. 근냥 링크만 응답에 넣어서 보내면 될 것 같은데 왜 2단계 까지만 준수하는 시스템이 많은 건가?/ 간단한게 아닌가? 

너무 많은 인터넷 내에서의 교류가 일어나고 있기 때문에 개발  시 백엔드 개발자가 모든 조건과 상태를 염두해서 링크를 일일히 넣는 것은 힘들기 때문이라고 함. 

 

 

 

 

 

∴ Open API

정부에서 제공하는 공공데이터가 있는데, 이는 쉽게 접근할 수 있도록 Open API 형태로 제공하고 있습니다. 물론 Open 이라고 이 데이터를 무제한으로 마구 이요할 수 있다는 의미는 아니고 각  API 마다 정해진 이용 수칙이 있고, 그 이용 수칙에 따라 제한 사항이 있을 수 있으니 주의해야 합니다. 

1. 정부 공공 데이터 포털
2. MS REST API 가이드라인
3. Google API 가이드라인

 

Open API를 사용하기 위해서는 API Key가 필요합니다. 서버가 익명의 클라이언트에게 조건 없이 API를 제공할 필요는 없기 때문에 접근할 수 있는 권한을 API Key 형태로 제공하고 데이터를 요청할 때, Key를 같이 전달해야 원하는 응답을 받을 수 있습니다. 

 

 

PUT VS PATCH 

* 전체 변경 vs 일부 변경 

* 멱등성 

- 여러번 요청해도 같은 응답을 받는가?

# 상품 전체를 바꾸는 경우 PUT

# 상품 일부를 변경하는 경우 PATCH