REST API 란
스프링 부트로 배우는 자바 웹 개발 책과 처음 배우는 스프링 부트2 책에서 참고
REST는
-Representational State Transfer의 약자
-분산 네트워크 프로그래밍의 아키텍쳐 스타일
-웹과 같은 분산 하이퍼미디어 시스템에서 사용하는 통신 네트워크 아키텍처로, 네트워크 아키텍처의 원리 모음입니다
웹은 전송 방식으로 HTTP를, 식별방법으로 URI를 사용합니다
HTTP는 웹에서 GET, POST, PUT, DELETE 등의 메서드를 사용하여 정보를 주고받는 프로토톨입니다
REST는 HTTP와 URI의 단순하고 간결한 장점을 계승한 네트워크 아키텍처입니다
따라서 다양한 요구사항에 대응하여 때로는 단순하게, 때로는 서버와 클라이언트가 서로 통신하는 리소스에 대해 복잡한 방식으로 상호작용할 수 있습니다
REST의 목적
1. 구성요소 상호작용의 규모 확장성
2. 인터페이스의 범용성
3. 구성요소의 독립적인 배포
4. 중간적 구성요소를 이용한 응답 지연 감소, 보안 강화, 레거시 시스템 인캠슐레이션
RESTful의 제약 조건
REST의 구현 원칙을 제대로 지키면서 REST 아키텍처를 만드는 것을 RESTful이라고 함
1. 클라이언트/서버
: 클라이언트와 서버가 서로 독립적으로 구분되어야 하고 서버 또는 클라이언트 증설 시에 서로간의 의존성 때문에 확장에 문제가 되는 일이 없어야 한다
2. 상태 없음
:클라이언트와 서버 간의 통신시에 상태가 없어야 한다. 단순히 들어오는 요청만 처리하여 구현을 더 단순화한다. 단 클라이언트의 모든 요청은 서버가 알아듣는 데 필요한 모든 정보를 담고 있어야 한다.
3. 레이어드 아키텍쳐(Layered Architecture)
:서버와 클라이언트 사이에 중개서버(게이트웨이, 방화벽, 프록시)나 로드밸런싱, 공유캐시가 있는 것처럼 다계층 형태로 레이어를 추가하거나 수정하거나 제거할 수 있고 확장성이 있어야 한다
4. 캐시가능(cacheable)
:서버의 응답들은 캐시를 가지고 있거나 없거나 둘 중의 하나인데, 캐시를 가지고 있을 경우에는 클라이언트가 캐시를 통해서 응답을 재사용할 수 있고 이를 통해서 서버의 부하를 낮추어서 서버의 성능이 향상될 수 있다. HTTP장점을 그대로 계승한 아키텍쳐가 REST라서 HTTP의 캐시 기능을 적용할 수도 있습니다
5. 코드 온 디멘드(Code On Demand)
:요청이 오면 코드를 준다는 의미로 특정 시점에 서버가 특정 기능을 수행하는 스크립트 또는 플러그인을 클라이언트에 전달해서 해당 기능을 동작하도록 하는 것이다. 코드 온 디멘드의 예로는 애플릿, 자바스크립트, 플래시가 있다. 이 제약조건은 선택가능합니다.
6. 통합 인터페이스
서버와 클라이언트 간의 상호 작용은 일관된 인터페이스들 위에서 이뤄져야 한다
통합 인터페이스 규칙
1. 리소스 식별
:웹 안에서 서로 구분할 수 있는 개념으로 URI와 같은 고유 식별자를 통해 표현할 수 있다
2. 표현을 통한 리소스 처리
:사람의 말에 강세가 있어서 같은 문장을 말하더라도 말한 사람의 강세나 어조에 따라 의도가 달라질 수 있듯이 같은 데이터에 대해서 표현할 때 JSON, XML, HTML 페이지와 같이 다양한 콘텐츠 유형으로 표현할 수 있다. 그렇지만 말의 강세나 어조가 바뀌어도 문장 자체는 그대로인 것처럼 데이터는 변경되지 않는다.
3. 자기 묘사 메시지
:일반적으로 네트워크 통신을 할 때는 헤더부분에 현재 보내고 있는 데이터 패킷에 대한 메타 정보를 담아서 본문을 읽을 때 해당 본문이 어떤 의도로 쓰여진 것인지 알 수 있다. 마찬가지로 HTTP 통신을 할때도 HTTP header에 메타 데이터 정보를 추가해서 실제 데이터와는 관련 없지만 데이터에 대한 설명을 나타내는 정보를 담을 수 있다
4. 애플리케이션의 상태에 대한 하이퍼미디어(HETEOAS, Hypermedia As The Engine Of Application State)
간단히 말해서 웹은 여러 페이지들과 그 페이지들을 이동할 수 있는 링크 정보들로 구성되어 있다. REST API를 개발할때도 단순히 데이터만 전달하지 않고 링크 정보까지 포함한다면 좀 더 웹에 친숙한 API가 될 것이다
적어놓고도 어려워서 다른 블로그 글을 아래에 첨부하였음
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
'백엔드개발 > 자바스프링' 카테고리의 다른 글
JDK 다운 Oracle을 떠나서 AdoptOpenJDK Zulu Java Community 에서 받으세요 (0) | 2019.10.21 |
---|---|
스프링 템플릿 엔진 종류 및 성능 및 비교 (0) | 2019.08.04 |
앱)sqlSessionDao관련 (0) | 2018.11.14 |
앱)paging 관련 (0) | 2018.11.14 |
앱)jstl java jsp excel export (0) | 2018.11.14 |