전통적 웹 사이트
MPA
Multi Page Application
서버에서 ---> 새로운 페이지 전송 --> 매번!
SPA
Single Page Application
전체 페이지를 --> 하나의 페이지에 담아 ---> 동적으로 화면 바꾸기
페이지 변경 안일어남. 그렇게만 보임.
데이터만 ajax로 받아옴. == CSR (Client Side Rendering)
껍데기는 그대로 있음
참고: https://www.huskyhoochu.com/what-is-spa/
@RequestMapping
@GetMapping
@RequestMapping | 다목적 요청 처리 HTTP 메서드가 method 속성 지정 |
|
@GetMapping | HTTP GET 요청 | |
@Controller 뷰로 보여줄 값을 반환함 즉: html로 데이터 넘기나봄 ㅋㅋ |
@RestController 컨트롤러의 모든 HTTP 요청 처리 메서드에서 HTTP 응답 몸체에 직접 쓰이는 값을 반환한다. --> 스프링에게 알려준다. 뷰를 통해 HTML이 변환되지 않고. 직접 HTTP 응답으로 브라우저에게 전달한다. 즉: 데이터만 넘길때 쓰나봄 ㅋㅋ |
클래스의 모든 요청 처리 메서드에 @ResponseBody 어노테이션을 지정해야 @RestController와 같은 결과를 얻을 수 있다. |
1) 어노테이션이 지정된 클래스를 스프링의 컴포넌트 검색으로 찾을 수 있다. |
뷰를 통해서 HTML을 변환하지 않음 직접 HTTP 응답으로 브라우저에게 전달함 |
produces
produces="application/json"
요청 Accept 헤더에
application/json이 포함된 요청만!을 처리한다.
application/json | JSON |
text/html | XML |
응답 결과 JSON
produces 속성 값은 String 배열로 저장.
다른 controller에서도 요청을 처리할 수 있도록
text/html 속성을 추가함. --XML로 출력
@CrossOrigin
@CrossOrigin(origin="*") --> CORS 적용
서로 다른 도메인간의 요청을 허용한다.
API와 별도의 도메인(호스트와 포트)
api를 사용하지 못하게 웹브라우저가 막는다.
@GetMapping("/{id}")
타코 id로 특정 타코만 가져오는 엔드포인트
플레이스 홀더 변수: {id}
(@PathVariable("id") Long id)
id를 인자로 받는 메서드 작성.
(@RequestBody Taco taco)
요청 몸체의 JSON 데이터 --> Taco 객체로 변환됨 ---> taco 변수에 바인딩 됨.
이거 안쓰면: 매개변수가 곧바로 Taco 객체와 바인딩 되는 것으로 --> 스프링MVC가 간주함.
@ResponseStatus(HttpStatus.CREATED)
해당 요청이 성공적, 요청 결과로 리소스 생성
201 상태가 client에게 전달된다.
데이터 수정
get : 서버로부터 클라이언트로 데이터 전송~
<->
put: 클라이언트로 부터 서버로 데이터를 보냄. 데이터 전체 수정
patch : 데이터 일부분을 변경
@PutMapping("/{orderId}")
@PatchMapping(path="/{orderId}", consumes="application/json")
데이터 삭제
@DeleteMapping("/{orderId}")
@ResponseStatus(code=HttpStatus.NO_CONTENT)
주문이 존재하면 -> 삭제
없으면 -> error
EmptyResultDataAccessException
NO_CONTENT 204
삭제는 데이터를 return 할 필요 없음.
하이퍼미디어
REST API
HATEOAS 하테오아스?
Hypermedia As
The Engine
Of Application
api로부터 반환되는 데이터에
해당 리소스와 관련된 하이퍼링크들이 포함된다.
JSON 응답에 하이퍼링크를 포함시킬 때 주로 사용되는 형식.
_link 속성 : client가 관련 api를 수행할 수 있는 하이퍼링크를 포함한다.
식자재 모두.. 그들 리소스를 참조하는 self링크를 가진다.
리스트 전체는 자신을 참조하는 recents 링크를 갖는다.
하이퍼링크 추가하기
'java > 스프링인액션' 카테고리의 다른 글
[8.3] 카프카 사용하기 (0) | 2021.12.04 |
---|---|
[6.3] 스프링 데이터 REST (0) | 2021.11.27 |
챕터4 스프링 시큐리티 (0) | 2021.11.20 |
[챕터 3] 데이터로 작업하기 72~112p (0) | 2021.11.13 |
1주차 (0) | 2021.11.07 |