✔️ Java Script Object Notation: 자바 스크립트 객체 표기법
✔️ XML을 이용하여 데이터 교환을 하면 복잡하고 data보다 Tag가 더 많기 때문에 간단한 json 사용
✅ 객체배열 [{속성명:속성값,⋯}, {속성명:속성값,⋯},⋯]
✅ Map {키1:{속성명:속성값,⋯}, 키2:{속성명:속성값,⋯},⋯]
✔️ JS객체를 서버로 전송하려면, 직렬화가 필요
(직렬화: 데이터를 문자열로 변환)
✔️ 서버가 보낸 데이터(JSON문자열)를 JS객체로 변활할때, 역직렬화 필요
✅ JSON.stringify()
: 객체 → JSON문자열 (직렬화)
✅ JSON.parse()
: JSON문자열 → 객체 (역직렬화)
✔️ Asynchronous javascript and Xml (요즘은 xml 대신 JSON을 주로 사용)
✔️ 비동기 통신으로 데이터를 주고 받기 위한 기술
✔️ 웹페이지 전체(data+UI)가 아닌 일부(data)만 업데이트 가능
pom.xml : jackson
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.1</version>
</dependency>
✔️ json 기반 메세지 전달에 유용
✅ requestBody
: http 요청 body → 자바객체,
자바객체로 변환하여 매핑된 메소드 파라미터로 전달
✅ responseBody
: 자바객체 → http 요청 body
@PostMapping("/send")
@ResponseBody
public Person test(@RequestBody Person p) {
System.out.println("p = " + p);
p.setName("ABC");
p.setAge(p.getAge() + 10);
return p;
}
✔️ 각각 @ResponseBody 붙이는 것과 같은 기능, 클래스에 @Controller 대신 @RestController을 붙여 사용 가능
@RestController
public class SimpleRestController {
@PostMapping("/send")
public Person test(@RequestBody Person p) {
System.out.println("p = " + p);
p.setName("ABC");
p.setAge(p.getAge() + 10);
return p;
}
}
✔️ Roy Fielding이 제안한 웹서비스 디자인 아키텍쳐 접근 방식
✔️ 프로토콜에 독립적이며, 주로 HTTP를 사용하여 구현
✔️ 리소스 중심의 API 디자인
HTTP메서드로 수행할 작업을 정의
리소스 부분은 심플하게⬅️유지보수 용이, 가독성 좋음
[HTTP 메서드] : GET
: Read | POST
: Write
PUT
: 파일 upload | DELETE
: 파일 삭제 | PATCH
: 일부 수정
✔️ Representation State Tansfer API : REST규약을 준수하는 API
⏺️ RESTful API 설계
✔️ URI를 명사 위주로 단순하게 표현하고 리소스에 대한 동작은 HTTP 메서드가 담당
참고) 자바의 정석 | 남궁성과 끝까지 간다