尝试使用 .NET Core GraphQL 联合子图时,Apollo 联合网关返回错误
Posted
技术标签:
【中文标题】尝试使用 .NET Core GraphQL 联合子图时,Apollo 联合网关返回错误【英文标题】:Apollo Federated Gateway returns an error when trying to use a .NET Core GraphQL federated subgraph 【发布时间】:2021-08-19 04:14:02 【问题描述】:我正在努力学习 Apollo Federation,因此我首先查看了他们的示例 (https://github.com/apollographql/federation-demo)。这个示例存储库很好用,我可以在 Node.js 中添加一个新服务作为子图。
我还想在 .NET Core 中添加一个新服务作为子图,以扩展示例项目中定义的 User
类型。为此,我使用 graphql-dotnet 创建了一个新服务。
我的架构定义如下:
extend type User @key(fields: "id")
id: ID! @external
phone: String
GraphQL Playground 似乎工作正常,但是当我尝试将服务包含在我的网关中时,我收到以下错误:UnhandledPromiseRejectionWarning: Error: Couldn't load service definitions for "user-service" at http://localhost:5000/graphql: Syntax Error: Expected Name, found "".
【问题讨论】:
【参考方案1】:显然,这是由于如果不扩展查询类型,graphql-dotnet 服务器 NuGet 包(当前为 5.0.2)不会生成正确的 SDL。服务正常启动,我可以导航到 UI Playground。
查询:
query
_service
sdl
结果(json):
"data":
"_service":
"sdl": "type Query \r\n\r\n\r\n\r\nextend type User @key(fields: \"id\") \r\n id: ID! @external\r\n phone: String\r\n\r\n"
,
"extensions":
请注意,graphql-dotnet 在 SDL 中生成了一个空的 type Query \r\n\r\n
部分,它不应该存在,因为我没有在我的架构中扩展查询类型。我用 graphql-dotnet github 项目打开了一个issue。
解决方法可能是使用新功能扩展查询类型,至少在问题得到解决之前。
【讨论】:
以上是关于尝试使用 .NET Core GraphQL 联合子图时,Apollo 联合网关返回错误的主要内容,如果未能解决你的问题,请参考以下文章
使用Hot Chocolate创建ASP.NET Core GraphQL服务
.Net Core 上的 GraphQL、MongoDB - 中间件?
.NET Core 3.1 + GraphQL + MongoDB
[视频]使用ASP.NET Core开发GraphQL服务 - 8.用户验证