Respresentational State Transfer : HTTP기반으로 필요한 resource에 접근하는 방식을 정해 놓은 아키텍쳐
resource이란 저장된 데이터, 이미지/ 동영상/문서 등과 같은 파일, 서비스(이메일 전송, 푸쉬 메세지 등)을 포함
REST API : REST를 통해 서비스 API를 구현
REST 속성
- 서버에 있는 모든 resource는 각 resource 당 클라이언트가 바로 접근 할 수 있는 고유 URI가 존재
- 모든 요청은 클라이언트가 요청할 때마다 필요한 정보를 주기 때문에 서버에서는 세션 정보를 보관할 필요가 없다. 이에 서비스의 자유도가 높아지고 유연한 아키텍쳐 적응이 가능
- HTTP 메소드를 사용한다. 모든 resource는 일반적으로 HTTP 인터페이스인 GET, POST, PUT, DELTE 4개의 메소드로 접근 되야한다.
- 서비스 내에 하나의 resource가 주변에 연관 된 리소스들과 연결되어 표현이 되어야 한다.
REST 구성
- resource
- method(GET,POST,PUT,DELETE)
- message
Resource
REST에서는 resource에 접근할 때, URI로 접근
URI
URI는 resource의 위치를 나타내는 일종의 식별자
URI 설계 규칙
- / 구분자는 계층 관계를 나타내는데 사용
ex) http://www.findjob/board/attach/a
해당 사이트에서 a의 정보를 찾을 때 findjob 부터 하위 소속들을 거쳐 a에 도달하는 구조이기에
URI 마지막 문자로 슬래시를 포함하지 않는다. - URI를 이루는 resource들은 동사보다 명사로 이루어져야 한다.
resource간에 관계를 표현하는 경우에는 /리소스명/리소스 ID/관계가 있는 다른 리소스명
ex) GET : /user/{userid}/devices (has관계표현시)
관계명이 복잡한 경우
ex) GET : /user/{userid}/likes/dives (관계명이 애매하거나 구체적 표현이 필요한 경우) - URI에서는 _ 보다는 - 을 권장(가독성을 위하여)
- URI경로에서는 소문자가 적합 (대소문자 인식하기 때문에)
- 파일 확장자는 URI에 포함하지 않는다.
http://www.abc.com/user/profile.jpg(x)
파일 확장자를 사용하지 않고 Acept header를 사용한다.
GET : user/profile
HTTP/1.1
Host: www.abc.com
Accept: image/jpg
HTTP 메소드
같은 URI메소드의 성격에 따라 다른 요청을 하게끔 구별해준다.
- POST : POST를 통해 해당 URIfmf dycjdgkaus flthtmfmf todtjdgksek.
- GET : GET을 통해 해당 리소스 조회, 리소스 조회수 document에 대한 자세한 정보를 가져온다
- PUT : PUT을 통해 해당 리소스 수정
- DELETE : DELETE를 통해 리소스 삭제
메시지
HTTP header와 body, 응답 상태 코드로 구성되어 있고 header와 body에 포함된 메시지느 ㄴ메시지를 처리하기 위한 충분한 정보를 포함한다.
Body
resource에 대한 정보를 전달(데이터포맷:JSON/XML/사용자 정의 포맷)
Header
HTTP 바디에 어던 포맷으로 데이터가 담겨있는지 정의
요청 HTTP 헤더는 'Accept' 항목으로 응답 HTTP 헤더는 'Content-type'으로 컨텐츠 타입을 설명
응답상태 코드
응답상태코드를 통해 리소스 요청에 대한 응답을 할 수 있다.
REST 장점
- 언어와 플랫폼에 독립적
- SOAP(다른 통신방식) 보다 개발이 쉽고 단순
- REST가 지원하는 프레임워크나 언어등 도구들이 없어도 구현이 가능
- 기존 웹 인프라를 사용가능, HTTP를 그대로 사용하기 때문
REST 단점
- HTTP 프로토콜만 사용이 가능
- p2p통신 모델을 가정했기 때문에 둘 이상을 대산으로 하는 분산환경에는 유용하지 않다.
- 보안, 정책등에 대한 표준이 없기에 관리가 어렵다.
'IT > Spring' 카테고리의 다른 글
토비 스프링 - @Autowired (0) | 2019.10.19 |
---|---|
토비 스프링 - 테스트 (0) | 2019.10.19 |
토비 스프링 - XML 이용한 설정 (0) | 2019.10.14 |
토비 스프링 - 의존관계 주입 (0) | 2019.10.13 |
토비 스프링 - IoC (0) | 2019.10.13 |
댓글