REST API란 무엇인가??(feat 캐싱, GET, POST)

적자생존·2022년 7월 11일
1

Study

목록 보기
2/10

1. REST API란?

가. Rest란?

REST란 REpresentational State Transfer의 약자로 웹 어플리케이션에서 상호작용하는데 사용되는 웹 아키텍쳐 모델이며 자원(resorce)을 주고 받는 웹 상에서의 통신 체계에 있어서 범용적인 스타일을 규정한 아키텍쳐이다.

나. API란?

Application Programming Interface의 약자로 기존에 있는 응용프로그램을 통해서 데이터를 제공받거나 기능을 사용하고자 할 때 사용하는 인터페이스 및 규격을 말하며 REST API란 REST 원칙을 적용하여 서비스 API를 설계한 것이다.

2. REST의 특징

가. 균등한 인터페이스(Uniform Interface)

HTTP의 표준만 따른다면 어떠한 기술이던지 접목하여 사용할 수 있기 때문에 플랫폼이나 언어에 따른 제약이 없음.

나. 무상태성(Stateless)

서버는 클라이언트의 상황을 고려하지 않고 API 요청에 대해서만 처리하면 되기 때문에 구현이 간결해진다. HTTP는 무상태성이니까 REST 역시 무상태성을 가진다.

다. 캐시 처리 가능(Cacheable)

웹 표준 HTTP를 그대로 사용하기 때문에 캐싱 기능을 적용할 수 있다. GET메소드를 Last-Modified 값과 함께 보낼 경우 컨텐츠의 변화가 없을 때 캐시된 값을 사용하기 때문에 API 서버에 요청을 발생시키지 않아 부담이 덜하다.

캐싱이란?

사용자(client)가 웹 사이트(server)에 접속할 때, 정적 컨텐츠(이미지, JS, CSS 등)를 특정 위치(client, network 등)에 저장하여, 웹 사이트 서버에 해당 컨텐츠를 매번 요청하여 받는것이 아니라, 특정 위치에서 불러옴으로써 사이트 응답시간을 줄이고, 서버 트래픽 감소 효과를 볼 수 있는 것

라. 자체 표현성(Self-Descriptiveness)

REST API의 자원명시 규칙 및 메소드는 그 자체로 의미를 지니기 때문에 어떠한 요청에 잇어서 그 요청 자체로 어떤 것을 표현하는지 알아보기 쉽다.

마. 클라이언트-서버 구조(Client-Server Architecture)

REST 서버가 API를 제공하는 방식이기 때문에 클라이언트에서 처리하는 부분과 독립적으로 동작한다. 따라서 서로간의 의존성이 줄어들고 클라이언트와 서버를 최대한 독립적으로 개발할 수 있도록 도와준다.

바. 계층화 구조(Layered System)

클라이언트는 REST API Server만 호출한다.
REST Server는 보안/로드 밸런싱/암호화 등 다중 계층으로 구성할 수 있고 Proxy 및 게이트웨이 등의 중간 매체를 사용할 수 있다.

3. REST API의 규칙

가. URI는 정보의 자원(Resource)을 표현해야 한다.

Resource 원형은 객체 인스턴스나 DB의 레코드와 유사한 개념인 document 서버에서 관리하는 디렉터리라는 리소스인 collection으로 표현할 수 있다. + 클라이언트에서 관리하는 store도 있다.

1) resource는 동사보다 명사를, 대문자보다 소문자를 사용한다.

2) resource의 document는 단순명사로 표현한다.

3) resource의 collection은 복수 명사를 사용한다.

4) resource의 store는 복수 명사를 사용해야 한다.

ex)
/locations/seoul/schools/3
에서 locations는 collection을 seoul은 document이다.

나. resource에 대한 행위는 HTTP의 Method로 표현해야 한다.

1) GET은 리소스를 조회한다.(읽기)

2) POST는 리소스를 생성 한다.(생성)

3) PUT은 리소스를 업데이트 한다.(수정)

4) DELETE는 리소스를 삭제 한다.(삭제)

4. 잘못된 REST 사용

가. GET/POST의 부적절한 사용

1) GET방식

대표적인 특징으로 URL에 Parameter를 전송한다.
ex) http://www.xxx.com/xxapi?param1=value&...

URL뒤에 ?를 사용하여 Parameter를 작성하게 되고 &을 붙혀서 여러개의 Parameter를 구분하게 됨

GET방식으로 데이터를 전송하게 되며 body영역을 사용하지 않는다. 또한 URL에 데이터를 실어 보내기 때문에 대용량 데이터 전송을 하기에는 제한이 있음

2) POST방식

GET방식과 달리 body 영역에 데이터를 실어 보낸다는 점. body에 데이터를 실어 보내기 때문에 데이터 전송양에 길이 제한이 없기 때문에 대용량 전송에 좋다.

POST 방식은 body영역에 Header Content-Type를 명시해야 한다.
GET방식과 달리 데이터를 URL를 통해 볼 수 없어 보안에 좀 더 안전하다.

3) GET 과 POST의 차이

GET과 POST는 각각 idempotent/ non-idempotent 즉 멱등성이 차이가 난다.
GET은 연산을 여러번 적용해도 같은 결과가 나온다는 멱등성을 가지고 POST는 그렇지 않다.

즉 GET방식을 이용해서는 여러번 적용하더라도 결과값이 바뀌지 않는 것을 개발하고 POST 방식을 이용해서는 결과 값이 바뀌는 유형의 개발을 해야 한다.

또한 GET은 POST와 달리 캐싱이 가능하기 때문에 속도 면에서 좀 더 빠르다.

이에 대한 자세한 포스트는 따로 해야겠다.

나. 자체표현적이지 않은 REST

다. HTTP 응답 코드 미사용

profile
적는 자만이 생존한다.

0개의 댓글