REST API 탄생 배경
2000년에 로이 필딩(Roy Fielding)은 UC 어바인에서 “Architectural Styles and the Design of Network-based Software Architectures”라는 제목의 2000년 박사 학위 논문에 REST를 정의하였다. 그는 1996년부터 1999년까지 HTTP 1.0의 기존 디자인에 기반을 둔 HTTP 1.1와 병행하여 REST 구조의 스타일을 개발하였다.
그래서 REST API가 뭔데?
나 또한 SSAFY에서 웹 개발 프로젝트를 시작하면서 REST API 라는 용어가 참 낯설고 정확하게 이해를 못했다. 결국, REST API를 한마디로 정의하자면 REST 구조를 갖는 API다. 개발자들이 함께 개발을 하기 위해서는, 이러한 REST 한 구조의 API를 만들어야 당연히 효율성이 높아질 것이다. 따라서 REST API는 개발자들이 서로 편하기 위해 이러한 디자인, 구조로 API를 만들자 하고 따르는 하나의 아키텍쳐인 것이다.
REST의 기본
그럼 지금부터 REST의 기본 개념에 대해 알아보자. REST의 요소는 크게 Method, Resource, Representation of Resource 로 3가지다.
1. Method (Verb)
우리는 이 method로 CRUD를 만들 수 있다. Method는 대표적으로 4가지가 있다.
그리고 여기서 POST의 경우는 다른 METHOD와 달리 한번 수행했을 때, 그리고 여러번 수행했을때 결과가 같다는 물음에 홀로 “NO”라고 할 수 있다.
여기서 조금 더 구체적으로 잠깐 GET 과 POST 메소드를 비교해보자.
GET과 POST의 비교
둘다 HTTP 프로토콜을 이용해서 서버에 무엇을 요청할 때 사용하는 METHOD이지만, 둘은 엄연히 다른 METHOD로 이를 잘 이해해야한다.
GET
GET 방식은 데이터를 요청할때 이 요청하는 데이터가
HTTP Request Message
의Header
부분의 url에 담겨서 전송된다. 그래서 요청시 url 상에?
뒤에 데이터가 붙어 request를 보내는 것이다.예를들어 내가 구글에 오늘의날씨 에 대한 데이터를 요청할때 검색엔진에 이를 검색해보면 url에는
https://www.google.com/search?q=오늘의날씨
라고 뜨는 것을 확인 할 수 있다. 따라서 이러한 방식은 url 공간에 그대로 데이터가 담기기 때문에 보낼 수 있는 데이터 크기 자체가 제한적이며 보안의 측면을 고려해야되므로 각각의 상황에서 GET방식은 적절하지 않다고 할 수 있다.만약 지금 설명하는 리퀘스트 메시지, header, url 등이 이해가 되지 않는다면 HTTP 리퀘스트 메시지 링크를 참고하자.
POST
POST 방식의 경우는
Header
부분에 데이터를 담는 GET 방식과 다르게Body
부분에 데이터를 담아 전송한다. 따라서GET
과 비교되게 제한적인 크기, 보안의 측면에서 낫다고 할 수 있다. (하지만 보안면은 암호화를 따로 하지 않는 다면 비슷하다.)그래서 POST 요청은 언제 쓰는 것인가 ? 바로 서버의 값이나 상태 등을 변경하기 위해 사용되는 것이다. 예를들면 내가 게시글을 쓰는 경우가 있다.
또 하나의 GET 메소드와의 차이점은 GET 요청은 브라우저에 Caching이 되기 때문에 POST 방식으로 요청할 것을 데이터 크기가 작고 보안의 문제가 없다는 이유로 GET으로 요청할 경우 기존에 캐싱된 데이터가 응답될 가능성이 존재한다. (Caching의 개념이 궁금하다면 쿠키 & 세션 & 캐시 )
2. Resource
Resource는 말그대로 자원 즉, URI를 말하는 것이다. 참고로 URL 과 URI 가 헷갈릴 수 있는데 URI 는 인터넷 상의 자원을 식별하기 위한 문자열의 구성이고 URL은 인터넷상의 자원의 위치를 말한다.
그래서 REST는 이러한 자원이 있어야 앞에 설명한 메소드를 수행하든 어떤 작업이 실행가능한 것이다.
3. Representation of Resource
그래서 Client가 Server에 자원에 대한 조작을 요청하면 Server는 이에 대한 적절한 응답을 해줘야만 한다. 즉 표현(Representation) 해야 하는 것이다. 이러한 응답의 메시지에는 포맷이 있고 JSON, XML 등이 있고 최근에는 JSON을 많이 쓰는 추세이다. 응답 메시지의 형태는 아래와 같다.
1
2
3
4
5
6
HTTP POST, http://hoyeonkim795.github.io/users/
{
"users" : {
"name" : "hoyeon"
}
}
그럼 다음 포스트는 REST의 특징 그리고 Restful API에 대해 알아보겠습니다.