참고 : |로이 폴딩의 논문 | https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
참고 : |MDN http 공식 문서 | https://developer.mozilla.org/ko/docs/Web/HTTP/Overview
- REST는 HTTP 표준에만 따른 다면, 어떠한 기술이라던지 사용이 가능한 인터페이스 스타일이다.
Uniform interface (유니폼 인터페이스)
Stateless (무상태성)
Cacheable (캐시 가능)
Self-descriptiveness (자체 표현 구조)
Client - Server 구조
계층형 구조
좀더 이 말들을 쉽게 풀어 쓰면, 다음과 같이 된다.
a) 리소스(Resource, 자원)
웹 상에서 이러한 리소스들은 URI를 통해 표현 된다.
예를 들면, http://www.youtube.com/user1/video라는 URI가 있다고 가정하자. 이 URI를 통해 도출할 수 있는 것은 ‘user1’이라는 사람이 ‘video’라는 파일을 등록했다는 것이다.
b)메소드(Method, 방식, 행위)
REST API의 가장 큰 장점은 메소드에서 나온다.
바로 “리소스에 대한 행위가 일관적(Uniform)“이기 때문인데, 조금 더 풀어서 설명하자면 “REST API가 다루는 리소스가 어떠한 종류(문서, 비디오, 음악, 이미지 등)이던지 상관 없이, 모두 같은 메소드로 동작“한다고 생각하면 된다.
POST: 서버에 데이터를 추가, 작성 등
PUT: 서버의 데이터를 갱신, 작성 등
GET: 서버로 부터 데이터를 조회
DELETE: 서버의 데이터를 삭제
PATCH: 리소스의 일부분을 수정
.....................................................여기까지가 기본 httpMethod이다..............................................
HEAD: 서버 리소스의 헤더(메타 데이터의 취득)
OPTIONS: 리소스가 지원하고 있는 메소드의 취득
CONNECT: 프록시 동작의 터널 접속을 변경
c) 표현
http://15.164.169.213/new/student 라고 했을때 이것이 뭔가 신입생에 관한것이라고 생각은 드는데(여기까지도 상당히 괜찮은 restful한 Api라고 생각한다) 정확히 뭘하는 지는 모를 수 밖에없다.
만약 위 주소에 1,2,3학년각 클래스의 28번의 사진을 가져오고 싶다면 어떻게 리소스에서 표현할 수있을까?
GET http://15.164.169.213/grade/1/28/HTTP/1.1 Accept:image/student.jpg
GET http://15.164.169.213/grade/2/28/HTTP/1.1 Accept:image/student.jpg
GET http://15.164.169.213/grade/3/28/HTTP/1.1 Accept:image/student.jpg
?????????????????? 반복해야 된다???????????
HTTP 메소드와 URI만 가지고는 사용자가 원하는 정보를 반환하는 것에 한계가 있을 수 밖에 없다.
또한 사용자는 이름, 직업, 나이, 성별 등 다양한 특성들을 가질 수 있는데, 위와 같은 단순한 POST 문구로는 그러한 특성들을 담는 것이 상당히 어려울 것이다.
결국 이러한 세부 특성을 표현하기 위해 JSON, XML 등의 언어를 사용하는 것이다.
그리고 이러한 언어로 표현되는 부분은 ‘페이로드(Payload), 또는 바디(Body)’ 라고 한다.
사용자는 이러한 페이로드 부분을 여러가지 언어로 표현할 수 있다.
단순히 REST API 헤더 부분에 ‘Content-Type: application/json’과 같은 내용을 추가해주면 페이로드를 해당 언어로 해석할 수 있게 되는것이다.
즉 해당 리소스의 한계를 극복하기위해서 json이라는 표현을 빌려서 데이터를 요청하고 응답하는 것이다.
Json을 왜 사용하는 지 이제 알겠네..... 그냥 막연하게 데이터를 보내는게 편리해서가 아니라 이런 http의 구조적인 한계 즉 리소스와 행위적으로 한계가 있기때문에 해당 표현의 형식으로 Json이라는 것을 사용하는 것임.
RESTful은 REST의 설계 규칙을 잘 지켜서 설계된 API를 RESTful한 API라고 한다.
즉, REST의 원리를 잘 따르는 시스템을 RESTful이란 용어로 지칭된다.
해당 리소스까지는 어느정도 이해하는 것까지 설계하고 그에 해당하는 데이터를 정확하게 응답해줘야 할 수있는것이 Restful하게 api를 만드는 것이다.
rest예시에서 각학년의 28번 학생의 사진을 조회할때 각학년에서 데이터를 가져오는 것이 아닌 all이라는 리소스를 설계하고 그에맞는 json데이터를 보여주면 된는 것이 restful한 api설계이다.
GET http://15.164.169.213/grade/all/28/HTTP/1.1 Accept:image/student.jpg
한줄 요약 : URI는 정보의 자원만 표현해야 하며, 자원의 행위는 HTTP Method에 명시한다는 것이다.
출처: https://bcho.tistory.com/953 [조대협의 블로그:티스토리]
출처 : https://wallees.wordpress.com/2018/04/19/rest-api-introduction/
출처: https://dev-coco.tistory.com/97 [슬기로운 개발생활:티스토리]