我需要调用一个流程,它不需要用户的任何输入,只需要一个触发器。我计划使用POST /uri不带正文来触发该进程。我想知道从HTTP和REST的角度来看,这是否都被认为是坏的?
如果你使用POST /uri而不带主体,这就像使用一个不带参数.e的函数。G int post (void);因此,在资源类中使用函数可以在没有参数的情况下改变对象的状态是合理的。如果你考虑实现一个URI的Unix触摸功能,这不是一个很好的选择吗?
POST是完全可以的。在GET和POST的不同之处,您正在改变系统的状态(很可能您的触发器是“做”一些事情并更改数据)。
我使用POST已经没有有效负载,它“感觉”不错。在没有有效负载的情况下使用POST时,你应该做的一件事是:传递头Content-Length: 0。我记得当我的api-client没有通过它时,一些代理出现了问题。
是的,可以发送没有正文的POST请求,而是使用查询字符串参数。但是要注意,如果参数包含HTTP无效的字符,则必须对它们进行编码。
例如,如果你需要POST 'hello world'到一个端点,你必须让它看起来像这样:http://api.com?param=hello%20world
在这种情况下,POST是OK的答案是,在Python的情况下,OpenAPI框架“FastAPI”生成一个不包含Body部分的Swagger GUI(见图),当一个方法(见下面的例子)没有接受Body的参数时。
方法“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
推荐文章
- 什么是“升级-不安全-请求”HTTP报头?
- 我如何捕捉Ajax查询后错误?
- HTTP 301和308状态码有什么区别?
- 跨REST微服务的事务?
- 什么HTTP状态码应该用于错误的输入
- application/json和application/x-www-form-urlencoded有什么区别?
- 编排microservices
- 如何使HTTP请求在PHP和不等待响应
- PATCH和PUT请求的主要区别是什么?
- 调用webrequest, POST参数
- 我可以把我所有的http://链接都改成//吗?
- URL为AJAX请求编码一个jQuery字符串
- 编译System.Net.HttpClient的查询字符串
- 摘要认证和基本认证的区别是什么?
- Axios -删除请求与请求体和头?