[SpringBoot] PUT vs PATCH API 설계 - JPA

끄적끄적·2023년 5월 22일
0

PUT vs PATCH

  • PUT : 리소스의 모든 것을 업데이트 한다.
  • PATCH : 리소스의 일부를 업데이트 한다.

1. 상품 수정 - PUT

  • ID를 이용해 등록된 상품의 이름과 가격을 수정할 수 있다.
  1. ProductController
@PutMapping ("api/products/{id}")
    public String update(@PathVariable Long id,@RequestBody com.example.springboot.entity.Product product) {
        productService.update(id,product);
        return "수정되었습니다.";
    }
  1. ProductService
public com.example.springboot.entity.Product update(Long id, com.example.springboot.entity.Product product) {
        com.example.springboot.entity.Product product1 = productJpaRepository.findById(id)
                .orElseThrow(() -> new IllegalArgumentException("해당 상품이 없습니다. id=" + id));
        product1.setName(product.getName());
        product1.setPrice(product.getPrice());
        return productJpaRepository.save(product1);
    }

2. 상품 수정 - PATCH

  • ID를 이용해 상품의 이름만 수정해보았다.
  1. ProductController
@PatchMapping("api/products/{id}")
    public String patchUpdate(@PathVariable Long id,@RequestBody com.example.springboot.entity.Product product) {
        productService.patchUpdate(id, product);
        return "일부 수정되었습니다.";
    }
  1. ProductService
public com.example.springboot.entity.Product patchUpdate(Long id, com.example.springboot.entity.Product product) {
        com.example.springboot.entity.Product product2 = productJpaRepository.findById(id)
                .orElseThrow(() -> new IllegalArgumentException("해당 상품이 없습니다. id=" + id));
        List<com.example.springboot.entity.Product>list = new ArrayList<>();
        list.add(product);
        for (int i=0;i< list.size();i++) {
            if (list.get(i).getName() != null) product2.setName(list.get(i).getName());
            if (list.get(i).getPrice() != null) product2.setPrice(list.get(i).getPrice());
        }
        return productJpaRepository.save(product2);
    }

4. Postman으로 확인

1. PUT

  1. 수정하기 전 상품 현황
  2. PUT > http://localhost:8080/api/products/3 > Body : name, price 변경 > Send
  • 수정되었습니다. 성공 !
  1. GET > http://localhost:8080/api/products > Send
  • id가 3인 상품이 수정된 것을 확인할 수 있다.

2. PATCH

  1. PATCH > http://localhost:8080/api/products/3 > Body : name 수정
  2. id가 3인 상품이 이름만 수정된 것을 확인할 수 있다.

5. MySQL Workbench 로 확인

1. PUT

  • id가 3인 상품이 수정된 것을 확인할 수 있다.

2. PATCH

  • id가 3인 상품의 이름이 수정된 것을 확인할 수 있다.

6. 해당되는 id가 없는 경우

  • 해당 상품이 없습니다 . id = '요청한 id'

0개의 댓글