Как объединить две службы Apollo, которые предоставляют один и тот же тип - PullRequest
5 голосов
/ 21 февраля 2020

Я новичок в apollo, и у меня есть две службы apollo, которые я хочу объединить с помощью федерации apollo:

Productservice:

extend type Query {
  job(id: String!): Job
}

type Seo {
  title: String! 
  description: String! 
  keywords: String! 
}

type Product @key(fields: "id")  {
  id: ID!
  title: String!
  seo: Seo!
}

StaffService:

extend type Query {
  staffMember(id: String!): StaffMember
}

type Seo {
  title: String! 
  description: String! 
  keywords: String! 
}

type StaffMember @key(fields: "id")  {
  id: ID!
  title: String!
  seo: Seo!
}

Как я могу использовать тип Seo в объектах ответа обоих объектов? Является ли правильная процедура для создания интерфейса Seo и реализации StaffMemberSeo и ProductSeo, или есть аннотация, позволяющая определить один и тот же тип в двух службах?

1 Ответ

1 голос
/ 01 мая 2020

Одной службе должен принадлежать тип. В этом сервисе используйте директиву @key. В ссылочных сервисах используйте @extend и включите заглушку типа с полями, используемыми этим сервисом.

Думайте об этом объявлении как о внешнем ключе в базе данных SQL.

...