GraphQL | Можем ли мы реализовать поиск по языку программирования в GitHub GraphQL API с помощью директив?

Я экспериментирую с GraphQL и хочу создать скрипт GraphQL для расширенного поиска. Я застрял в выяснении, как искать репозиторий, содержащий определенный язык. Например, я хочу искать только репозитории, написанные на Kotlin. Вот как выглядит мой запрос

query AdvancedSearch($query: String!, $type: SearchType!, $numOfResults: Int!, $nextPageCursor: String) {
search(type: $type, query: $query, first: $numOfResults, after: $nextPageCursor) {
    pageInfo {
        hasNextPage
        endCursor
    }
    repositoryCount
    nodes {
        ... on Repository {
            name
            nameWithOwner
            description
            languages(first: 100) {
                nodes {
                    name
                }
            }
        }
    }
}

}

Я думаю о том, чтобы иметь директиву @skip в языках, что-то вроде

languages(first:100) @skip(if:$filterLanguage != "Kotlin")

Я не хочу передавать «язык: котлин» в поисковом запросе, я хочу сделать это с помощью директив. Возможно ли что-то подобное?


person thatrohit    schedule 24.03.2020    source источник


Ответы (1)


Из спецификации: http://spec.graphql.org/June2018/#sec--skip

Директива @skip может быть предоставлена ​​для полей, расширений фрагментов и встроенных фрагментов и допускает условное исключение во время выполнения, как описано аргументом if.

Другими словами, директива @skip (и ее аналог @include) только определяет, включено ли поле в запрос. Пропустить поле таким образом — это то же самое, что не включить его изначально. Кроме того, аргумент if директивы может быть передан только true, false или логической переменной — синтаксис выражения не поддерживается.

Что еще более важно, включение или исключение определенного поля не повлияет на выполнение родительского поля. Если вы намерены изменить результаты, возвращаемые полем search, вам необходимо указать соответствующие аргументы для этого поля. Схема может предоставить какой-то аргумент, позволяющий вам фильтровать конкретно по языкам, но, похоже, это не так — единственный способ сделать это — использовать аргумент query.

person Daniel Rearden    schedule 24.03.2020