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" 检索数据的方法是什么?我可以看到几种不同的方法,但我不确定是否有推荐的方法,而且我似乎找不到直接的答案。例如:
return jsonify(session.query(MembersModel).all())
我觉得这可能是正确的方式,但是把它直接放在路由上感觉很奇怪(感觉我缺少一些服务层架构)或者那个我没有正确使用 schema.py
。如果我要采用这种方法,它会出现在我的 schema.py
中吗?或者我应该在别处制作不同的服务式文件吗?
运行 我自己直接通过 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 和一些新的-像 relays
和 connections
这样的术语和抽象概念。相反,如前所述,GraphQL 的竞争水平更高。
因此,在处理 Flask、GraphQL 和 Graphene 时,我最多应该做的是通过 GraphiQL 界面执行查询,或者 POST 直接向我的服务器执行查询 - 而 不是 做类似 GET /my-path/some-resource
的事情,只是为了在后端某处手动点击 GraphQL 查询。
当然,如果我误解了什么,请告诉我!
给定一个基本的项目结构如下:
/
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" 检索数据的方法是什么?我可以看到几种不同的方法,但我不确定是否有推荐的方法,而且我似乎找不到直接的答案。例如:
return jsonify(session.query(MembersModel).all())
我觉得这可能是正确的方式,但是把它直接放在路由上感觉很奇怪(感觉我缺少一些服务层架构)或者那个我没有正确使用schema.py
。如果我要采用这种方法,它会出现在我的schema.py
中吗?或者我应该在别处制作不同的服务式文件吗?运行 我自己直接通过 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 和一些新的-像 relays
和 connections
这样的术语和抽象概念。相反,如前所述,GraphQL 的竞争水平更高。
因此,在处理 Flask、GraphQL 和 Graphene 时,我最多应该做的是通过 GraphiQL 界面执行查询,或者 POST 直接向我的服务器执行查询 - 而 不是 做类似 GET /my-path/some-resource
的事情,只是为了在后端某处手动点击 GraphQL 查询。
当然,如果我误解了什么,请告诉我!