Может ли один "запрос" только на основе тех типов, которые поддерживают аргументы
Да: GraphQL не определяет общий язык запросов таким же образом, скажем, как SQL.Вы не можете отсортировать или отфильтровать результат поля способами, которые не предоставлены сервером и схемой приложения.
Я хочу иметь возможность получать последние [не черновик, неprerelease] релиз GitHub для конкретного репо с использованием API GraphQl.
Как вы уже нашли, поле releases
типа Repository
не имеет возможности сортировать или фильтровать эти поля.Вместо этого вы можете перебирать выпуски по одному с несколькими вызовами GraphQL.По отдельности они выглядят так:
query NextRelease($owner: String!, $name: String!, $after: String) {
repository(owner: $owner, name: $name) {
releases(first: 1,
orderBy: {field: CREATED_AT, direction: DESC},
after: $after) {
pageInfo { lastCursor }
nodes { ... ReleaseData } # from the question
}
}
}
Запустите это так же, как вы запускаете его сейчас (я разделил информацию, идентифицирующую хранилище, на отдельные переменные GraphQL).Вы можете пропустить переменную after
для первого вызова.Если (как в вашем примере) он возвращает "isDraft": false, "isPrerelease": false
, то все готово.Если нет, вам нужно повторить попытку: возьмите значение из lastCursor
в ответе и выполните тот же запрос, передавая это значение курсора как значение переменной after
.