010-62840085 msh@sunitschina.cn 全国30+城市服务网络 · 1000+技术团队

GraphQL在企业API层的应用:RESTful之后的选择

旭日神州技术团队 · 2018年05月10日 · 技术干货

为什么需要GraphQL

RESTful API在过去十年是企业接口的事实标准,但随着前端应用复杂度提升,REST的局限性越来越明显:移动端需要精简数据但接口返回冗余字段、一个页面需要调用多个接口拼接数据、后端接口版本管理混乱。GraphQL正是为了解决这些问题而生。

2018年,旭日神州技术团队在多个企业项目中引入了GraphQL,本文分享实战经验。

GraphQL核心概念

类型系统

GraphQL是强类型的。整个API Schema由Object Type定义,每个字段都有明确的类型。这意味着前端可以自动生成文档和TypeScript类型定义。

查询语言

前端发送一个POST请求到GraphQL端点,请求体描述需要哪些字段、嵌套哪些对象。后端精确返回所请求的数据,不多不少。

Resolver

后端为每个字段编写Resolver函数。Resolver可以查询数据库、调用微服务、甚至聚合多个数据源。前端不需要关心数据来自哪里。

企业级落地要点

权限控制

REST接口可以通过URL粒度做权限控制,GraphQL的权限控制需要在字段级别实现。我们采用中间件方式,在Resolver执行前校验当前用户是否有权访问该字段。

性能问题:N+1查询

GraphQL最容易踩的坑是N+1查询——查询用户列表时,每个用户的信息都触发一次独立查询。解决方法是使用DataLoader进行请求合并和缓存。

错误处理

GraphQL响应中同时包含data和errors字段。部分字段出错时,其他字段仍然正常返回。这种部分成功的模式需要前端特别处理。

监控与调试

GraphiQL调试工具非常方便,但生产环境的监控需要额外建设——查询复杂度分析、慢查询日志、字段访问统计。

什么时候选GraphQL,什么时候选REST

我们的建议是:如果你的前端是多端的(Web、App、小程序),且数据需求差异大,GraphQL的收益明显;如果是简单的CRUD后台管理系统,REST已经足够,没必要为了技术先进而引入GraphQL。GraphQL的学习成本和运维复杂度都高于REST,选型时要量力而行。对于IT外包公司而言,掌握GraphQL是加分项,但不能替代对RESTful架构的深厚积累。

本文关键词:GraphQL,API设计,RESTful,后端开发,企业架构
← 上一篇(更新)
中台战略下的技术组织变革:从烟囱式到共享服务
下一篇(更早) →
云计算三国杀:阿里、腾讯、华为的企业上云选择

相关推荐

准备好开启您的数字化转型之旅了吗?

1000+技术团队 · 5000+企业客户 · 15年行业经验,期待与您合作