Борьба с авторизацией x-api-ключа apollo-link-ws - PullRequest
0 голосов
/ 04 июля 2018

Я использую Apollo для подключения к API-интерфейсу AWS Appsync, который защищен ключом API. Нет проблем с запросами и мутациями по http, но я на незнакомой территории и использую веб-сокеты для подписок.

Использование apollo-link-ws У меня есть следующее, и я не знаю, как добавить ключ API. Может ли какая-нибудь добрая душа дать совет?

const ws = new WebSocketLink({
      uri: `wss://xxxxx.appsync-api.eu-west-1.amazonaws.com/graphql`,
      options: {
        reconnect: true
      }
    });

Кстати, я предполагаю, что URL для wss такой же, как для http ....

Ответы [ 3 ]

0 голосов
/ 07 июля 2018

Вы ознакомились с руководством по AppSync для "Построения клиентского приложения JavaScript": https://docs.aws.amazon.com/appsync/latest/devguide/building-a-client-app-javascript.html

С AWSAppSyncClient настроить подписку легко. Он использует веб-сокеты автоматически при настройке подписок.

Я даже не знал об apollo-link-ws и подобных сложностях при использовании подписок AppSync с Apollo. У меня есть только опыт подписок AppSync с клиентом React, но простое использование JavaScript кажется сравнительно простым.

Из примера в руководстве:

const client = new AWSAppSyncClient({
    url: url,
    region: region,
    auth: {
        type: type,
        credentials: credentials,
    }
});

client.hydrated().then(function (client) {
    //Now subscribe to results
    const observable = client.subscribe({ query: subquery });

    const realtimeResults = function realtimeResults(data) {
        console.log('realtime data: ', data);
    };

    observable.subscribe({
        next: realtimeResults,
        complete: console.log,
        error: console.log,
    });
});

// Set up a subscription query
const subquery = gql(`
subscription NewPostSub {
newPost {
    __typename
    id
    title
    author
    version
}
}`);

Для использования Node.js в руководстве также показано, как настроить global.WebSocket и такие зависимости в примере кода.

0 голосов
/ 09 декабря 2018

Авторизация обычно основана на connectionParams, но AWS решила пойти по другому пути, и они реализовали ее некоторым неясным способом с использованием REST и пользовательских заголовков.

Проблема в Websockets не поддерживает пользовательские заголовки . Что мешает интегрироваться с Apollo.

AppSync имеет гораздо больше недостатков, чем этот. Я бы не стал рекомендовать его для чего-то более амбициозного, чем блог или чат. Эта статья объясняет лучше некоторые ее недостатки.

0 голосов
/ 04 июля 2018

apollo-ws-link напрямую не работает с подписками AWS AppSync. Взгляните на клиент AWS Amplify GraphQL , который обрабатывает авторизацию с помощью AppSync, а также подписки. Это должно заставить ваше приложение работать с AppSync через пару минут.

Если вы хотите реализовать свой собственный клиент подписок, рукопожатие задокументировано в библиотеке Amplify .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...