Я пытаюсь интегрировать IDE GraphiQL в свой веб-сайт, и мне интересно, могу ли я получить совет о том, лучше ли мне использовать Apollo Client, который использует остальная часть сайта, или использовать Isomorphic Fetch, как рекомендовано в документации.
Если я использую Apollo Client, то у меня есть только одно соединение, о котором нужно беспокоиться, и мне не нужно думать об обеспечении правильной аутентификации, но код более сложный.
У меня есть этот код, работающий для функции сборщика, но пока он работает только с запросами, и, насколько я понимаю, потребуется изрядный объем работы для работы с мутациями.
graphQlFetcher = (params) => {
return this.props.client.query({
query: gql`
${params.query}
`
}).then(function(result) {
return result;
});
}
В качестве альтернативы существует подход изоморфной выборки, но для того, чтобы это сработало, мне нужно сначала получить токен аутентификации, и я недостаточно хорош с обещаниями, чтобы заставить эту работу. Не рабочий код:
import { Auth } from 'aws-amplify';
getToken = async () => {
const session = await Auth.currentSession();
return session.accessToken.jwtToken;
}
graphQLFetcher = (graphQLParams) => {
return getToken().then(function(token) {
fetch(window.location.origin + '/graphql', {
method: 'post',
headers: {
'Content-Type': 'application/json',
"Authorization": token
},
body: JSON.stringify(graphQLParams),
}).then(response => response.json());
})
}
Примите во внимание, что есть два возможных способа решить эту проблему, и что это вопрос дизайна в такой же степени, как и технический, но я надеюсь, что кто-то может мне помочь.


Первый вариант хорош, но у вас есть лишний синтаксис. Вот что я использую:
params => client.query({ ...params, query: gql(params.query) });