如何通过Apollo Federation跨子图共享自定义标量类型?
解决Apollo Federation中自定义标量跨子图可用的问题
问题原因
@shareable指令仅支持作用于对象类型、字段、接口等元素,不能用于标量类型,这就是你启动服务时报错的原因。
解决方案
1. 修正定义标量的子图Schema
移除标量上的@shareable指令,修改后的Schema如下:
extend schema @link(url: "https://specs.apollo.dev/federation/v2.0", import: ["@key", "@shareable"]) scalar DateTime type _Service { sdl: String } # This "Book" type defines the queryable fields for every book in our data source. type Book { title: String author: String date: DateTime }
2. 在其他子图中复用标量
在需要使用DateTime标量的子图里,直接添加scalar DateTime的定义即可,不需要额外的Federation指令。
关键注意点:所有子图中DateTime标量的序列化/反序列化逻辑必须完全一致(比如统一使用ISO 8601格式处理日期),否则网关在处理跨子图请求时会出现数据解析异常。
补充说明
在Apollo Federation v2中,自定义标量默认是全局可共享的——只要不同子图中的标量名称一致,网关会自动识别并合并它们的定义,无需额外的共享类指令。
内容的提问来源于stack exchange,提问作者Joey Yi Zhao
相关产品推荐
相关产品推荐

