Как я могу вызвать лямбду graphql из другой лямбды в nodejs? - PullRequest
1 голос
/ 28 мая 2020

Я создал лямбда-выражение graphql, следуя этой инструкции: https://www.apollographql.com/docs/apollo-server/deployment/lambda/ Он отлично работает со шлюзом API. Однако мне нужно вызвать эту лямбда-функцию из другой лямбда-функции. Я думаю, мне нужно поместить ApolloClient в другую лямбда-функцию, чтобы отправить запрос graphql. Однако это не работает, потому что я не могу выбрать правильную ссылку для вызова лямбды. Итак, я ищу, как программно построить запрос graphql. Я могу отправить запрос как событие для запуска лямбда-выражения graphql.

Есть ли способ сделать это?

Например, если у меня есть запрос на изменение, например:

 mutation sendMessage {
      sendMessage(text: "hello"){
      text
    }

, мне нужно найти способ преобразовать запрос ниже полезной нагрузки:

{"id":"1","type":"start","payload":{"variables":{},"extensions":{},"operationName":"sendMessage","query":"mutation sendMessage {\\n  sendMessage(text: \\"hello\\") {\\n    text\\n    __typename\\n  }\\n}\\n"}}

, затем я отправляю эту полезную нагрузку в лямбда-функцию graphql

1 Ответ

0 голосов
/ 31 мая 2020

Вы можете использовать клиент graphQL для выполнения запроса graphQL через конечную точку шлюза API с использованием HTTP.

Учитывая, что у вас есть конечная точка шлюза API, указывающая на сервер graphQL, вы можете выполнить запрос graphQL к этой конечной точке из другой лямбды.

Запросы GraphQL к серверу являются обычными POST запрос оформлен определенным образом. Так что, если хотите, вы можете использовать любой HTTP-клиент на стороне сервера для выполнения этого запроса. Однако использование библиотеки типа graphql-request делает его намного проще.

Вы можете использовать пакет graphql-request для выполнения запросов graphQL на стороне сервера.

import { request } from 'graphql-request'

const endpoint="https://your-api-gateway-endpoint";

const headers = {
  "x-api-key": 'api-gateway-key' // if your endpoint requires API key
};

const client = new GraphQLClient(endpoint, { headers });

const query = `{
  mutation sendMessage {
      sendMessage(text: "hello"){
      text
  }
}`;

const data = await client.request(query);
console.log(JSON.stringify(data, undefined, 2));

...