Построение запросов 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