3. CRUD 기능

3-10. Http Patch 작업

이 섹션에서는 API에서 리소스의 일부분만을 업데이트하는 HTTP PATCH 요청의 구현 방법을 다룹니다. PATCH 요청은 리소스의 전체를 업데이트하는 PUT 요청과 달리, 특정 필드만을 선택적으로 업데이트할 수 있습니다.

  1. Http PATCH 엔드포인트 구현:
    • HttpPatch 어트리뷰트를 사용하여 UpdatePartialPlant 메서드를 정의합니다. 이 메서드는 업데이트할 Plant의 ID와 JsonPatchDocument<PlantDTO> 객체를 매개변수로 받습니다.JsonPatchDocument는 업데이트할 필드의 정보(예: 변경할 필드명과 새로운 값)를 담고 있습니다.
  2. PATCH 요청 처리 로직:
    • 클라이언트로부터 받은 JsonPatchDocument 객체를 사용하여 지정된 Plant 객체의 특정 필드를 업데이트합니다. 이 과정에서 ApplyTo 메서드를 사용하여 패치 문서에 정의된 변경 사항을 적용합니다. 유효성 검사 후, 모든 변경 사항이 적용되면 NoContent를 반환하여 업데이트가 성공적으로 완료되었음을 나타냅니다.
  3. 테스트 및 검증:
    1. 1.Swagger UI를 통해 UpdatePartialPlant 엔드포인트를 테스트합니다. PATCH 요청을 사용하여 특정 Plant의 이름을 변경하고, 변경 후 NoContent 상태 코드를 반환하는 것을 확인할 수 있습니다.2.변경 사항을 확인하기 위해 GetPlants 엔드포인트를 호출하여 이름이 성공적으로 업데이트되었는지 검증합니다.
    http Patch 실행결과 확인 Comment이 방법을 통해 API에서 리소스의 일부분만을 효율적으로 업데이트할 수 있으며, 클라이언트는 필요에 따라 리소스의 특정 필드만을 선택적으로 변경할 수 있습니다. HTTP PATCH 요청의 구현은 API의 유연성을 높이고, 리소스 관리를 더욱 효과적으로 할 수 있게 합니다.
  4. 테스트 및 검증:
    1.Swagger UI를 통해 UpdatePartialPlant 엔드포인트를 테스트합니다. PATCH 요청을 사용하여 특정 Plant의 이름을 변경하고, 변경 후 NoContent 상태 코드를 반환하는 것을 확인할 수 있습니다.

    2.변경 사항을 확인하기 위해 GetPlants 엔드포인트를 호출하여 이름이 성공적으로 업데이트되었는지 검증합니다.


    이 방법을 통해 API에서 리소스의 일부분만을 효율적으로 업데이트할 수 있으며, 클라이언트는 필요에 따라 리소스의 특정 필드만을 선택적으로 변경할 수 있습니다. HTTP PATCH 요청의 구현은 API의 유연성을 높이고, 리소스 관리를 더욱 효과적으로 할 수 있게 합니다.
  5. 실습 예시:
    • 위 코드는 ID를 기반으로 특정 Plant의 일부 필드를 업데이트하는 UpdatePartialPlant 메서드의 구현 예시입니다.
[HttpPatch("{id:int}", Name = "UpdatePartialPlant")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public IActionResult UpdatePartialPlant(int id, JsonPatchDocument<PlantDTO> patchDTO)
{
    if (patchDTO == null || id == 0)
    {
        return BadRequest();
    }
    var plant = PlantStore.PlantList.FirstOrDefault(u => u.Id == id);
    if (plant == null)
    {
        return BadRequest();
    }
    patchDTO.ApplyTo(plant, ModelState);
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }
    return NoContent();
}
http Patch 실행

http Patch 실행결과 확인

http Patch 실행결과 확인

프로젝트 리소스

https://github.com/kimdaewoong2022/MorePlants_WebAPI/tree/4a0a0554550a4ef4f31ef35422fe8b90c42337ac