Express を使用して、ゲートウェイのスキーマを更新できます。ApolloGateway には、load()
実装サービスからスキーマをフェッチする機能があります。自動化が必要な場合、この HTTP 呼び出しは展開プロセスの一部になる可能性があります。私はポーリングやあまりにも自動化されたものには行きません。実装サービスがデプロイされると、更新されて再度デプロイされるまで、スキーマは変更されません。
import { ApolloGateway } from '@apollo/gateway';
import { ApolloServer } from 'apollo-server-express';
import express from 'express';
const gateway = new ApolloGateway({ ...config });
const server = new ApolloServer({ gateway, subscriptions: false });
const app = express();
app.post('/refreshGateway', (request, response) => {
gateway.load();
response.sendStatus(200);
});
server.applyMiddleware({ app, path: '/' });
app.listen();
更新:関数は、スキーマをリロードする前にload()
をチェックするようになりました。phase === 'initialized'
回避策は、を使用するgateway.loadDynamic(false)
か、場合によっては変更することgateway.state.phase = 'initialized';
です。loadDyamic()
状態を変更すると、後で問題が発生する可能性があるため、お勧めします。この更新の時点で Apollo Federation を使用していないため、これらのソリューションのいずれもテストしていません。