Построение запросов API¶
Примечание
Этот материал находится в состоянии наполнения информацией.
Во-первых нужно ознакомится с документацией по запросам GraphQL. В нашем случае для конструирования запросов нужно пользоваться встроенным редактором, расположенном по адресу localhost:8000/api/v1.1 или на тестовом сервере t34.universo.pro/api/v1.1
В редакторе представлен раздел по документации:
Быстрые примеры¶
Запросы¶
Для поиска конкретного запроса идем в разделGlobalQuery документации и ищем необходимый по описанию (если оно есть 😄). Для вывода страниц академии это выглядит так:
Узнав название запроса и получив список возвращаемых полей, можем приступить к построению запроса:
query {
akademiojPagxoj {
edges {
node {
objId
teksto {
enhavo
}
}
}
}
}
Можно вывести другие доступные поля, редактор запросов сам предлагает варианты полей и узлов. В запросах можно применять переменные, которые могут быть подставлены в фильтры или использоваться в других местах запроса:
query($first: Int) {
akademiojPagxoj(first: $first) {
edges {
node {
objId
teksto {
enhavo
}
}
}
}
}
переменные всегда определяются после слова query в скобках, имя переменной всегда начинается с $ - query($first: Int). Переменных может быть несколько, тогда они перечисляются через запятую: query($first: Int, $uuid: UUID), если переменная обязательна к указанию, то после определения её типа ставится ! (восклицательный знак): query($first: Int!).
Внимание
Так как некоторые поля являются вычисляемыми, то они затрачивают ресурсы сервера, потому всегда используйте только те поля в запросе, которые Вам действительно нужны для отображения на странице
Так же доступные дополнительные параметры фильтрации при запросе, например SiriusoFilterConnectionField сам предоставляет возможность фильтрации узлов по id, если это поле есть в модели Django. Это делается при помощи параметра objId:
query($first: Int) {
akademiojPagxoj(first: $first, objId: 1) {
edges {
node {
objId
teksto {
enhavo
}
}
}
}
}
Сортировка по полям доступна через параметр orderBy, котрый принимает в качестве значения массив полей модели Django. Заметьте, что синтаксис полностью соответствует Django QuerySet API. Например, для сортировки по дате публикации (по убыванию) и дате создания (по возрастанию):
query($first: Int) {
akademiojPagxoj(first: $first, orderBy: ["-publikiga_dato", "krea_dato"]) {
edges {
node {
objId
teksto {
enhavo
}
}
}
}
}
Внимание
При использовании orderBy в качестве значений массива указываются названия полей модели Django, т.е. publikiga_dato, тогда как при построении запроса GraphQL данное поле будет называться publikigaDato