Запрос GraphQL для доступа к первому элементу в массиве?

Был хороший поиск, но, похоже, ничего не нашел для этого. Есть ли способ в GraphQL получить доступ только к первому элементу в массиве?

Что-то типа:

query {
  allDBItems {
    edges {
      node {
        exampleArray([0])
      }
    }
  }
}

person Joss Classey    schedule 24.04.2019    source источник


Ответы (2)


Нет, GraphQL не предоставляет никакого синтаксиса для управления запросом, кроме условного включения/исключения полей с использованием директив @skip и @include.

Служба GraphQL, которую вы запрашиваете, может поддерживать способ ограничения набора результатов для поля определенной длиной путем предоставления аргумента в поле, такого как limit, first или last. Однако сервер должен включить эти поля как часть схемы службы и предоставить логику для их реализации. Проверьте документацию вашего API, чтобы узнать, поддерживаются ли эти поля.

Любые манипуляции с ответом должны выполняться на стороне клиента. Существует экспериментальная библиотека graphql-lodash, которая позволяет вам делать это прямо внутри ваших запросов, но в к концу дня данные все еще преобразуются на стороне клиента.

person Daniel Rearden    schedule 24.04.2019
comment
Я думаю, что этот подход подорвет способность GraphQL заранее статически проверять, действительна ли операция перед развертыванием. - person Wong Jia Hau; 30.06.2021

НЕ таким образом - такого синтаксиса «только для клиента» не существует.

Общее правило 'спрашивайте, что вам нужно' требует явного выражения при передаче [именованных] параметров (переменных).

Просто сообщите своему API, что вам нужно — передайте параметр limitindex?) — что-то узнаваемое для вашего API [преобразователи].

Без этого вы можете просто использовать только первый из всех возвращаемых элементов массива — подходит только для небольших наборов данных.

Прочтите документы graphql о нумерации страниц.

person xadm    schedule 24.04.2019
comment
Спасибо, что нашли время ответить. Значит, нельзя ограничить размер возвращаемых массивов? Например, вы можете получить только полные массивы? У меня есть очень большие массивы, и мне нужен только первый элемент в каждом. Я предполагаю, что вы не можете использовать (first:x) для отдельного массива. - person Joss Classey; 24.04.2019
comment
Вы можете передавать переменные, чтобы сообщить API, сколько записей вам нужно — преобразователь должен использовать этот параметр для SQL LIMIT (например). - person xadm; 24.04.2019