【译】GraphQL API 设计最佳实践

5,947 阅读3分钟
原文链接: github.com

以下是由 Lee Byron 提出的 GraphQL API 设计最佳实践, 他是 GraphQL 峰会上 Facebook 的设计技术专家。

重视命名

最常见的情况是,你命名了一个名称,意识到这个命名有问题之后,于是决定重命名。可问题是,图形化 API 中某字段一旦被客户端使用,就不可更改了。所以错误命名的成本可能是高昂的。时刻反问一个重要的问题来提醒自己:“新来的工程师是否能够明白这一命名的含义?”时刻铭记有些工程师会绕过文档,尝试各种他们想当然的字段名称。当查询书名时,通常使用 “title” 字段,这说明定义的名称需要是自文档化的,并且含义要和实际用途保持接近。

前瞻性设计

为了避免未来破坏性的变更,前瞻性设计十分必要。自问一个问题很有帮助:“这个产品或功能的下一个版本可能是什么样的?” 设计 API 时,心中要有下一版本的雏形,然后根据雏形设计 API。设想这个 API 是否能够支持心中理想的未来产品的需要。

从 Graph 角度思考,而不是 endpoint 角度

大多数传统的 API 都是从一些新的产品体验开始的,并且根据这些体验向后设计 API。GraphQL 则不同,它在一个 endpoint 中暴露所有数据。如果你考虑的是 endpoint,你可能会创建多个 object,根据用途单独定义对象,而不是描述建模数据的语义。如果你将这个问题作为 Graph 中的对象,并将数据与你正在构建的功能分离开来,结果就是一个单一的、内聚的 Graph。

描述数据,而不是视图

确保没有将 API 与当前客户端需求紧密联系在一起,比如手机 app。创建的 API 只用于 TV app,而不适用于 web app,这当然不是你想要的。保持关注数据的语义,而不是过多地关注视图。反问自己一个问题:“这个 API 适用于未来客户端吗?”

GraphQL 是简化的接口

记住,GraphQL 是设计用于当前系统之上简化接口,仍然需要搭建系统。

隐藏实现细节

当设计 API 时,问自己的一个问题,“如果底层实现变更了怎么办?” 诸如数据库从 SQL 迁移到 Mongo 之类的。变更之后这个 API 是否仍旧适用?最佳实践允许我们快速创建原型,轻松扩展,不需要中断客户端就能部署新的服务。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏