Фильтрация

... 2022-8-10 Меньше 1 минуты

# Фильтрация

# Что такое подписка на GraphQL

SubQuery теперь также поддерживает подписки Graphql. Как и запросы, подписки позволяют получать данные. В отличие от запросов, подписки - это длительные операции, которые могут менять свой результат с течением времени.

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

Узнать больше о подписках здесь (opens new window)

# Как подписаться на сущность

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

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

subscription {
  transfer {
    id
    mutation_type
    _entity
  }
}
1
2
3
4
5
6
7

Тело сущности в вашем запросе указывает, какие данные вы хотите получать по подписке при обновлении таблицы Transfer:

  • id: Возвращает идентификатор сущности, которая изменилась
  • mutation_type: Действие, которое было произведено с этой сущностью. Типы мутации могут быть либо INSERT, UPDATE или DELETE
  • _сущность: значение самой сущности в формате JSON.

# Фильтрация

Мы также поддерживаем фильтр подписок, это означает, что клиент должен получать обновленные данные подписки, только если эти данные или мутация соответствуют определенным критериям.

Существует два типа фильтров, которые мы поддерживаем:

  • id : Фильтр для возврата только тех изменений, которые затрагивают конкретную сущность (обозначенную идентификатором).
  • mutation_type: Только тот тип мутации, который был произведен, вернет обновление.

Предположим, что у нас есть сущность Balances, и она записывает баланс каждого счета.

type Balances {
  id: ID! # someone's account , eg. 15rb4HVycC1KLHsdaSdV1x2TJAmUkD7PhubmhL3PnGv7RiGY
  amount: Int! # the balance of this account
}
1
2
3
4

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

subscription {
  balances(
    id: "15rb4HVycC1KLHsdaSdV1x2TJAmUkD7PhubmhL3PnGv7RiGY"
    mutation: UPDATE
  ) {
    id
    mutation_type
    _entity
  }
}
1
2
3
4
5
6
7
8
9
10

Обратите внимание, что фильтр mutation может быть одним из INSERT, UPDATE или DELETE.

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

Функция подписки работает на управляемом сервисе SubQuery, когда вы напрямую вызываете указанную конечную точку GraphQL. Он не будет работать в пределах браузерной площадки GraphQL.

Последнее обновление: August 10, 2022 00:49