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

2024-04-29 12:47:18 发布

您现在位置:Python中文网/ 问答频道 /正文

给出如下基本项目结构:

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

假设在我的app.py我有一些基本的路由设置,如下所示:

^{pr2}$

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

  1. return jsonify(session.query(MembersModel).all())我觉得这可能是正确的方法,但是在路由上直接把它放下来会感觉很奇怪(感觉好像我错过了一些服务层架构),或者我没有正确使用schema.py。如果我采用这种方法,这是否适用于我的schema.py?或者我应该在其他地方创建一个不同的服务型文件?

  2. 我自己直接运行一个GraphQL查询,比如通过Graphene schema.execute('{ allMembers { ... } }'),然后将结果解析回响应中。这感觉。。。错了,当#1中有更好的替代方案时,我的代码中有硬编码的GraphQL。

我以前有过Spring的经验,我总是用MVC样式的controller <-> service <-> dao来做,但我不确定Flask/Graphene/SQLAlchemy/GraphQL/SQLite等价物是什么。我有一种唠叨的感觉,我错过了一个明显的答案,所以如果有人能告诉我一些资源或帮助,我会很感激。在

谢谢!在


Tags: and项目方法答案pyappflask路由
1条回答
网友
1楼 · 发布于 2024-04-29 12:47:18

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

我的印象是GraphQL相当于一个更高级别的SQL,其中GraphQL位于我的SQLite层之上,用一些新的术语和抽象(如relays和{})来抽象传统SQL。相反,GraphQL在前面提到的更高级别上竞争。在

因此,在处理Flask、GraphQL和Graphene时,我最应该做的就是通过GraphiQL接口执行查询,或者直接将它们发布到我的服务器上,而不是做一些类似GET /my-path/some-resource的操作,只是在后端的某个地方手动命中一个GraphQL查询。在

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

相关问题 更多 >