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