由于我对 Python 以及 Flask 非常陌生,因此我对惯例、最佳实践和常用知识感到困惑。我尝试遵循 Microsoft 提供的示例(因为我们正在使用 Azure),我开始怀疑它们可能是... Microsoft'ish(即“它有效,但是...”)。
根据各种示例,我创建了两个端点,它们进行相同的计算,从而产生等效的有效载荷(但结构不同!),我无法确定哪种方法是推荐的。一种是使用资源(与路由相结合),另一种是显式路由。
from flask import Flask
from flask_restful import Api, Resource, request
from logic import compute
app = Flask(__name__)
api = Api(app)
class computer (Resource):
def get(self):
return compute(request.args.to_dict())
api.add_resource(computer, "/compute-resource")
@app.route("/compute-route", methods=["GET"])
def execute():
return compute(request.args.to_dict())
if __name__ == "__main__":
app.run()
我在输出中注意到的唯一(奇怪的是出乎意料的)是后者似乎按字母顺序对返回的 JSON 字段进行排序,而第一个却没有。
- 这两种方法中哪一种更可取或者它们是否同样适用?
- 字段排序的偏差说明了什么问题?
您的问题涉及设计 Flask API 时常见的困境:是使用基于Flask-RESTful 的
Resource
方法还是基于 Flask 路由的方法。两者都有效且各有千秋,具体取决于您的用例和偏好。主要区别
Flask-RESTful(
Resource
):GET
)的逻辑。POST
PUT
DELETE
例子:
基于路线的方法(
@app.route
):jsonify
函数(Flask 隐式使用@app.route
)在序列化为 JSON 时默认按字母顺序对键进行排序。例子:
最佳实践
何时使用Flask-RESTful:
何时使用基于路线:
你的情况
由于两种方法都会产生相同的结果,唯一的区别是字段顺序:
关于字段排序
字段排序的偏差是由于:
json
库,它保留了字典的插入顺序。jsonify
,它sort_keys=True
在转储 JSON 时默认应用。如果您想控制基于路由的方法中的字段排序,您可以像这样禁用排序:
推荐
为了实现可维护性和可扩展性,尤其是在使用 Azure 或类似平台时,请采用 Flask-RESTful
Resource
。它符合 REST API 标准,并随着项目的增长保持代码井然有序。