Я использую API GraphQL GitHub для получения каталогов и файлов в репозитории, но мне нужны только некоторые конкретные подмножества.
Репозиторий, с которым я работаю, имеет такую структуру:
- / #root
- /.gitignore
- /.github/...
- /categoryOne
- /categoryOne/itemOne
- /categoryOne/itemOne/config.ini
- /categoryTwo
- /categoryTwo/itemOne
- /categoryTwo/itemOne/config.ini
- /categoryTwo/itemOne/maybe_some_junk/...
...
Я пытаюсь эффективно запросить узлы (category)->(item)->(config)
и смог это сделать, но до сих пор не нашел способа опустить «мусорные» элементы (например, файл .gitignore
и дерево .github
).
Вот мой грубый, но рабочий запрос.
query Repository {
repository(name: "my-repository", owner: "example") {
object(expression: "HEAD:") {
... on Tree {
categories: entries {
mode
name
type
object {
... on Tree {
items: entries {
name
type
configFile: object {
... on Blob {
text
}
}
}
}
}
}
}
}
}
}
Это работает нормально, но включает в себя довольно много результатов, которые я хотел бы отфильтровать. Я пробовал добавлять предложения (where: {...})
в различные строки, и все они указывали, что это синтаксически неправильно.
Поддерживает ли API GraphQL Github фильтрацию некоторых объектов Blob/деревьев при запросе объектов репозитория? Если да, то какая операция/синтаксис необходима?
Узнав больше о GraphQL (должен был упомянуть, что я новичок в этом), я узнал, что операции и возможности очень специфичны для каждой реализации API - информация, которую я нашел, предполагает, что способность where:
не применима. к API GitHub.
Дальнейшее рассмотрение схемы и документации GitHub GraphQL Теперь я уверен, что невозможно выполнить фильтрацию на стороне сервера. Мне понадобится мой клиентский код, чтобы понять, что результатом запроса является список «кандидатов», и его необходимо будет соответствующим образом отфильтровать.