尝试使用 .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.用户验证

GraphQL in ASP.NET Core 系列视频 - GraphQL简介

使用 graphql-ruby 实现联合类型