AWS Appsync. Как создать распознаватель, который извлекает сведения для массива идентификаторов? - PullRequest
0 голосов
/ 13 октября 2018

Это кажется базовым, поэтому я ожидал найти упомянутый сценарий, но я искал и не могу найти пример, который соответствует моему сценарию.У меня есть 2 конечные точки (я использую источники данных HTTP), которые я пытаюсь объединить.

Класс:

{
   id: string,
   students: [
      <studentID1>,
      <studentID2>,
      ...
   ]
 }

и ученик:

{
    id: String,
    lastName: String
}

Мне нужна схема, которая выглядит следующим образом:

Student: {
   id: ID!
   lastName: String
}
Class: {
   id: ID!,
   studentDetails: [Student]
}

Из чтенияЯ знаю, что мне нужен какой-то распознаватель на Class.studentDetails, который будет возвращать массив / список студенческих объектов.Большинство примеров, которые я видел, показывают получение списка учеников на основе идентификатора класса (ctx.source.id), но в этом случае это не сработает.Мне нужно вызывать конечную точку ученика 1 раз для каждого учащегося, передавая идентификатор ученика (я не могу получить список учеников по идентификатору класса).

Есть ли способ написать решатель для зацикливания Class / studentDetailsчерез идентификаторы учеников в классе и называет ли я конечную точку моих учеников для каждого?

Я думал об этом в шаблоне сопоставления запросов:

#set($studentDetails = [])
#foreach($student in $ctx.source.students) 
   #util.qr(list.add(...invoke web service to get student details...))
#end
$studentDetails

Редактировать: Прочитав комментарий Лизы Шон ниже, я понял, что пакетный преобразователь для источников данных DynamoDB, который делает это,но я не вижу способа сделать это для источников данных HTTP.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Это не идеально, но вы можете создать промежуточный тип.

type Student {
  id: ID!
  lastName: String
}
type Class {
  id: ID!,
  studentDetails: [StudentDetails]
}
type StudentDetails {
  student: Student
}

В вашем шаблоне решателя для Class создайте список этих идентификаторов учеников

#foreach ($student in $class.students)
  $util.qr($studentDetails.add({"id": "$student.id"}))
#end

идобавьте его к вашему объекту ответа.Затем подключите распознаватель к полю student, равному StudentDetails, и вы сможете использовать $context.source.id для отдельного вызова API студента.Каждый id будет выделен из массива и будет являться собственным веб-запросом.

0 голосов
/ 22 октября 2018

Я открыл дело с помощью службы поддержки AWS, и мне сказали, что единственный способ, которым они об этом знают, - это создать лямбда-резольвер, который:

  1. Принимает массив идентификаторов студентов
  2. Вызывает конечную точку студентов для каждой
  3. Возвращает массив информации о студентах
...