首页 > 解决方案 > Flask 端点 - 处理请求或端点本身中的数据?

问题描述

我目前正在研究一个烧瓶 API,并认为我对如何实现我的端点有一个误解。目前我这样处理我的请求:我有一个端点,然后处理请求传递的数据。

@api.route("/deleteitem")
class DeleteItem(Resource):
    def delete(self):
        item = request.get_json()["item"]
        items = [x.get("item") for x in store]
        if item in items:
            index = items.index(item)
            store.pop(index)
            return {"message": "item deleted"}, 200
        return {"message": "item not found"}, 404

在几乎每个教程中,这都是不同的处理方式:不是在请求正文中传递数据,而是直接通过端点完成,如下所示:

@api.route("/deleteitem/<string:item>")
class DeleteItem(Resource):
    def delete(self, item):
        items = [x.get("item") for x in store]
        if item in items:
            index = items.index(item)
            store.pop(index)
            return {"message": "item deleted"}, 200
        return {"message": "item not found"}, 404

我的问题是:我做错了还是只是风格问题?两者似乎都有效,但老实说,我的 API 非常简单,但我不想嵌入糟糕的编码风格。什么是可取的,为什么?

标签: pythonapirestflaskflask-restful

解决方案


我不认为您的第一次尝试本身是错误的,但第二次是首选。这可能与隐式与显式有关。在第二个示例中,很明显您将删除 1 项,并且从 url 中您已经可以知道是哪一项。如果这在正文中“隐藏”,则可能是多个项目。同样的逻辑也适用于 GET 请求。我们正在检索 1 个或多个项目吗?这也是为什么经常推荐使用复数的原因(所以不是 /item 而是 /items),然后您可以缩小范围。

似乎大多数例子似乎都同意这一点,包括这个链接中的文章以及这个


推荐阅读