给出如下基本项目结构:
/
app.py <-- Flask app startup and basic routing
models.py
schema.py <-- Contains Graphene/SQLAlchemy schema definitions for queries/mutations
假设在我的app.py
我有一些基本的路由设置,如下所示:
检索数据的“正确”方法是什么?我可以看到一些不同的方法,但我不确定是否有推荐的方法,我似乎也找不到一个直接的答案。例如:
return jsonify(session.query(MembersModel).all())
我觉得这可能是正确的方法,但是在路由上直接把它放下来会感觉很奇怪(感觉好像我错过了一些服务层架构),或者我没有正确使用schema.py
。如果我采用这种方法,这是否适用于我的schema.py
?或者我应该在其他地方创建一个不同的服务型文件?
我自己直接运行一个GraphQL查询,比如通过Graphene schema.execute('{ allMembers { ... } }')
,然后将结果解析回响应中。这感觉。。。错了,当#1中有更好的替代方案时,我的代码中有硬编码的GraphQL。
我以前有过Spring的经验,我总是用MVC样式的controller <-> service <-> dao
来做,但我不确定Flask/Graphene/SQLAlchemy/GraphQL/SQLite等价物是什么。我有一种唠叨的感觉,我错过了一个明显的答案,所以如果有人能告诉我一些资源或帮助,我会很感激。在
谢谢!在
好吧,经过几个小时的阅读,我终于意识到了:我不应该像这样在restwebapi和GraphQL之间玩(忽略遗留系统/迁移等)。从本质上讲,GraphQL与REST的竞争有点像JSON与XML的竞争。在
我的印象是GraphQL相当于一个更高级别的SQL,其中GraphQL位于我的SQLite层之上,用一些新的术语和抽象(如})来抽象传统SQL。相反,GraphQL在前面提到的更高级别上竞争。在
relays
和{因此,在处理Flask、GraphQL和Graphene时,我最应该做的就是通过GraphiQL接口执行查询,或者直接将它们发布到我的服务器上,而不是做一些类似
GET /my-path/some-resource
的操作,只是在后端的某个地方手动命中一个GraphQL查询。在当然,如果我误解了什么,请告诉我!在
相关问题 更多 >
编程相关推荐