728x90
반응형

PUT 을 사용한 대체를 위한 수정

아이템을 수정하기 위해 HTTP PUT 동작을 사용할 수 있습니다.

 

입력 데이터를 (예를 들어 NoSQL 데이터베이스와 사용하기 위해) JSON으로 저장될 수 있게 변환되도록 jsonable_encoder 를 사용할 수 있습니다. 예를 들어, datetimestr 로 변환하는 것입니다.

 

 

PUT 는 존재하는 데이터를 대체하는 데이터를 전달 받을 때 사용됩니다.

 

대체 관련 주의사항

이것은 만약 PUT 을 사용하여 아이템 bar 를 수정하고 싶을 때 바디에 포함되어야 할 것은 아래와 같습니다:

 

 

왜냐하면 이미 저장되어 있는 어트리뷰트 "tax": 20.2 는 포함하지 않고, 입력 모델은 기본 값 "tax": 10.5 을 취하기 때문입니다.

 

그리고 데이터에 "새로운" tax 의 값인 10.5 가 저장됩니다.

 

PATCH 를 사용한 부분 수정

HTTP PATCH 동작을 사용하여 부분적으로 데이터를 수정할 수 있습니다.

 

이것은 나머지는 온전하게 놔두고, 오로지 수정하고 싶은 데이터만 전송해야 하는 걸 의미합니다.

 

참고

PATCHPUT 보다 덜 자주 사용되며 덜 알려져있습니다.

심지어 부분 수정을 할 때도, 많은 팀이 PUT 만 사용합니다.

FastAPI는 어떤 제약도 강요하지 않기 때문에, 원하는 대로 자유롭게 사용할 수 있습니다.

그러나 이 가이드는, 그것들이 어떻게 사용되도록 의도되었는지, 어느 정도 보여줍니다.

 

Pydantic의 exclude_unset 매개변수 사용

부분 수정본을 전달 받길 원한다면, Pydantic 모델의 .dict() 에 포함되어 있는 매개변수 exclude_unset 을 사용하는 게 유용합니다.

 

예를 들면 item.dict(exclude_unset=True) 와 같습니다.

 

item 모델을 만들 때 기본 값을 제외한, 집합인 데이터만을 사용하여 dict 을 생성합니다.

 

그러면 기본 값을 생략한, (요청 속에 전달 한) 집합인 데이터만을 dict 을 생성하는 데 사용할 수 있습니다:

 

 

Pydantic의 update 매개변수 사용

이제, .copy() 를 사용하여 존재하는 모델의 복사본을 생성할 수 있고 수정되어야 할 데이터를 포함하고 있는 dict 을 사용한 update 매개변수를 전달합니다.

 

예를 들면 stored_item_model.copy(update=update_data) 와 같습니다:

 

 

부분 수정 요약

요약하면, 부분 수정을 저용하기 위해:

 

  • (마음 대로) PUT 대신 PATCH 를 사용합니다.
  • 저장된 데이터를 검색합니다.
  • Pydantic 모델에 데이터를 넣습니다.
  • ( exclude_unset 를 사용하여) 입력 모델로부터 기본 값을 제외한 dict 을 생성합니다.
    • 이 방법으로 모델 속에 기본 값을 사용하여 이미 저장되어 있는 값을 재정의하는 대신, 사용자에 의해 실제로 설정된 값만 수정할 수 있습니다.
  • 저장된 모델의 복사본을 생성하고, ( update 매개변수를 사용하여) 전달 받은 부분 수정본을 사용한 어트리뷰트를 수정합니다.
  • (예를 들어, jsonable_encoder 를 사용하여) 복사된 모델을 DB에 저장될 수 있게 변환합니다.
    • 이것은 모델의 .dict() 메서드를 다시 사용하는 것과 호환되지만, 값을, 예를 들어, datetimestr 로 변환하듯, JSON으로 변환된 데이터 자료형으로 확실히 (또 변환) 해야 합니다.
  • DB에 데이터를 저장합니다.
  • 수정된 모델을 반환합니다.

 

 



실제로 이것과 동일한 기술을 HTTP PUT 동작에도 사용할 수 있습니다.

그러나 여기에 있는 예시는 이러한 사용 사례를 위해 만들어졌기 때문에 PATCH 를 사용합니다.

 

참고

입력 모델은 여전히 유효해야 한다는 걸 명심하기 바랍니다.

따라서, 모둔 어트리뷰트가 생략될 수 있는 부분 수정본을 전달 받고 싶다면, (기본 값 또는 None 을 사용하는) 선택사항이라 표시되어 있는 모든 어트리뷰트를 사용한 모델을 갖고있어야 합니다.

수정을 위해 모든 선택적 값을 가진 모델과 생성을 위해 필수적으로 요구되는 값을 가진 값을 구분하기 위해, 추가 모델에 설명된 개념을 사용할 수 있습니다.

 


원문

https://fastapi.tiangolo.com/tutorial/body-updates/

 

Body - Updates - FastAPI

Body - Updates Update replacing with PUT To update an item you can use the HTTP PUT operation. You can use the jsonable_encoder to convert the input data to data that can be stored as JSON (e.g. with a NoSQL database). For example, converting datetime to s

fastapi.tiangolo.com

728x90
반응형