일반적인 컨트롤러(Controller)와 RESTful API의 차이는 주로 요청과 응답의 형태와 목적에 존재합니다.
일반적인 컨트롤러
: 주로 HTML 페이지를 생성하고 반환합니다. 사용자의 웹 브라우저에서 GET 또는 POST 요청을 보내면, 서버는 HTML 형식의 응답을 생성하여 브라우저에게 전달합니다.
RESTful API
: 주로 JSON 또는 XML과 같은 데이터 형식으로 데이터를 주고받습니다. 클라이언트 애플리케이션은 HTTP 요청을 통해 서버에 데이터를 요청하고, 서버는 해당 데이터를 JSON 또는 XML 형식으로 응답합니다.
일반적인 컨트롤러
: 웹 애플리케이션의 화면을 구성하고 사용자의 요청을 처리하여 뷰(View)를 반환하는 것이 주된 목적입니다. 주로 웹 페이지의 동적인 내용을 구성하고 사용자와 상호작용하기 위해 사용됩니다.
RESTful API
: 데이터를 주고받는데 초점을 맞춘 API로, 주로 다른 애플리케이션과의 통신이 목적입니다. 클라이언트 애플리케이션은 RESTful API를 통해 데이터를 요청하고 응답받아 사용합니다.
URI 설계 : 각 리소스를 나타내는 URI를 설계합니다. 예를 들어, /books는 책 리소스를 나타내고, /books/{id}는 특정 책의 식별자를 나타냅니다.
HTTP 메소드 활용 : GET, POST, PUT, DELETE 등의 HTTP 메소드를 사용하여 리소스에 대한 CRUD 작업을 수행합니다. 예를 들어, GET /books는 모든 책을 조회하는 요청이고, POST /books는 새로운 책을 생성하는 요청입니다.
응답 형식 : 주로 JSON 형식으로 데이터를 반환합니다. 클라이언트는 JSON을 파싱하여 데이터를 활용합니다.
상태 코드 : 적절한 HTTP 상태 코드를 반환하여 요청의 성공, 실패 등의 상태를 알려줍니다.
Ex) 코드 예
@RestController
@RequestMapping("/api/books")
public class BookController {
@Autowired
private BookService bookService;
@GetMapping
public List<Book> getAllBooks() {
return bookService.getAllBooks();
}
@PostMapping
public Book createBook(@RequestBody Book book) {
return bookService.createBook(book);
}
@GetMapping("/{id}")
public Book getBookById(@PathVariable("id") Long id) {
return bookService.getBookById(id);
}
@PutMapping("/{id}")
public Book updateBook(@PathVariable("id") Long id, @RequestBody Book book) {
return bookService.updateBook(id, book);
}
@DeleteMapping("/{id}")
public void deleteBook(@PathVariable("id") Long id) {
bookService.deleteBook(id);
}
}
위의 예시 코드는 책(Book) 리소스에 대한 CRUD 작업을 수행하는 RESTful API를 구현한 것입니다.
@RestController 어노테이션을 사용하여 컨트롤러를 RESTful API로 지정합니다.
@RequestMapping 어노테이션을 사용하여 기본 URL 경로를 설정합니다.
각 메소드는 HTTP 메소드와 요청 경로에 따라 처리를 담당하며, 적절한 데이터를 반환합니다.
이와 같이 RESTful API는 주로 데이터를 주고받는데 초점을 맞추고, URI와 HTTP 메소드를 활용하여 리소스를 나타내고 조작합니다.
JSON은 "JavaScript Object Notation"의 약자로, 데이터를 효과적으로 표현하기 위한데이터 교환 형식입니다. 키-값 쌍으로 이루어진 데이터 객체를 사용하여 데이터를 표현하며, 배열과 같은 데이터 구조도 지원합니다. 클라이언트 애플리케이션과 서버 간의 데이터 교환에 널리 사용됩니다.{
"name": "zizi",
"age": 23,
"email": "zizi@example.com"
}
XML은 "eXtensible Markup Language"의 약자로, 다양한 데이터를 표현하기 위한 마크업 언어입니다. 데이터 교환에 사용되며, 웹 서비스의 데이터 전송 형식으로도 자주 사용됩니다.<person>
<name>zizi</name>
<age>23</age>
<email>zizi@example.com</email>
</person>
JSON과 XML은 데이터를 구조화하고 표현하는 방식으로 비슷한 목적을 가지고 있습니다.
JSON은 더 간결하고 가독성이 좋으며, JavaScript에서 자연스럽게 사용할 수 있는 형식입니다.
XML은 더 많은 태그와 구문을 가지며, 더 유연한 데이터 표현을 위한 확장성을 제공합니다.
최근에는 JSON이 더 많이 사용되고 있으며, RESTful API에서는 주로 JSON 형식을 사용하여 데이터를 주고받습니다.