首页 > 解决方案 > FastAPI {"detail":"不允许的方法"}

问题描述

我正在为我的 ML 模型使用 FAST API。

我有一个管道。

lr_tfidf = Pipeline([('vect', tfidf),
                     ('clf', LogisticRegression(penalty='l2'))])


现在在 Fast API 中,当我想预测并将结果显示为 API 时,我的代码是

app = FastAPI()


@app.post('/predict')
def predict_species(data: str):
    data = np.array([data])

    prob = lr_tfidf.predict_proba(data).max()
    pred = lr_tfidf.predict(data)
    return {'Probability': f'{prob}', 
            'Predictions':f'{pred}'}

我从教程中复制了它。当我通过 FASTAPI 在 GUI 上对其进行测试时,它工作得很好,如图所示,即它显示了概率和预测。

在此处输入图像描述

当我去请求 URL 时,由 GUI 提供,即http://127.0.0.1:8000/predict?data=hello(test data is hello) 它给了我错误。

{"detail":"Method Not Allowed"}

在我的终端上,错误消息是

INFO:     127.0.0.1:42568 - "GET /predict?data=hello HTTP/1.1" 405 Method Not Allowed

标签: pythonscikit-learnfastapi

解决方案


端点的方法定义为POST( @app.post('/predict'))。当您从浏览器调用 URL 时,HTTP 方法是GET.

一个简单的解决方案是将端点方法更改为GETvia @app.get

但这很可能会违反 REST-API 端点的命名方式以及何时使用什么 HTTP 方法。一个好的起点是https://restfulapi.net/resource-naming/

或者,也许您正在实施 RPC(远程过程调用)?比它也可以不同。


推荐阅读