Запросы к данным по версии
Запросы к данным по версии выполняются путем указания поля version в
теле HTTP-запроса или запроса
GraphQL.
В TDG есть две категории таких запросов:
- Исторические данные - данные объектов, которые имеют более раннюю версию, чем указанная, или ту же версию, что и указанная в запросе.
- Исторические модификации - данные об изменениях объектов, которые имеют более раннюю версию, чем указанная, или ту же версию, что и указанная в запросе.
Запросы на чтение исторических данных полезны, например, когда часть информации была удалена в последней версии объекта.
Вспомним пример модели данных и рассмотрим запрос
на чтение исторических данных Country.
Пример. У нас есть тип объекта Country с информацией о телефонном коде
страны. Но в последней версии Country правильная информация о
телефонном коде была изменена.
Чтобы получить правильную информацию о телефонном коде, нужно посмотреть
предыдущую версию Country.
Сделать это можно в два этапа:
- Узнайте последнюю версию
Country - Сделайте запрос на чтение данных предыдущий версии
Country
Чтобы проверить последнюю версию, добавьте поле version в параметры
запроса GraphQL:
{Country(title: "Russia") {titlephone_codeversion}}
Пример ответа:
{"data": {"Country": [{"version": "1515","title": "Russia","phone_code": "+8"}]}}
Скопируйте из ответа значение version, вычтите из него единицу и
выполните запрос GraphQL на предыдущую версию:
{Country(title: "Russia", version: "1514") {titlephone_codeversion}}
Пример ответа:
{"data": {"Country": [{"version": "1514","title": "Russia","phone_code": "+7"}]}}
Вы можете перебирать предыдущие версии, пока не обнаружите версию с нужной информацией.
Вы также можете запросить все версии объекта, используя поле all_versions, и ограничить результат ответа при помощи пагинации:
{Country(title: "Russia", all_versions: true, first: 5) {titlephone_code}}
Запросы на исторические модификации данных полезны, например, когда нужно изменить или удалить данные в конкретной версии объекта.
TDG поддерживает следующие запросы на изменение данных
(mutations):
- Вставка объекта (
insert) - Обновление объекта (
update) - Удаление объекта (
delete)
Для осуществления запросов на изменение данных вы можете использовать HTTP-запросы или запросы GraphQL.
Ниже приведены примеры обоих вариантов запросов.
Когда вы добавляете объект, поле version определяет, какая версия
объекта добавляется или заменяется.
Пример. Добавьте объект типа Country с title: "Poland" и
phone_code: "+48".
Пример запроса GraphQL:
mutation {Country(insert: {version: "1515"title: "Poland"phone_code: "+48"}){versiontitlephone_code}}
Пример HTTP-запроса с использованием утилиты curl:
curl –request POST \–url 'http://172.19.0.2:8080/graphql?=' \–header 'Authorization: Test f0d4d72b-2232-42ff-a1ee-1127a93df0d3' \–data '{"query":"mutation {Country(insert: {version: "1515", title: \"Poland\", phone_code:\"+48\"}) {version title phone_code}}"}'
Ответ в обоих случаях будет одинаковым:
{"data": {"Country": [{"version": "1515","title": "Poland","phone_code": "+48"}]}}
При обновлении данных в поле version указывается версия объекта,
подлежащая изменению.
Пример. Вернемся к типу объекта Country. В запросе укажем версию
1515 и обновим поле phone_code на значение +7.
Пример запроса GraphQL:
mutation {Country(title: "Russia", version: "1515" update:[["set", "phone_code", "+7"]]) {versiontitlephone_code}}
Пример HTTP-запроса с использованием утилиты curl:
curl –request POST \–url 'http://172.19.0.2:8080/graphql?=' \–header 'Authorization: Test f0d4d72b-2232-42ff-a1ee-1127a93df0d3' \–data '{"query":"mutation {Country(update: {title: "Russia", version: "1515" [[\"set\", \"phone_code\", \"+7\"]]) {title version phone_code}}"}'
Ответ в обоих случаях будет одинаковым:
{"data": {"Country": [{"version": "1515""title": "Russia""phone_code": "+7"}]}}
При удалении данных в поле version указывается версия объекта,
подлежащая удалению.
Пример. Удалите объект Country с версией 1514.
Пример запроса GraphQL:
mutation {Country(delete: true, title: "Russia", version: "1514") {titleversionphone_code}}
Пример ответа:
{"data": {"Country": [{"version": "1514""phone_code": "+7","title": "Russia"}]}}
Использование дополнительных параметров блока hard-limits в config.yml помогает контролировать нагрузку на сервер. Вы можете задать следующие параметры:
- scanned - ограничивает прохождение запроса в спейсах. По умолчанию: 2000
- returned - ограничивает возвращаемые объекты в ответе. По умолчанию: 100. При превышении одного из ограничений выполнение запроса прекращается и возвращается ошибка
Пример заполнения параметров:
hard-limits:scanned: 1500returned: 200