如何复用GraphQL接口描述?避免SDL注释重复的方法
复用GraphQL字段注释的几种方案
好问题!在GraphQL里重复写相同注释确实挺麻烦的,我给你分享几个实用的方法来解决这个问题:
1. 利用框架的字段注释继承特性
很多主流的GraphQL服务端框架(比如Apollo Server、Hasura)都支持自动继承接口字段的注释到实现类型。这意味着你只需要在接口的字段上写一次注释,实现该接口的类型对应字段会自动复用这个注释,不用重复编写。
示例代码:
interface Person { # describes how the person is called name: String } type Student implements Person { name: String # 这里无需重复写注释,框架会自动同步接口的注释内容 }
不过要注意,这个特性依赖于你使用的具体GraphQL实现,建议先查一下框架文档确认是否支持。
2. 自定义描述指令复用注释
如果你的框架不支持自动继承,或者需要更灵活的注释管理,可以自定义一个@description指令,把注释内容封装进去,然后在需要的字段上引用这个指令:
# 先定义一个用于描述字段的自定义指令 directive @description(text: String!) on FIELD_DEFINITION interface Person { name: String @description(text: "describes how the person is called") } type Student implements Person { name: String @description(text: "describes how the person is called") }
虽然看起来还是要写指令参数,但如果后续需要修改注释内容,只需要改指令的参数值即可,不用逐个字段修改,也算一种间接的复用。
3. 用代码生成工具自动同步注释
如果你的项目使用了GraphQL代码生成工具(比如GraphQL Code Generator),可以通过配置插件来实现注释的自动同步。你只需要在接口字段上维护注释,代码生成工具会自动把注释同步到所有实现该接口的类型字段上,完全省去手动重复编写的麻烦。
比如在codegen.yml里配置相关的SDL处理插件,就能实现这个功能,具体配置可以参考工具的官方文档。
内容的提问来源于stack exchange,提问作者Waog
相关产品推荐
相关产品推荐

