엔티티 본문없이 HTTP POST를 수행하는 것은 나쁜 습관으로 간주됩니까?


176

사용자의 입력이 필요없는 트리거 만 프로세스를 호출해야합니다. 본문없이 POST / uri를 사용하여 프로세스를 트리거 할 계획입니다. 이것이 HTTP 및 REST 관점 모두에서 나쁜 것으로 간주되는지 알고 싶습니다.


6
제안 해 주셔서 감사합니다. 모든 사람들이 비슷한 제안을했지만 내용이없는 POST는 괜찮습니다. IETF 토론 링크로 인해 Darrel의 답변을 올바른 것으로 선택하고 있습니다. 이 논의는 많은 것을 명확히한다.
Suresh Kumar

답변:


155

내가 물었다 이 질문을 몇 달 전 IETF HTTP 워킹 그룹에. 짧은 대답은 : 아니요, 나쁜 습관은 아닙니다 (그러나 자세한 내용은 스레드를 읽는 것이 좋습니다).


4
10 년 후 그 사실을 확인할 수있는 업데이트 된 소스가 있습니까?
Baptiste Pernet

79

GET 대신 POST를 사용하면 서버 (및 게이트웨이)가 캐시 된 응답을 반환하지 않도록 지시하기 때문에 완벽하게 합리적입니다.


50

POST는 완전히 정상입니다. POST와 GET의 차이로 시스템 상태가 변경됩니다 (거의 트리거가 무언가를 "하고"있고 데이터를 변경하는 것 같습니다).

페이로드없이 이미 POST를 사용했으며 "느낌"이 좋습니다. 페이로드없이 POST를 사용할 때해야 할 한 가지 : Pass header Content-Length: 0. api-client가 통과하지 못했을 때 일부 프록시 관련 문제를 기억합니다.


16

본문없이 POST / uri를 사용하는 경우 인수를 사용하지 않는 함수를 사용하는 것과 같습니다. 예 : int post (void); 따라서 인수없이 객체의 상태를 변경할 수있는 리소스 클래스에 기능을 갖는 것이 합리적입니다. URI에 대해 Unix touch 기능을 구현하려는 경우 좋은 선택이 아닙니까?


6
터치 / 손가락은 본질적으로 내용이없는 비등 전성 행동의 교과서입니다.
Chris Marisic

2

예. 본문없이 POST 요청을 보내고 대신 쿼리 문자열 매개 변수를 사용하는 것이 좋습니다. 그러나 매개 변수에 HTTP가 아닌 문자가 포함되어 있으면 인코딩해야합니다.

예를 들어 'hello world'를 게시하고 끝점을 게시해야하는 경우 http://api.com?param=hello%20world 와 같이 표시해야합니다.


0

이 경우 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

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.