Flask端点-处理请求中的数据还是端点本身



我目前在一个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非常简单,但我不想嵌入糟糕的编码风格。什么更可取,为什么?

我不认为你最初的尝试是错误的,但第二次是首选。这可能与隐式与显式有关。在第二个例子中,很明显你将删除1个项目,从url中你已经可以知道是哪一个了。如果这是";隐藏的";在身体里,它可能是多个项目。同样的逻辑也适用于GET请求。我们正在检索1个或多个项目吗?这也是为什么经常推荐复数形式(所以不是/item,而是/items(,然后可以缩小范围。

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

最新更新