GraphQL | Можем ли мы реализовать поиск по языку программирования в GitHub GraphQL API с использованием директив? - PullRequest
0 голосов
/ 24 марта 2020

Я экспериментирую с GraphQL и хочу создать скрипт GraphQL для расширенного поиска. Я застрял в поиске того, как искать репозиторий, содержащий указанный c язык. Например, я хочу искать только репозитории, написанные в 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")

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

1 Ответ

1 голос
/ 24 марта 2020

Из спецификации c: http://spec.graphql.org/June2018/#sec - пропустить

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...