使用 apollo-federation 独立构建 GraphQL 服务
Building GraphQL services in isolation with apollo-federation
我目前正在尝试测试 1 个服务的 graphql 端点,该端点最终将成为 apollo-federation/gateway graphql 服务器的一部分。该服务将扩展现有联合图中现有服务的类型。
如果我想用 apollo-federation & gateway 单独测试我的服务,有没有办法在我的 graphql 架构中使用 @extends
和 @external
的同时做到这一点?目前网关抛出:UnhandledPromiseRejectionWarning: Error: Unknown type: "SomeTypeInAnotherServer"
,这是有道理的,因为没有类型可以扩展,但我可以以某种方式忽略此验证吗?
正如@xadm 在评论中发表的那样,您可以使用 https://github.com/xolvio/federation-testing-tool 来解决我的问题。
你的问题看起来像是在尝试开发,但你给出的答案看起来像是专门在做 测试。我不知道那是你因为工具而结束的地方,还是那是你的实际问题,但这是我对开发人员的回答:
如果您只是 运行 其中一项服务,您仍然可以对其进行查询,只需按照 ApolloGateway 的方式进行即可。比如说,你有一个 person-service 和一个 place-service,人们可以访问很多地方:
个人服务
type Person @key(fields: "id") {
id: ID!
name: String
}
type Query {
person(id: ID): Person # Assuming this is the only entry-point
}
地点服务
type Place {
id: ID!
name: String
}
extend type Person @key(fields: "id") {
id: ID!
placesVisited: [Place]
}
现在您可以对地点服务进行以下查询:
query ($_representations: [_Any!]!) {
_entities(representations:$_representations) {
... on Person {
id
placesVisited {
id
name
}
}
}
}
这是您的输入:
{
"_representations": [{
"__typename": "Person",
"id": "some-id-of-some-person"
}]
}
我目前正在尝试测试 1 个服务的 graphql 端点,该端点最终将成为 apollo-federation/gateway graphql 服务器的一部分。该服务将扩展现有联合图中现有服务的类型。
如果我想用 apollo-federation & gateway 单独测试我的服务,有没有办法在我的 graphql 架构中使用 @extends
和 @external
的同时做到这一点?目前网关抛出:UnhandledPromiseRejectionWarning: Error: Unknown type: "SomeTypeInAnotherServer"
,这是有道理的,因为没有类型可以扩展,但我可以以某种方式忽略此验证吗?
正如@xadm 在评论中发表的那样,您可以使用 https://github.com/xolvio/federation-testing-tool 来解决我的问题。
你的问题看起来像是在尝试开发,但你给出的答案看起来像是专门在做 测试。我不知道那是你因为工具而结束的地方,还是那是你的实际问题,但这是我对开发人员的回答:
如果您只是 运行 其中一项服务,您仍然可以对其进行查询,只需按照 ApolloGateway 的方式进行即可。比如说,你有一个 person-service 和一个 place-service,人们可以访问很多地方:
个人服务
type Person @key(fields: "id") {
id: ID!
name: String
}
type Query {
person(id: ID): Person # Assuming this is the only entry-point
}
地点服务
type Place {
id: ID!
name: String
}
extend type Person @key(fields: "id") {
id: ID!
placesVisited: [Place]
}
现在您可以对地点服务进行以下查询:
query ($_representations: [_Any!]!) {
_entities(representations:$_representations) {
... on Person {
id
placesVisited {
id
name
}
}
}
}
这是您的输入:
{
"_representations": [{
"__typename": "Person",
"id": "some-id-of-some-person"
}]
}