이 섹션에서는 API에서 리소스를 생성한 후 생성된 리소스의 URL을 반환하는 방법을 다룹니다.
이는 CreatedAtRoute
메서드를 사용하여 구현됩니다.
- CreatedAtRoute의 목적:
- 새 리소스 생성 시
200 OK
대신201 Created
상태 코드와 함께 생성된 리소스의 위치(URL)를 클라이언트에게 제공합니다. 이를 통해 클라이언트는 새로 생성된 리소스에 즉시 접근할 수 있습니다.
- 새 리소스 생성 시
- CreatedAtRoute 구현:
CreatedAtRoute
메서드는 세 가지 주요 매개변수를 받습니다: 라우트 이름, 라우트 매개변수(여기서는 새 리소스의 ID), 반환될 객체(여기서는PlantDTO
객체).CommentGetPlant
엔드포인트에 명시적인 이름("GetPlant"
)을 부여하고, 이 이름을CreatedAtRoute
의 첫 번째 매개변수로 사용합니다.
- 이 방법을 통해 API는 리소스 생성 후 클라이언트에게 추가적인 정보를 제공할 수 있으며, 클라이언트는 제공된 URL을 통해 생성된 리소스를 즉시 확인할 수 있습니다.
CreatedAtRoute
의 사용은 API의 사용성을 향상시키고, 클라이언트와의 상호작용을 더욱 효율적으로 만듭니다. - 실습 예시:
- 위 코드는 새로운 Plant를 생성하고, 생성된 Plant의 위치(URL)를 반환하는
CreatePlant
메서드의 구현 예시입니다.GetPlant
엔드포인트에"GetPlant"
라는 이름을 부여하고, 이를CreatedAtRoute
에서 참조합니다.
- 위 코드는 새로운 Plant를 생성하고, 생성된 Plant의 위치(URL)를 반환하는
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public ActionResult<PlantDTO> CreatePlant([FromBody] PlantDTO plantDTO)
{
// Plant 생성 로직...
//3-4. CreatedAtRoute
//return Ok(plantDTO);
return CreatedAtRoute("GetPlant", new { id = plantDTO.Id }, plantDTO);
}
[HttpGet("{id}", Name = "GetPlant")]
public ActionResult<PlantDTO> GetPlant(int id)
{
// Plant 조회 로직...
}
이 방법을 통해 API는 리소스 생성 후 클라이언트에게 추가적인 정보를 제공할 수 있으며, 클라이언트는 제공된 URL을 통해 생성된 리소스를 즉시 확인할 수 있습니다. CreatedAtRoute
의 사용은 API의 사용성을 향상시키고, 클라이언트와의 상호작용을 더욱 효율적으로 만듭니다.
프로젝트 리소스
https://github.com/kimdaewoong2022/MorePlants_WebAPI/tree/c09042bef534d03e0939f8f6af7292041806fd4e