API 작성하는 방법

Youngseon Kim·2023년 7월 27일
0

서버에서 값을 가져올 때 사용하는 GET API

@PathVariable을 사용한 GET 메서드 구현

@GetMapping("/{number}")
    public ResponseEntity<ProductResponseDto> getProduct(@PathVariable Long number) {
        long currentTime = System.currentTimeMillis();
        ProductResponseDto productResponseDto = productService.getProduct(number);
        return ResponseEntity.status(HttpStatus.OK).body(productResponseDto);
    }
    

@GetMapping("/{number}")은 /product/{number} 경로로 들어오는 GET 요청을 처리합니다. {number} 부분은 @PathVariable Long number에 의해 추출됩니다. 이렇게 하면 /product/123과 같이 요청이 들어올 때, number 변수로 123이 전달되어 해당 상품 번호를 조회하는 기능을 수행할 수 있습니다.

@RequestParam을 사용한 GET메서드 구현

@GetMapping("/search")
    public ResponseEntity<List<ProductResponseDto>> searchProducts(@RequestParam String keyword) {
            List<ProductResponseDto> products = productService.searchProductsByName(keyword);
            return ResponseEntity.status(HttpStatus.OK).body(products);
    }

@GetMapping("/search")는 /product/search 경로로 들어오는 GET 요청을 처리합니다. @RequestParam String keyword는 ?keyword=검색어와 같이 URL 쿼리 파라미터로 전달된 keyword를 String 변수로 받아옵니다. 이렇게 하면 /product/search?keyword=검색어과 같이 요청이 들어올 때, keyword 변수로 검색어가 전달되어 해당 키워드를 가지고 상품을 검색하는 기능을 수행할 수 있습니다.

웹 애플리케이션을 통해 데이터베이스 등의 저장소에 리소스를 저장할 때 사용되는 POST API

@RequestBody를 활용한 POST메서드 구현

@PostMapping()
    public ResponseEntity<ProductResponseDto> createProduct(@RequestBody ProductDto productDto) {
        long currentTime = System.currentTimeMillis();
        ProductResponseDto productResponseDto = productService.saveProduct(productDto);
        return ResponseEntity.status(HttpStatus.OK).body(productResponseDto);
    }

@PostMapping()은 /product 경로로 들어오는 POST 요청을 처리합니다. @RequestBody ProductDto productDto는 요청의 body에 있는 데이터를 ProductDto 객체로 자동 매핑합니다. 클라이언트가 JSON 형식으로 데이터를 보낸다면 Spring은 해당 JSON 데이터를 ProductDto 객체로 변환하여 컨트롤러의 createProduct 메서드에 전달합니다.

웹 애플리케이션 서버를 통해 데이터베이스 같은 저장소에 존재하는 리소스 값을 업데이트하는데 사용되는 PUT API

@RequestBody를 활용한 PUT메서드 구현

 @PutMapping()
    public ResponseEntity<ProductResponseDto> changeProductName(
            @RequestBody ChangeProductNameDto changeProductNameDto) throws Exception {
        

        ProductResponseDto productResponseDto = productService.changeProductName(
                changeProductNameDto.getNumber(),
                changeProductNameDto.getName());

        
        return ResponseEntity.status(HttpStatus.OK).body(productResponseDto);
    }

@PutMapping()은 HTTP PUT 메서드를 처리하는 엔드포인트를 정의합니다. PUT 메서드는 서버에 새로운 데이터를 저장하거나 업데이트하는 데 사용됩니다.

public ResponseEntity'<'ProductResponseDto'>' changeProductName(...) throws Exception 메서드는 ProductResponseDto라는 객체를 ResponseEntity에 담아 반환하는 RESTful API 엔드포인트의 핸들러 함수입니다. 또한 Exception을 던질 수 있습니다.

@RequestBody ChangeProductNameDto changeProductNameDto어노테이션은 요청 본문에 있는 데이터를 ChangeProductNameDto 객체로 변환하여 메서드의 파라미터로 전달합니다. 클라이언트에서 HTTP PUT 요청 본문에 JSON 형식으로 ChangeProductNameDto 객체를 담아 보내는 역할을 합니다.

ProductResponseDto productResponseDto = productService.changeProductName(...): productService라는 서비스 클래스의 changeProductName() 메서드를 호출하여 상품 이름을 변경하고, 변경된 결과를 ProductResponseDto 객체로 받습니다. 이렇게 서비스 클래스를 활용하여 비즈니스 로직을 처리합니다.

return ResponseEntity.status(HttpStatus.OK).body(productResponseDto);: 변경된 결과인 productResponseDto 객체를 ResponseEntity에 담아서 HTTP 상태 코드 200 (OK)과 함께 응답으로 반환합니다. 클라이언트는 이 응답을 받아 상품 이름이 성공적으로 변경되었음을 확인할 수 있습니다.

웹 애플리케이션 서버를 거쳐 데이터베이스 등의 저장소에 있는 리소스를 삭제할 때 사용하는 DELETE API

@PathVariable을 이용한 DELETE 메서드 구현


    @DeleteMapping(value ="/{number}")
    public ResponseEntity<String> deleteProduct(@PathVariable Long number) throws Exception {
        
        productService.deleteProduct(number); 
        return ResponseEntity.status(HttpStatus.OK).body("정상적으로 삭제되었습니다.");
    }

@DeleteMapping 어노테이션에 정의한 value 이름과 메서드의 매개변수 이름을 동일하게 설정해야 삭제할 값이 주입된다.

0개의 댓글