Запросы к данным по версии¶
Запросы к данным по версии выполняются путем указания поля version
в теле
HTTP-запроса или запроса
GraphQL.
В TDG есть две категории таких запросов:
Исторические данные – данные объектов, которые имеют более раннюю версию, чем указанная, или ту же версию, что и указанная в запросе.
Исторические модификации – данные об изменениях объектов, которые имеют более раннюю версию, чем указанная, или ту же версию, что и указанная в запросе.
Исторические данные¶
Запросы на чтение исторических данных полезны, например, когда часть информации была удалена в последней версии объекта.
Вспомним пример модели данных и рассмотрим
запрос на чтение исторических данных Country
.
Пример. У нас есть тип объекта Country
с информацией о телефонном коде страны.
Но в последней версии Country
правильная информация о телефонном коде была изменена.
Чтобы получить правильную информацию о телефонном коде, нужно посмотреть
предыдущую версию Country
.
Сделать это можно в два этапа:
Узнайте последнюю версию
Country
Сделайте запрос на чтение данных предыдущий версии
Country
Чтобы проверить последнюю версию, добавьте поле version
в параметры запроса GraphQL:
{
Country(title: "Russia") {
title
phone_code
version
}
}
Пример ответа:
{
"data": {
"Country": [
{
"version": "1515",
"title": "Russia",
"phone_code": "+8"
}
]
}
}
Note
Ответ возвращает указанную или более раннюю версию, если запрошенная версия не существует.
Если поле version
не было указано, ответ вернет последнюю версию объекта.
Скопируйте из ответа значение version
, вычтите из него единицу
и выполните запрос GraphQL на предыдущую версию:
{
Country(title: "Russia", version: "1514") {
title
phone_code
version
}
}
Пример ответа:
{
"data": {
"Country": [
{
"version": "1514",
"title": "Russia",
"phone_code": "+7"
}
]
}
}
Вы можете перебирать предыдущие версии, пока не обнаружите версию с нужной информацией.
Note
Если запрошенная версия меньше существующего минимального значения, ответ вернет пустой объект.
Вы также можете запросить все версии объекта, используя поле all_versions, и ограничить результат ответа при помощи пагинации:
{
Country(title: "Russia", all_versions: true, first: 5) {
title
phone_code
}
}
Исторические модификации¶
Запросы на исторические модификации данных полезны, например, когда нужно изменить или удалить данные в конкретной версии объекта.
TDG поддерживает следующие запросы на изменение данных (mutations
):
Вставка объекта (
insert
)Обновление объекта (
update
)Удаление объекта (
delete
)
Для осуществления запросов на изменение данных вы можете использовать HTTP-запросы или запросы GraphQL.
Note
Выполнение HTTP-запросов потребует токен приложений.
В примерах используется уже сгенерированный токен Authorization: Test f0d4d72b-2232-42ff-a1ee-1127a93df0d3
.
Вам необходимо сгенерировать свой токен с правами на запись и чтение в кластере TDG,
к которому будет осуществляться доступ,
иначе авторизация не пройдет.
Ниже приведены примеры обоих вариантов запросов.
Вставка объекта¶
Когда вы добавляете объект, поле version
определяет, какая версия
объекта добавляется или заменяется.
Пример. Добавьте объект типа Country
с title: "Poland"
и phone_code: "+48"
.
Пример запроса GraphQL:
mutation {
Country(
insert: {
version: "1515"
title: "Poland"
phone_code: "+48"})
{
version
title
phone_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"
}
]
}
}
Note
Если указанного параметра version
нет, то вставка данных будет выполнена
в ближайшую предыдущую версию этого объекта.
Если необходимо вставить данные во все версии объекта, используйте поле all_versions.
Обновление объекта¶
При обновлении данных в поле version
указывается версия объекта,
подлежащая изменению.
Пример. Вернемся к типу объекта Country
.
В запросе укажем версию 1515
и обновим поле phone_code
на значение +7
.
Пример запроса GraphQL:
mutation {
Country(title: "Russia", version: "1515" update:[["set", "phone_code", "+7"]]) {
version
title
phone_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"
}
]
}
}
Note
Если указанного параметра version
нет, то обновление данных объекта будет выполнено
в ближайшую предыдущую версию этого объекта.
Удаление объекта¶
При удалении данных в поле version
указывается версия объекта,
подлежащая удалению.
Note
Чтобы все версии объекта были полностью удалены,
установите значение true
параметру all_versions.
Пример. Удалите объект Country
с версией 1514
.
Пример запроса GraphQL:
mutation {
Country(delete: true, title: "Russia", version: "1514") {
title
version
phone_code
}
}
Пример ответа:
{
"data": {
"Country": [
{
"version": "1514"
"phone_code": "+7",
"title": "Russia"
}
]
}
}
Note
Если параметр version
не задан, то будет удалена последняя версия объекта.
Ограничения запросов¶
Использование дополнительных параметров блока hard-limits в config.yml помогает контролировать нагрузку на сервер. Вы можете задать следующие параметры:
scanned – ограничивает прохождение запроса в спейсах. По умолчанию: 2000
returned – ограничивает возвращаемые объекты в ответе. По умолчанию: 100. При превышении одного из ограничений выполнение запроса прекращается и возвращается ошибка
Пример заполнения параметров:
hard-limits:
scanned: 1500
returned: 200