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

Posted

技术标签:

【中文标题】Graphene/Flask/SQLAlchemy - 从路由入口点检索数据的推荐方法是啥?【英文标题】:Graphene/Flask/SQLAlchemy - What is the recommended method to retrieve data from a route entry point?Graphene/Flask/SQLAlchemy - 从路由入口点检索数据的推荐方法是什么? 【发布时间】:2020-01-28 16:49:12 【问题描述】:

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

/
 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?

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

    return jsonify(session.query(MembersModel).all()) 我觉得这可能是正确的方法,但是在路线上直接把它放下感觉很奇怪(感觉我缺少一些服务层架构)或者我没有使用@ 987654326@ 正确。如果我要采用这种方法,这是否与我的schema.py 一起使用?还是我应该在其他地方制作不同的服务式文件?

    schema.execute(' allMembers ... ') 一样通过石墨烯(如here 所示)由我自己直接运行 GraphQL 查询,然后在响应中解析我的结果。这感觉……错了,当 #1 中有更好的替代方案时,我的代码中硬编码了 GraphQL。

我之前有使用 Spring 的经验,并且我总是使用 controller &lt;-&gt; service &lt;-&gt; dao 样式的 MVC,但我不确定 Flask/Graphene/SQLAlchemy/GraphQL/SQLite 等价物是什么。我有一种烦人的感觉,我在这里错过了一个明显的答案,所以如果有人可以指导我获取一些资源或提供帮助,我将不胜感激。

谢谢!

【问题讨论】:

【参考方案1】:

好的,经过数小时的阅读,我终于意识到:我不应该像这样在 REST Web api 和 GraphQL 之间玩(忽略遗留系统/迁移/等)。从本质上讲,GraphQL 与 REST 的松散竞争类似于 JSON 与 XML 的竞争。

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

所以,在处理 Flask、GraphQL 和 Graphene 时,我应该做的最多的事情是通过 GraphiQL 接口执行查询或直接将它们发送到我的服务器 - 执行类似 @987654323 的操作@ 只是为了在后端的某个地方手动点击 GraphQL 查询。

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

【讨论】:

以上是关于Graphene/Flask/SQLAlchemy - 从路由入口点检索数据的推荐方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章