Использование собственного клиента Apollo с AWS AppSync
Задний план
В новом проекте, над которым я работаю, мы изучаем возможность использования AppSync для нашего сервера GraphQL (с Amplify). Однако, поскольку это зависит от старой версии Apollo Client (2.4.6), а Apollo Client внес серьезные изменения в версию 3.0, использование AwsAppSyncClient не является оптимальным. Мы не можем дождаться, пока AppSync перейдет на Apollo Client 3.0, поэтому мне интересно, лучше ли сейчас использовать собственный клиент с Apollo Client 3.0 и перейти на AwsAppSyncClient после того, как их зависимость Apollo будет перенесена на 3.0. Это хорошая идея? Текущую реализацию этого можно найти ниже. Однако здесь возникает несколько новых вопросов.
(Это мой первый вопрос о переполнении стека, так что надеюсь, это не слишком много!)
Я провел довольно много исследований, но я все еще новичок в теме GraphQL, Apollo, AppSync и Amplify, поэтому подумал, что лучше спросить у экспертов!
Вопросы
- Как лучше всего совместить Apollo Client 3.0 с AppSync (см. Реализацию ниже)? Что вы теряете, не используя AwsAppSyncClient?
- Можно ли при использовании настраиваемого клиента Apollo с AppSync запрашивать локальные и удаленные данные в одном запросе (например, с помощью тега @client)?
- Есть ли способ управлять локальным состоянием с помощью AwsAppSyncClient, как с ApolloClient, используя, например, реактивные переменные?
Дополнительный вопрос об использовании AppSync:
(Не знаю, стоит ли мне создавать для этого отдельный вопрос?)
- Как запросы с AppSync на самом деле работают в отношении разработки запросов от клиента? Насколько я понимаю с GraphQL, весь смысл состоит в том, чтобы объединить то, что было бы несколькими вызовами REST, а также запросить только те поля, которые действительно актуальны. Однако с AppSync и codegen
queries.js
а такжеmutations.js
файлы автоматически генерируются только с "базовыми" запросами для каждой модели со всеми включенными полями; очень похоже на вызовы REST. Для чего это делается и как с этим работать со стороны клиента?
Использование AppSync с настраиваемым клиентом (Apollo Client 3.0)
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
import Amplify from "aws-amplify";
import {
ApolloProvider,
ApolloClient,
ApolloLink,
createHttpLink,
InMemoryCache,
makeVar
} from "@apollo/client";
import { createAuthLink } from "aws-appsync-auth-link";
import awsExports from "./aws-exports";
Amplify.configure(awsExports);
const sidebarCollapsedVar = makeVar(false);
const link = ApolloLink.from([
createAuthLink({
url: awsExports.aws_appsync_graphqlEndpoint,
region: awsExports.aws_appsync_region,
auth: {
type: awsExports.aws_appsync_authenticationType,
apiKey: awsExports.aws_appsync_apiKey,
},
}),
createHttpLink({ uri: awsExports.aws_appsync_graphqlEndpoint }),
]);
const client = new ApolloClient({
link,
cache: new InMemoryCache({
typePolicies: {
Query: {
fields: {
sidebarCollapsed: {
read() {
return sidebarCollapsedVar();
},
},
},
},
},
}),
});
ReactDOM.render(
<React.StrictMode>
<ApolloProvider client={client}>
<App />
</ApolloProvider>
</React.StrictMode>,
document.getElementById("root")
);
1 ответ
- Как лучше всего совместить Apollo Client 3.0 с AppSync, большинство дискуссий приводит к:
AWS appsync, много обсуждений, но нет решений для автономного режима
Статья: «Создайте собственный клиент Apollo для AWS AppSync для использования хуков» , нет решений для автономного режима 3.[Статья «Миграция response-apollo с v2 на v3 вместе с AWS AppSync»] , нет решений для автономного режима
В статье «Как заставить AWS AppSync работать с автономной поддержкой и React Hooks» есть зависимости от некоторых дополнительных библиотек, но я не уверен, что вы готовы использовать ее в производственной среде.