GraphQL 有什么优缺点

2022-03-12 15:37:31 +08:00
 Ayanokouji

如果后端主导使用 GraphQL ,请问使用,还需要避免踩那些坑

6928 次点击
所在节点    程序员
30 条回复
Weny
2022-03-13 02:59:36 +08:00
相对来说门槛高… 一般来说全栈会倾向选 graphql 。 生态也都很不错,我们在用的 urql,code-generator 可以做到前端包括小程序开发体验都是一致的。我们有一些小项目或者内部的项目,用 graphql 暴露了一套根据 entity 生成的 mongodb query dto 给到前端😂
twocucao
2022-03-13 07:18:28 +08:00
之前写过一篇文章, 结论大致是 1. 对前端来说很利好. 2. 但对后端来说, 问题蛮多的

- View 层代码组织剧变
- 权限问题
- 版本更迭
- required vs nullable vs blank
- 服务端缓存
- 嵌套式 API
- N+1 问题
- 为名所困

https://zhuanlan.zhihu.com/p/384196319
loading
2022-03-13 08:15:29 +08:00
云里雾里,我选择用普通 api 方式。
ichou
2022-03-13 09:58:02 +08:00
优点:
没人动不动找我改 api 了

缺点:
太难了
特别是 Apollo 引入的复杂度,导致在异常监控、限流、鉴权、缓存方面处理起来贼复杂
OliveGlaze
2022-03-13 10:28:56 +08:00
@reeco 多少能减少一些沟通成本。我觉得沟通成本也是工作量,不只是你的代码量才是你的工作量。
ZSeptember
2022-03-13 12:43:26 +08:00
@pluswu1986 准备搞 GraphQL ,想问下为什么会有复杂查询问题,Query 应该是后端可以控制提供的吧,可以确保 Query 都走索引,前端只是控制字段扩展什么的吧。
没有限制的话,不就是把整个 db 都暴露出去了吗
ZSeptember
2022-03-13 12:45:49 +08:00
@XCFOX Apollo 客户端一个项目,只能接一个 endpoint ?后端,准备搞点项目,用 GraphQL ,想的方案是一部分代理到已有的 GraphQL 服务,一部分新写。
lixm
2022-03-14 10:55:01 +08:00
沟通成本,代码生成, 其实完全可以用 openapi 规范来实现
GraphQL 对后端还是太不友好了
Ayanokouji
2022-03-18 01:10:27 +08:00
@ZSeptember graphql 跟数据库无关吧,我理解的,比如 rest 需要查 ID ,name 俩个字段,数据库是 id ,name ,age 三个字段,通常 orm 都是这三个字段都查出来,返回两个,graphql 的逻辑处理应该跟 rest 的一样,只不过 http 的 response 只返回 id 和 name 而已
pluswu1986
294 天前
@ZSeptember 没法控制客户端用各种你想不到的姿势查聚合,而且默认 go graphQL AST 解析就贼慢,普通 HTTP 接口你可以针对特定 URI 做缓存提前聚合最主要时职责清晰谁接口慢就搞谁,不该给客户端的数据就不给,GQL 查询缓存得针对查询级别的然后防不住客户端查询拉不合理的数据,一个查询可能在复杂度超标不超标边缘作死,N 个查询就是大家都不行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/839880

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX