https://github.com/gpbonillas/githubgraphqlclient
GitHub GraphQL API Client implemented with Rust
https://github.com/gpbonillas/githubgraphqlclient
api github graphql rust rust-lang
Last synced: 2 months ago
JSON representation
GitHub GraphQL API Client implemented with Rust
- Host: GitHub
- URL: https://github.com/gpbonillas/githubgraphqlclient
- Owner: gpbonillas
- Created: 2025-08-28T20:52:43.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2025-08-28T21:20:25.000Z (10 months ago)
- Last Synced: 2026-02-18T09:47:54.925Z (4 months ago)
- Topics: api, github, graphql, rust, rust-lang
- Language: Rust
- Homepage:
- Size: 7.81 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Cliente GraphQL de GitHub en Rust
Este proyecto es un cliente de línea de comandos desarrollado en Rust para interactuar con la API GraphQL de GitHub. Permite realizar consultas para explorar el contenido de repositorios, como listar archivos en la raíz y explorar directorios de forma recursiva.
## Características
* **Listar Contenido del Repositorio**: Obtiene y muestra una lista de todos los archivos y directorios en la raíz de un repositorio específico.
* **Exploración Recursiva**: Navega a través de los directorios de un repositorio para listar su contenido.
* **Configuración Sencilla**: Utiliza variables de entorno para gestionar el token de autenticación de GitHub de forma segura.
## Cómo Empezar
Sigue estos pasos para configurar y ejecutar el proyecto en tu entorno local.
### Prerrequisitos
* [Rust](https://www.rust-lang.org/tools/install) instalado.
* Un token de acceso personal de GitHub con los permisos necesarios para leer repositorios.
### Instalación y Configuración
1. **Clona el repositorio**:
```bash
git clone
cd GitHubGraphQLClient
```
2. **Crea el archivo de entorno**:
Crea un archivo llamado `.env` en la raíz del proyecto y añade tu token de acceso personal de GitHub:
```
GITHUB_TOKEN=tu_token_de_github_aqui
```
Este archivo es ignorado por Git para mantener tu token seguro.
3. **Compila el proyecto**:
```bash
cargo build
```
## Uso
Este proyecto incluye dos binarios principales que puedes ejecutar para interactuar con la API de GitHub.
### 1\. Listar el contenido de la raíz del repositorio
Este comando ejecuta el binario `list_repo_root`, que se conecta a la API de GitHub y muestra los archivos y directorios en la raíz del repositorio configurado (`seima-lab/seima-server`).
```bash
cargo run --bin list_repo_root
```
### 2\. Explorar el contenido del repositorio de forma recursiva
Este comando ejecuta `get_content_repo_rec`, que explora el directorio raíz y, si encuentra subdirectorios, lista también su contenido.
```bash
cargo run --bin get_content_repo_rec
```
## Consultas GraphQL
El proyecto utiliza consultas GraphQL para obtener la información del repositorio. Puedes encontrar ejemplos detallados de las consultas utilizadas en el archivo `src/queries.md`.
Las consultas principales son:
* **`GetTree`**: Para obtener las entradas de un árbol (directorio).
```graphql
query GetTree($owner: String!, $name: String!, $expression: String!) {
repository(owner: $owner, name: $name) {
object(expression: $expression) {
... on Tree {
entries {
oid
name
nameRaw
mode
type
path
pathRaw
repository {
id
name
}
lineCount
language {
id
color
name
}
extension
size
submodule {
branch
subprojectCommitOid
}
}
}
}
}
}
```
> Variables
```json
{
"owner": "seima-lab",
"name": "seima-server",
"expression": "edcf4d3fb935ae2dc754c1f464404eaeb5b4e521"
}
```
* **`GetBlob`**: Para obtener el contenido de un archivo (blob).
```graphql
query GetTree($owner: String!, $name: String!, $expression: String!) {
repository(owner: $owner, name: $name) {
object(expression: $expression) {
... on Tree {
entries {
oid
name
nameRaw
mode
type
path
object {
id
}
repository {
id
name
}
lineCount
language {
id
color
name
}
extension
size
submodule {
branch
subprojectCommitOid
}
}
}
... on Blob {
abbreviatedOid
byteSize
commitResourcePath
commitUrl
id
isBinary
isTruncated
oid
repository {
id
}
text
}
}
}
}
```
> Variables
```json
{
"owner": "seima-lab",
"name": "seima-server",
"expression": "202c2a592717e2969e537232ac5c498ddf0e1b28"
}
```
## Dependencias
Este proyecto utiliza las siguientes dependencias principales, gestionadas a través de `Cargo.toml`:
* `reqwest`: Un cliente HTTP ergonómico para realizar las solicitudes a la API.
* `serde` y `serde_json`: Para la serialización y deserialización de los datos JSON de la API.
* `tokio`: Para el manejo de operaciones asíncronas.
* `dotenvy`: Para cargar las variables de entorno desde el archivo `.env`.