У меня запущен сервер graphql на одном из моих экземпляров EC2. У меня также работает AWS appsyn c, но на данный момент он интегрирован только с несколькими лямбдами.
Я бы хотел подключить мой Appsyn c к серверу graphql, поэтому Appsyn c будет работать как прокси для определенных c запросов / мутаций.
Так со стороны клиента , это будет выглядеть так:
- Клиент отправляет запрос к appsyn c, скажем, что это выглядит так:
{
user {
id
}
}
- Appsyn c определил запрос
user
, он настроен на прокси-запрос к серверу graphql без каких-либо изменений - Сервер Graphql может обрабатывать следующий запрос:
{
user {
id
}
}
и возвращает результат:
"data": {
"user": {
"id": "123456789"
}
}
- наконец, Appsyn c возвращает ответ клиенту
Могу ли я настроить Appsyn c в каким образом данный сценарий возможен? Это правильный шаблон для использования Appsyn c для?
Обновление 1. После @ mparis ответ
я смог прокси мой запросите через AppSyn c и обратитесь к моему серверу graphql со следующей конфигурацией распознавателя:
{
"version": "2018-05-29",
"method": "POST",
"resourcePath": "/graphql",
"params":{
"body": {
"query": "$util.escapeJavaScript($ctx.info.getSelectionSetGraphQL())"
}
}
}
Но это все равно не работает должным образом - оно отличается от описания в docs и Я вижу по крайней мере две проблемы:
- Если у меня есть запрос с аргументами и вложенным paylod,
$ctx.info.getSelectionSetGraphQL()
вырезает часть имени и аргументов запроса и дает мне только вложенную полезную нагрузку, поэтому этот запрос:
{
user(id: "1") {
picture {
url
}
}
становится следующим, когда я звоню $ctx.info.getSelectionSetGraphQL()
:
{
picture {
url
}
}
Но я бы хотел использовать весь запрос, как описано в документации:
"selectionSetGraphQL": "{\n getPost(id: $postId) {\n postId\n title\n secondTitle: title\n content\n author(id: $authorId) {\n authorId\n name\n }\n secondAuthor(id: \"789\") {\n authorId\n }\n ... on Post {\n inlineFrag: comments {\n id\n }\n }\n ... postFrag\n }\n}"
Допустим, у меня есть запрос, и я определил распознаватель для запроса
user
в appsyn c, запрос выглядит так:
{
user(id: "1") {
picture {
url
}
}
, и я вызываю свой graphql бэкэнд через appsyn c, в моих журналах graphql я вижу следующий зарегистрированный ответ:
{
"data: {
"user": {
"picture": {
"url": "example.com/link/to/a/picture"
}
}
}
}
но appsyn c возвращает мне данный ответ вместо:
{
"data: {
"user": {
"picture": null
}
}
}
Я понял из этого appsyn c ожидает от меня, что я определю средства распознавания для запросов user
и picture
. Appsyn c хочет сначала вызвать user
, а затем picture
запрос, но я просто проксирую ответ через appsyn c, не вызывая дополнительных запросов, кроме user
. Все оценивается в моем бэкэнде graphql и должно быть просто помещено в тело ответа, но appsyn c хочет оценить все еще раз.
Есть ли какое-либо решение для 1 и 2?