Как использовать Apollo-Gateway с инструментом swagger-to-graphql?
Я использую Swagger Petstore через swagger-to-graphql
Модуль npm и возможность запустить GraphQL Playground для него.
graphQLSchema('./swagger.json', 'http://petstore.swagger.io/v2', {
Authorization: 'Basic YWRkOmJhc2ljQXV0aA=='
}).then(schema => {
const app = express();
app.use('/', graphqlHTTP(() => {
return {
schema,
graphiql: true
};
}));
app.listen(4001, 'localhost', () => {
console.info('http://localhost:4001/');
});
}).catch(e => {
console.log(e);
});
Тем не менее, когда я пытался передать службу Apollo Gateway, он бросает Error: Apollo Server requires either an existing schema or typeDefs
const gateway = new ApolloGateway({
serviceList: [
{ name: 'pet', url: 'http://localhost:4001' }
],
});
const server = new ApolloServer({
gateway,
// Currently, subscriptions are enabled by default with Apollo Server, however,
// subscriptions are not compatible with the gateway. We hope to resolve this
// limitation in future versions of Apollo Server. Please reach out to us on
// https://spectrum.chat/apollo/apollo-server if this is critical to your adoption!
subscriptions: false,
});
server.listen().then(({ url }) => {
console.log(` Server ready at ${url}`);
});
Что мне не хватает?
1 ответ
Из документов:
Преобразование существующей схемы в федеративную службу является первым шагом в построении федеративного графа. Для этого мы будем использовать функцию buildFederatedSchema() из пакета @apollo/federation.
Вы не можете предоставить только какой-либо существующий сервис для шлюза - сервис должен соответствовать спецификации федерации. Единственный способ сделать это сейчас - это использовать buildFederatedSchema
создать схему сервиса. В это время, buildFederatedSchema
не принимает существующие схемы, поэтому федерация несовместима с любыми другими инструментами, которые генерируют схему для вас. Надеемся, что эта функция будет добавлена в ближайшее время.