Предисловие:
Я работаю над образовательным сайтом. Каждый раз, когда студент заполняет тест внутри урока курса, мы выполняем мутацию 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 -для использования-подписок