Гарантирован ли мой вариант использования подписок apollo graphql? - PullRequest
1 голос
/ 05 августа 2020

Предисловие:

Я работаю над образовательным сайтом. Каждый раз, когда студент заполняет тест внутри урока курса, мы выполняем мутацию submitQuiz. Он превращается в обновленный Quiz с заданной оценкой. Кроме того, отправка теста может также обновить progress учащегося на уроке и общий progress в курсе. Следовательно, мутация submitQuiz также преобразуется в Lesson и Course с обновленным progress.

Образец отрывка схемы:

type SubmitQuizResult: {
    Quiz: Quiz!
    Lesson: Lesson!
    Course: Course!
}

type Mutation {
    submitQuiz(quizId: Int!, answers: String!): SubmitQuizResult!
}

Как я называю мутацию:

mutation SubmitQuiz($quizId: Int!, $answers: String!) {
    submitQuiz(quizId: $quizId, answers: $answers) {
        Quiz { id answers grade }
        Lesson { id progress }
        Course { id progress }
    }
}

Проблема :

Теперь мы хотим добавить новую функцию - подсчет времени, проведенного на нашем сайте . Таймер будет обновляться каждый раз, когда пользователь что-то делает - проверяет и выполняет упражнения, заканчивает чтение урока или отправляет тест .

Возможные решения:

  • Обновите код для всех мутаций, чтобы разрешить время, проведенное на нашем сайте таймер
  • Обновите код для всех вызовов мутаций, включив параметр refetchQueries, который будет повторно загрузить текущий таймер
  • Использовать подписку на pu sh обновления таймера в браузере при каждом обновлении таймера

Вопрос:

В документации сказано [1]:

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

Когда следует использовать одну подписку? Оправдывает ли моя ситуация их использование?

[1] https://www.apollographql.com/docs/react/data/subscriptions/#when -для использования-подписок

...