Graphene/Flask/SQLAlchemy - 从路由入口点检索数据的推荐方法是什么?

Graphene/Flask/SQLAlchemy - What is the recommended method to retrieve data from a route entry point?

给定一个基本的项目结构如下:

/
 app.py     <-- Flask app startup and basic routing
 models.py 
 schema.py  <-- Contains Graphene/SQLAlchemy schema definitions for queries/mutations

在我的 app.py 中说我有一些基本的路线设置如下:

@app.route('/members/list', methods=['GET'])
def members():
    # What should I do here?

"correct" 检索数据的方法是什么?我可以看到几种不同的方法,但我不确定是否有推荐的方法,而且我似乎找不到直接的答案。例如:

  1. return jsonify(session.query(MembersModel).all()) 我觉得这可能是正确的方式,但是把它直接放在路由上感觉很奇怪(感觉我缺少一些服务层架构)或者那个我没有正确使用 schema.py。如果我要采用这种方法,它会出现在我的 schema.py 中吗?或者我应该在别处制作不同的服务式文件吗?

  2. 运行 我自己直接通过 Graphene 进行 GraphQL 查询,例如 schema.execute('{ allMembers { ... } }')(如 here 所示),然后在响应中解析我的结果。这感觉……不对,当 #1 中有更好的替代方案时,在我的代码中硬编码了 GraphQL。

我之前有使用 Spring 的经验,并且我总是使用 controller <-> service <-> dao 样式的 MVC 来完成它,但我不确定 Flask/Graphene/SQLAlchemy/GraphQL/SQLite 的等价物是什么。我有一种挥之不去的感觉,我在这里缺少一个明显的答案,所以如果有人可以指导我获取一些资源或提供帮助,我将不胜感激。

谢谢!

好吧,经过几个小时的阅读,我终于意识到:我不应该像这样在 REST web api 和 GraphQL 之间游玩(忽略遗留 systems/migrations/etc)。从本质上讲,GraphQL 与 REST 的竞争有点像 JSON 与 XML 的竞争。

我的印象是 GraphQL 可以与更高级别的 SQL 相媲美,其中 GraphQL 位于我的 SQLite 层之上,并抽象出传统的 SQL 和一些新的-像 relaysconnections 这样的术语和抽象概念。相反,如前所述,GraphQL 的竞争水平更高。

因此,在处理 Flask、GraphQL 和 Graphene 时,我最多应该做的是通过 GraphiQL 界面执行查询,或者 POST 直接向我的服务器执行查询 - 而 不是 做类似 GET /my-path/some-resource 的事情,只是为了在后端某处手动点击 GraphQL 查询。

当然,如果我误解了什么,请告诉我!