답변:
내가 물었다 이 질문을 몇 달 전 IETF HTTP 워킹 그룹에. 짧은 대답은 : 아니요, 나쁜 습관은 아닙니다 (그러나 자세한 내용은 스레드를 읽는 것이 좋습니다).
본문없이 POST / uri를 사용하는 경우 인수를 사용하지 않는 함수를 사용하는 것과 같습니다. 예 : int post (void); 따라서 인수없이 객체의 상태를 변경할 수있는 리소스 클래스에 기능을 갖는 것이 합리적입니다. URI에 대해 Unix touch 기능을 구현하려는 경우 좋은 선택이 아닙니까?
예. 본문없이 POST 요청을 보내고 대신 쿼리 문자열 매개 변수를 사용하는 것이 좋습니다. 그러나 매개 변수에 HTTP가 아닌 문자가 포함되어 있으면 인코딩해야합니다.
예를 들어 'hello world'를 게시하고 끝점을 게시해야하는 경우 http://api.com?param=hello%20world 와 같이 표시해야합니다.
이 경우 POST가 정상이라는 답변에 대한 지원은 Python의 경우 OpenAPI 프레임 워크 "FastAPI"는 메소드 (아래 예 참조)가 없을 때 본문 섹션을 포함하지 않는 Swagger GUI (이미지 참조)를 생성한다는 것입니다. 본문을 수락하는 매개 변수가 있습니다.
"post_disable_db"메소드는 경로 매개 변수 "db_name"만 허용하며 필수 본문을 의미하는 두 번째 매개 변수는 없습니다.
@router.post('/{db_name}/disable',
status_code=HTTP_200_OK,
response_model=ResponseSuccess,
summary='',
description=''
)
async def post_disable_db(db_name: str):
try:
response: ResponseSuccess = Handlers.databases_handler.post_change_db_enabled_state(db_name, False)
except HTTPException as e:
raise (e)
except Exception as e:
logger.exception(f'Changing state of DB to enabled=False failed due to: {e.__repr__()}')
raise HTTPException(HTTP_500_INTERNAL_SERVER_ERROR, detail=e.__repr__())
return response