티스토리 뷰
RESTful :
- RESTful 아키텍쳐는 자원(resource)을 주소(url)로 표현하고,
HTTP 메소드(GET, POST, PUT, DELETE 등)를 사용하여
자원에 대한 CRUD 작업을 수행한다.
이를 통해 클라이언트와 서버 간 통신이 가능하다.
REST API :
- 설계방식.
- RESTful 아키텍쳐를 따르는 웹 API.
- RESTful 아키텍쳐 스타일을 기반으로 하여 클라이언트와 서버 간에 데이터를 비동기 방식으로 전달하는 인터페이스.
- 데이터를 송수신 할 때는 JSON(or XML)으로 데이터를 송수신하며, HTTP 요청과 응답을 사용해 통신함
- url 만 보고도 인식하도록 만들어 놓은 방식
REST Controller :
- JSON, XMl 등의 데이터를 반환
- 메서드는 일반적으로 객체를 반환하며 , 이 객체는 JSON 또는 XML로 변환되어 클라이언트에 전달된다.
- RESTful 웹 서비스를 구축하기 위해 사용된다.
- 비동기방식
REST API 특징 :
- 표준 HTTP 메서드 사용 : REST API는 표준 HTTP 메서드를 사용하여 리소스에 대해 다양한 작업을 수행
- 데이터 송수신 : JSON 또는 XML과 같은 다양한 형태의 리소스를 전송할 수 있음.
- 데이터는 클라이언트에서 비동기 방식으로 화면에 출력
GET: 리소스를 조회
POST: 리소스를 생성
PUT: 리소스를 수정
DELETE: 리소스를 제거
REST API 구현 예시 :
GET: 리소스를 조회
@GetMapping("/{id}")
public Book getBookById(@PathVariable Long id) {
// id에 해당하는 책 정보를 데이터베이스에서 조회하여 반환
return bookService.getBookById(id);
}
POST: 리소스를 생성
@PostMapping
public ResponseEntity<Book> createBook(@RequestBody Book book) {
// 새로운 책 정보를 데이터베이스에 저장하고 저장된 책 정보를 반환
Book savedBook = bookService.saveBook(book);
return ResponseEntity.created(URI.create("/api/books/" + savedBook.getId())).body(savedBook);
}
PUT: 리소스를 수정
@PutMapping("/{id}")
public ResponseEntity<Book> updateBook(@PathVariable Long id, @RequestBody Book book) {
// id에 해당하는 책 정보를 수정하고 수정된 책 정보를 반환
Book updatedBook = bookService.updateBook(id, book);
return ResponseEntity.ok(updatedBook);
}
DELETE: 리소스를 제거
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteBook(@PathVariable Long id) {
// id에 해당하는 책 정보를 삭제
bookService.deleteBook(id);
return ResponseEntity.noContent().build();
}
Spring REST API 어노테이션 :
@RequestBody : HTTP 요청으로 전송된 JSON 데이터를 Java 객체로 변환해주는 스프링 어노테이션
주로 REST API에서 클라이언트가 서버에 보낸 데이터를 수신하고 처리하는데 사용
@ResponseBody : Java 객체를 JSON 데이터로 변환해주는 스프링 어노테이션
주로 REST API에서 서버가 클라이언트에 JSON 데이터를 수신할 때 사용
@RestController : 해당 클래스가 JSON 데이터로 메서드 값을 리턴하도록 지정하는 스프링 어노테이션 *@ResponseBody를 사용하지 않아도 메소드가 자동으로 JSON 데이터 반환 *
=> 이말은 ResponseBody와 함께 사용할 이유가 없다는 말임
// 요약
@RequestBody(Client - >Server)
@ResponseBody(Server -> Client)
@RestController(@ResponseBody과 함께 사용 금지)