An open API service indexing awesome lists of open source software.

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

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`.