Skip to main content

Introducción a la API REST

Obtén información sobre cómo usar la API REST de GitHub.

Introducción

En este artículo se describe cómo usar la API REST de GitHub con GitHub CLI, curl o JavaScript. Para obtener una guía de inicio rápido, consulta Inicio rápido para GitHub API REST.

Algunos ejemplos de este artículo envían solicitudes a https://api.github.com. Si accedes a GitHub en un dominio diferente, como octocorp.ghe.com, el punto de conexión para solicitudes de API reflejará ese dominio. Por ejemplo: https://api.octocorp.ghe.com/.

Acerca de las solicitudes a la API de REST

En esta sección se describen los elementos que componen una solicitud de API:

  •         [HTTP method](#http-method) (Método HTTP)
    
  •         [Path](#path)
    
  •         [Encabezados](#headers)
    
  •         [Tipos de medios](#media-types)
    
  •         [Autenticación](#authentication)
    
  •         [Parámetros](#parameters)
    

Cada solicitud a la API de REST incluye un método HTTP y una ruta de acceso. Según el punto de conexión de API de REST, es posible que también tengas que especificar encabezados de solicitud, información de autenticación, parámetros de consulta o parámetros de cuerpo.

La documentación de referencia de la API de REST describe el método HTTP, la ruta de acceso y los parámetros de cada operación. También muestra solicitudes y respuestas de ejemplo para cada punto final. Para más información, consulta la Documentación de referencia de REST.

Método HTTP

El método HTTP de un punto de conexión define el tipo de acción que realiza en un recurso determinado. Algunos métodos HTTP comunes son GET, POST, DELETE y PATCH. La documentación de referencia de la API de REST proporciona el método HTTP de cada punto de conexión.

Por ejemplo, el método HTTP para el punto de conexión "Enumerar problemas del repositorio" es GET.

Siempre que sea posible, la API REST de GitHub intenta por todos los medios usar el método HTTP adecuado para cada acción.

  •         `GET`: se utiliza para recuperar recursos.
    
  •         `POST`: se utiliza para crear recursos.
    
  •         `PATCH`: se utiliza para actualizar propiedades de los recursos.
    
  •         `PUT`: se utiliza para reemplazar recursos o colecciones de recursos.
    
  •         `DELETE`: se utiliza para borrar recursos.
    

Ruta

Cada punto de conexión tiene una ruta de acceso. La documentación de referencia de API de REST proporciona la ruta de acceso de cada punto de conexión. Por ejemplo, la ruta de acceso para el punto de conexión “Enumerar incidencias del repositorio” es /repos/{owner}/{repo}/issues.

Las llaves {} en una ruta de acceso indican parámetros de ruta de acceso que hay que especificar. Los parámetros de ruta modifican la ruta del punto de conexión y son necesarios en la solicitud. Por ejemplo, los parámetros de ruta de acceso para el punto de conexión “Enumerar incidencias del repositorio” son {owner} y {repo}. Para usar esta ruta de acceso en la solicitud de API, reemplaza {repo} por el nombre del repositorio donde quieras solicitar una lista de incidencias y reemplaza {owner} por el nombre de la cuenta que posee el repositorio.

encabezados

Los encabezados proporcionan información adicional sobre la solicitud y la respuesta deseada. A continuación se muestran algunos ejemplos de encabezados que puedes usar en las solicitudes a la API de REST de GitHub. Para obtener un ejemplo de solicitud que usa encabezados, consulta Realización de una solicitud.

Accept

La mayoría de puntos de conexión de la API de REST de GitHub especifican que debes pasar un encabezado Accept con un valor de application/vnd.github+json. El valor del encabezado Accept es un tipo de medio. Para más información sobre los tipos de medios, consulta Tipos de medios.

X-GitHub-Api-Version

Debes usar este encabezado para especificar una versión de la API de REST que se usará para la solicitud. Para más información, consulta Versiones de API.

User-Agent

Todas las solicitudes de API deben incluir un encabezado User-Agent válido. El encabezado User-Agent identifica el usuario o la aplicación que realiza la solicitud.

De manera predeterminada, GitHub CLI envía un encabezado User-Agent válido. Pero GitHub recomienda usar el nombre de usuario de GitHub o el nombre de la aplicación para el valor del encabezado User-Agent. Esto permite que GitHub se comunique con el usuario si hay problemas.

De manera predeterminada, curl envía un encabezado User-Agent válido. Pero GitHub recomienda usar el nombre de usuario de GitHub o el nombre de la aplicación para el valor del encabezado User-Agent. Esto permite que GitHub se comunique con el usuario si hay problemas.

Si usas el SDK de Octokit.js, el SDK enviará un encabezado User-Agent válido. Pero GitHub recomienda usar el nombre de usuario de GitHub o el nombre de la aplicación para el valor del encabezado User-Agent. Esto permite que GitHub se comunique con el usuario si hay problemas.

El siguiente es un ejemplo de User-Agent para una aplicación denominada Awesome-Octocat-App:

User-Agent: Awesome-Octocat-App

Las solicitudes sin un encabezado User-Agent se rechazarán. Si proporcionas un encabezado User-Agent no válido, recibirás una respuesta 403 Forbidden.

Tipos de medios

Puedes especificar uno o varios tipos de medios agregándolos al encabezado Accept de la solicitud. Para obtener más información sobre el encabezado Accept, consulta Accept.

Los tipos de medios especifican el formato de los datos que quieres consumir de la API. Los tipos de medios son específicos de los recursos, lo que les permite cambiar de forma independiente y admitir formatos que otros recursos no admiten. En la documentación de cada punto de conexión de API de REST de GitHub se describirán los tipos de medios que admite. Para obtener más información, consulta el Documentación de API REST para GitHub.

Los tipos de medios más comunes admitidos por la API de REST de GitHub son application/vnd.github+json y application/json.

Hay tipos de medios personalizados que puede usar con algunos puntos de conexión. Por ejemplo, la API de REST para administrar confirmaciones y solicitudes de cambios admite los tipos de medios diff, patch y sha. Otros puntos de conexión usan los tipos de medios full, raw, text o html.

Todos los tipos de medios personalizados para GitHub tienen este aspecto: application/vnd.github.PARAM+json, donde PARAM es el nombre del tipo de medio. Por ejemplo, para especificar el tipo de medios raw, se usaría application/vnd.github.raw+json.

Para obtener un ejemplo de una solicitud que usa tipos de medios, consulta Realización de una solicitud.

Autenticación

Muchos puntos de conexión de la API de REST necesitan autenticación o devuelven información adicional si te autenticas. Además, cuando te autenticas, puedes realizar más solicitudes por hora.

Para autenticar la solicitud, deberás proporcionar un token de autenticación con los ámbitos o permisos necesarios. Hay varias maneras diferentes de obtener un token: puedes crear un personal access token, generar un token con un GitHub App, o usar el GITHUB_TOKEN integrado en un flujo de trabajo de GitHub Actions. Para más información, consulta Autenticación en la API REST.

Para obtener un ejemplo de solicitud que usa un token de autenticación, consulta Realización de una solicitud.

Nota:

Si no quieres crear un token, puedes usar GitHub CLI. GitHub CLI se encargará de la autenticación y te ayudará a proteger tu cuenta. Para obtener más información, consulta la versión de esta página en GitHub CLI.

Advertencia

Trata el token de acceso de la misma manera que tratarías las contraseñas u otras credenciales confidenciales. Para más información, consulta Protección de las credenciales de API.

Aunque algunos puntos de conexión de API de REST son accesibles sin autenticación, GitHub CLI requiere que te autentiques antes de poder usar el subcomando api para realizar una solicitud de API. Usa el subcomando auth login para autenticarte en GitHub. Para más información, consulta Realización de una solicitud.

Para autenticar la solicitud, deberás proporcionar un token de autenticación con los ámbitos o permisos necesarios. Hay varias maneras diferentes de obtener un token: puedes crear un personal access token, generar un token con un GitHub App, o usar el GITHUB_TOKEN integrado en un flujo de trabajo de GitHub Actions. Para más información, consulta Autenticación en la API REST.

Para obtener un ejemplo de solicitud que usa un token de autenticación, consulta Realización de una solicitud.

Advertencia

Trata el token de acceso de la misma manera que tratarías las contraseñas u otras credenciales confidenciales. Para más información, consulta Protección de las credenciales de API.

Parámetros

Muchos métodos de API requieren o permiten enviar información adicional en los parámetros de la solicitud. Hay algunos tipos diferentes de parámetros: parámetros de ruta de acceso, parámetros de cuerpo y parámetros de consulta.

Parámetros de ruta

Los parámetros de ruta modifican la ruta del punto de conexión. Estos parámetros son necesarios para la solicitud. Para más información, consulta Trazado.

Parámetros del cuerpo

Los parámetros de cuerpo permiten pasar datos adicionales a la API. Estos parámetros pueden ser opcionales u obligatorios, según el punto de conexión. Por ejemplo, un parámetro de cuerpo puede permitirte especificar un título de problema al crear un problema o especificar ciertas opciones de configuración al habilitar o deshabilitar una característica. En la documentación de cada punto de conexión de API de REST de GitHub se describirán los parámetros de cuerpo que admite. Para obtener más información, consulta el Documentación de API REST para GitHub.

Por ejemplo, el punto de conexión “Crear una incidencia” exige que especifiques un título para la nueva incidencia en tu solicitud. También permite especificar opcionalmente otra información, como el texto que se va a colocar en el cuerpo de la incidencia, los usuarios que se asignan a la nueva incidencia o las etiquetas que se aplicarán a la nueva incidencia. Para obtener un ejemplo de una solicitud que usa parámetros de cuerpo, consulta Realización de una solicitud.

Debes autenticar la solicitud para pasar parámetros de cuerpo. Para más información, consulta Autenticación.

Parámetros de consulta

Los parámetros de consulta permiten controlar qué datos se devuelven para una solicitud. Estos parámetros suelen ser opcionales. La documentación de cada endpoint de la API REST de GitHub describirá cualquier parámetro de consulta que admita. Para obtener más información, consulta el Documentación de API REST para GitHub.

Por ejemplo, el punto de conexión “Enumerar eventos públicos” devuelve treinta problemas de manera predeterminada. Puedes usar el parámetro de consulta per_page para devolver dos incidencias en lugar de 30. Puedes usar el parámetro de consulta page para capturar solo la primera página de resultados. Para obtener un ejemplo de una solicitud que usa parámetros de consulta, tendrás que consultar Realización de una solicitud.

Realización de una solicitud

En esta sección se muestra cómo realizar una solicitud autenticada a la API de REST de GitHub mediante GitHub CLI.

1. Instalación

Instale GitHub CLI en macOS, Windows o Linux. Para obtener más información, consulte Instalación en el repositorio de GitHub CLI.

2. Realizar la autenticación

  1. Para autenticarte en GitHub, ejecuta el siguiente comando desde el terminal.

    gh auth login
    

    Puedes usar la opción --scopes para especificar qué ámbitos quieres. Si quieres autenticarte con un token que hayas creado, puedes usar la opción --with-token. Para obtener más información, consulta la documentación de auth loginGitHub CLI.

  2. Selecciona dónde deseas autenticarte:

    • Si accedes a GitHub en GitHub.com, selecciona GitHub.com.
    • Si accedes a GitHub en un dominio diferente, selecciona Other y, a continuación, escribe tu nombre de host (por ejemplo: octocorp.ghe.com).
  3. Sigue el resto de las instrucciones que aparecen en pantalla.

    GitHub CLI almacena automáticamente sus credenciales de Git automáticamente cuando elija HTTPS como su protocolo preferido para las operaciones de Git y responda “yes” cuando le pregunten si quiere autenticarse en Git con sus credenciales GitHub. Esto puede ser útil, ya que permite usar comandos Git como git push y git pull sin necesidad de configurar un administrador de credenciales independiente o usar SSH.

3. Elegir un punto de conexión para la solicitud

  1. Elige un punto de conexión para realizar una solicitud. Puedes explorar la documentación de la API REST de GitHub para detectar puntos de conexión que se pueden usar a fin de interactuar con GitHub.

  2. Identifica el método HTTP y la ruta de acceso del punto de conexión. Los enviarás con tu solicitud. Para obtener más información, consulta Método HTTP y Ruta de acceso.

    Por ejemplo, el punto de conexión “Crear una incidencia” usa el método HTTP POST y la ruta de acceso /repos/{owner}/{repo}/issues.

  3. Identifica los parámetros de ruta necesarios. Los parámetros de ruta de acceso necesarios aparecen entre llaves {} en la ruta de acceso del punto de conexión. Reemplaza el marcador de posición de cada parámetro por el valor adecuado. Para más información, consulta Trazado.

    Por ejemplo, el punto de conexión “Crear una incidencia” usa la ruta /repos/{owner}/{repo}/issues, y los parámetros de ruta son {owner} y {repo}. Para usar esta ruta de acceso en la solicitud de API, reemplaza {repo} por el nombre del repositorio donde quieras crear una nueva incidencia y reemplaza {owner} por el nombre de la cuenta que posee el repositorio.

4. Realizar una solicitud con GitHub CLI

Para realizar tu solicitud de API con GitHub CLI, utiliza el subcomando api. Para obtener más información, consulta la documentación de apiGitHub CLI.

En la solicitud, especifica las siguientes opciones y valores: * --hostname: si estás autenticado en varias cuentas entre plataformas de GitHub, especifica dónde realizas la solicitud. Por ejemplo: --hostname octocorp.ghe.com. * --method seguido del método HTTP y la ruta de acceso del punto de conexión. Para obtener más información, consulta Método HTTP y Ruta de acceso. * --header: * ** Accept:** Pasa el tipo de medio en un encabezado Accept. Para pasar varios tipos de medios en un encabezado Accept, separa los tipos de medios con una coma: Accept: application/vnd.github+json,application/vnd.github.diff. Para más información, vea Accept y Tipos de soporte físico. * ** X-GitHub-Api-Version:** Pase la versión de la API en un encabezado X-GitHub-Api-Version. Para obtener más información, vea X-GitHub-Api-Version. * ** -f ** o -F seguido de cualquier parámetro de cuerpo o parámetro de consulta en formato key=value. Usa la opción -F para pasar un parámetro que sea un número, un valor booleano o nulo. Usa la opción -f para pasar parámetros de cadena.

Algunos puntos de conexión usan parámetros de consulta que son matrices. Para enviar una matriz en la cadena de consulta, use el parámetro de consulta una vez por elemento de matriz y anexe [] después del nombre del parámetro de consulta. Por ejemplo, para proporcionar una matriz de dos identificadores de repositorio, use -f repository_ids[]=REPOSITORY_A_ID -f repository_ids[]=REPOSITORY_B_ID.

Si no necesitas especificar ningún parámetro de cuerpo o parámetro de consulta en la solicitud, omite esta opción. Para obtener más información, consulta Parámetros de cuerpo y Parámetros de consulta. Para obtener ejemplos, consulta Solicitud de ejemplo mediante parámetros de cuerpo y Solicitud de ejemplo mediante parámetros de consulta. * --hostname: si estás autenticado en varias cuentas entre plataformas de GitHub, especifica dónde realizas la solicitud. Por ejemplo: --hostname octocorp.ghe.com.

Solicitud de ejemplo

En la solicitud de ejemplo siguiente se usa el punto de conexión "Get Octocat" para devolver el octocat como arte ASCII.

Shell
gh api --method GET /octocat \
--header 'Accept: application/vnd.github+json' \
--header "X-GitHub-Api-Version: 2022-11-28"

Solicitud de ejemplo mediante parámetros de consulta

El punto de conexión “Enumerar eventos públicos” devuelve treinta incidencias de manera predeterminada. En el ejemplo siguiente se usa el parámetro de consulta per_page para devolver dos incidencias en lugar de 30, y el parámetro de consulta page para capturar solo la primera página de resultados.

Shell
gh api --method GET /events -F per_page=2 -F page=1
--header 'Accept: application/vnd.github+json' \

Solicitud de ejemplo mediante parámetros de cuerpo

En el ejemplo siguiente se usa el punto de conexión "Crear una incidencia" para crear una nueva incidencia en el repositorio octocat/Spoon-Knife. En la respuesta, busca la html_url de la incidencia y ve la incidencia en el navegador.

Shell
gh api --method POST /repos/octocat/Spoon-Knife/issues \
--header "Accept: application/vnd.github+json" \
--header "X-GitHub-Api-Version: 2022-11-28" \
-f title='Created with the REST API' \
-f body='This is a test issue created by the REST API' \

En esta sección se muestra cómo realizar una solicitud autenticada a la API de REST de GitHub mediante curl.

1. Instalación

Debes tener curl instalado en la máquina. Para comprobar si curl está instalado, ejecuta curl --version en la línea de comandos.

  • Si la salida es información sobre la versión de curl, significa que curl está instalado.
  • Si recibes un mensaje similar a command not found: curl, significa que curl no está instalado. Descargue e instale curl. Para más información, consulta la página de descarga de curl.

2. Elegir un punto de conexión para la solicitud

  1. Elige un punto de conexión para realizar una solicitud. Puedes explorar la documentación de la API REST de GitHub para detectar puntos de conexión que se pueden usar a fin de interactuar con GitHub.

  2. Identifica el método HTTP y la ruta de acceso del punto de conexión. Los enviarás con tu solicitud. Para obtener más información, consulta Método HTTP y Ruta de acceso.

    Por ejemplo, el punto de conexión “Crear una incidencia” usa el método HTTP POST y la ruta de acceso /repos/{owner}/{repo}/issues.

  3. Identifica los parámetros de ruta necesarios. Los parámetros de ruta de acceso necesarios aparecen entre llaves {} en la ruta de acceso del punto de conexión. Reemplaza el marcador de posición de cada parámetro por el valor adecuado. Para más información, consulta Trazado.

    Por ejemplo, el punto de conexión “Crear una incidencia” usa la ruta /repos/{owner}/{repo}/issues, y los parámetros de ruta son {owner} y {repo}. Para usar esta ruta de acceso en la solicitud de API, reemplaza {repo} por el nombre del repositorio donde quieras crear una nueva incidencia y reemplaza {owner} por el nombre de la cuenta que posee el repositorio.

3. Crear credenciales de autenticación

Crea un token de acceso para autenticar tu solicitud. Puedes guardar el token y usarlo para varias solicitudes. Asigna al token todos los ámbitos o permisos necesarios para acceder al punto de conexión. Enviarás este token en un encabezado Authorization con tu solicitud. Para más información, consulte Autenticación.

4. Hacer una solicitud de curl

Usa el comando curl para realizar la solicitud. Para obtener más información, consulta la documentación de curl.

Especifica las siguientes opciones y valores en la solicitud:

  •         **
            `--request` o `-X`** seguido del método HTTP como el valor. Para más información, consulta [Método HTTP](#http-method).
    
  •           **              `--url`              ** seguido de la ruta de acceso completa como valor. La ruta de acceso completa es una dirección URL que incluye la dirección URL base de la API REST de GitHub (`https://api.github.com` o `https://api.SUBDOMAIN.ghe.com`, dependiendo de dónde acceda a GitHub) y la ruta de acceso del punto de conexión, como este ejemplo: `https://api.github.com/PATH`. Reemplace `PATH` por la ruta de acceso del punto de conexión. Para más información, consulta [Trazado](#path).
    

    Para usar parámetros de consulta, agrega un ? al final de la ruta de acceso y, a continuación, anexa el nombre y el valor del parámetro con el formato parameter_name=value. Separa varios parámetros de consulta con &. Para enviar una matriz en la cadena de consulta, usa el parámetro de consulta una vez por elemento de matriz y anexa [] después del nombre del parámetro de consulta. Por ejemplo, para proporcionar una matriz de dos identificadores de repositorio, use ?repository_ids[]=REPOSITORY_A_ID&repository_ids[]=REPOSITORY_B_ID. Para más información, consulta Parámetros para las consultas. Para obtener un ejemplo, consulta Solicitud de ejemplo mediante parámetros de consulta.

  •         **
            `--header` o `-H`:**
    

    * ** Accept:** pasa el tipo de medio en un encabezado Accept. Para pasar varios tipos de medios en un encabezado Accept, separa los tipos de medios con una coma, por ejemplo: Accept: application/vnd.github+json,application/vnd.github.diff. Para más información, vea Accept y Tipos de soporte físico. * ** X-GitHub-Api-Version:** Pase la versión de la API en un encabezado X-GitHub-Api-Version. Para obtener más información, vea X-GitHub-Api-Version. * ** Authorization:** Pase el token de autenticación en un encabezado Authorization. Ten en cuenta que, en la mayoría de los casos, puedes usar Authorization: Bearer o Authorization: token para pasar un token. Sin embargo, si vas a pasar un token web JSON (JWT), debes usar Authorization: Bearer. Para más información, consulte Autenticación. Para obtener un ejemplo de una solicitud que usa un encabezado Authorization, consulta Solicitud de ejemplo mediante parámetros de cuerpo.

  •         **
            `--data` o `-d`** seguido de cualquier parámetro de cuerpo dentro de un objeto JSON. Si no necesitas especificar ningún parámetro de cuerpo en la solicitud, omite esta opción. Para obtener más información, consulta [Parámetros de cuerpo](#body-parameters). Para obtener un ejemplo, consulta [Solicitud de ejemplo mediante parámetros de cuerpo](#example-request-using-body-parameters-1).
    

Solicitud de ejemplo

En la solicitud de ejemplo siguiente se usa el punto de conexión "Get Octocat" para devolver el octocat como arte ASCII.

Shell
curl --request GET \
--url "https://api.github.com/octocat" \
--header "Accept: application/vnd.github+json" \
--header "X-GitHub-Api-Version: 2022-11-28"

Solicitud de ejemplo mediante parámetros de consulta

El endpoint “Listar eventos públicos” devuelve treinta problemas de manera predeterminada. En el ejemplo siguiente se usa el parámetro de consulta per_page para devolver dos incidencias en lugar de 30, y el parámetro de consulta page para capturar solo la primera página de resultados.

Shell
curl --request GET \
--url "https://api.github.com/events?per_page=2&page=1" \
--header "Accept: application/vnd.github+json" \
--header "X-GitHub-Api-Version: 2022-11-28" \
  https://api.github.com/events

Solicitud de ejemplo mediante parámetros de cuerpo

En el ejemplo siguiente se utiliza el endpoint Crear una incidencia para crear una nueva incidencia en el repositorio octocat/Spoon-Knife. Reemplaza YOUR-TOKEN por el token de autenticación que creaste en un paso anterior.

Nota:

Si usas fine-grained personal access token, debes reemplazar octocat/Spoon-Knife por un repositorio que poseas o que pertenezca a una organización de la que seas miembro. El token debe tener acceso a ese repositorio y tener permisos de lectura y escritura para problemas de repositorio. Para más información, consulta Administración de tokens de acceso personal.

Shell
curl \
--request POST \
--url "https://api.github.com/repos/octocat/Spoon-Knife/issues" \
--header "Accept: application/vnd.github+json" \
--header "X-GitHub-Api-Version: 2022-11-28" \
--header "Authorization: Bearer YOUR-TOKEN" \
--data '{
  "title": "Created with the REST API",
  "body": "This is a test issue created by the REST API"
}'

En esta sección se muestra cómo realizar una solicitud a la API de REST de GitHub mediante JavaScript y Octokit.js. Para ver una guía más detallada, consulta Scripting con la API de REST y JavaScript.

1. Instalación

Debes instalar octokit para usar la biblioteca Octokit.js que se muestra en los ejemplos siguientes.

2. Elegir un punto de conexión para la solicitud

  1. Elige un punto de conexión para realizar una solicitud. Puedes explorar la documentación de la API REST de GitHub para detectar puntos de conexión que se pueden usar a fin de interactuar con GitHub.

  2. Identifica el método HTTP y la ruta de acceso del punto de conexión. Los enviarás con tu solicitud. Para obtener más información, consulta Método HTTP y Ruta de acceso.

    Por ejemplo, el punto de conexión “Crear una incidencia” usa el método HTTP POST y la ruta de acceso /repos/{owner}/{repo}/issues.

  3. Identifica los parámetros necesarios de ruta. Los parámetros de ruta necesarios aparecen entre llaves {} en la ruta del punto de conexión. Reemplaza el marcador de posición de cada parámetro por el valor adecuado. Para más información, consulta Trazado.

    Por ejemplo, el endpoint "Crear una incidencia" usa la ruta /repos/{owner}/{repo}/issues, y los parámetros de la ruta son {owner} y {repo}. Para usar esta ruta de acceso en la solicitud de API, reemplaza {repo} por el nombre del repositorio donde quieras crear una nueva incidencia y reemplaza {owner} por el nombre de la cuenta que posee el repositorio.

3. Crear un token de acceso

Crea un token de acceso para autenticar tu solicitud. Puedes guardar el token y usarlo para varias solicitudes. Asigna al token todos los ámbitos o permisos necesarios para acceder al punto de conexión. Enviarás este token en un encabezado Authorization con tu solicitud. Para más información, consulte Autenticación.

4. Realizar una solicitud con Octokit.js

  1. Importaroctokit en tu script. Por ejemplo, import { Octokit } from "octokit";. Para obtener otras formas de importar octokit, consulta el archivo README de Octokit.js.

  2. Cree una instancia de Octokit con el token Reemplaza YOUR-TOKEN por tu token.

    JavaScript
    const octokit = new Octokit({ 
      auth: 'YOUR-TOKEN'
    });
    
  3. Usa octokit.request para ejecutar la solicitud.

    • Envía el método HTTP y la ruta de acceso como primer argumento para el método request. Para obtener más información, consulta Método HTTP y Ruta de acceso.
    • Especifica todos los parámetros de ruta, consulta y cuerpo en un objeto como segundo argumento del método request. Para obtener más información, vea Parámetros.

    En la siguiente solicitud de ejemplo, el método HTTP es POST, la ruta de acceso es /repos/{owner}/{repo}/issues, los parámetros de la ruta de acceso son owner: "octocat" y repo: "Spoon-Knife", y los parámetros de cuerpo son title: "Created with the REST API" y body: "This is a test issue created by the REST API".

    Nota:

    Si usas fine-grained personal access token, debes reemplazar octocat/Spoon-Knife por un repositorio que poseas o que pertenezca a una organización de la que seas miembro. El token debe tener acceso a ese repositorio y tener permisos de lectura y escritura para problemas de repositorio. Para más información, consulta Administración de tokens de acceso personal.

    JavaScript
    await octokit.request("POST /repos/{owner}/{repo}/issues", {
      owner: "octocat",
      repo: "Spoon-Knife",
      title: "Created with the REST API",
      body: "This is a test issue created by the REST API",
    });
    

    El método request pasa automáticamente el encabezado Accept: application/vnd.github+json. Para pasar encabezados adicionales o un encabezado Accept diferente, agrega una propiedad headers al objeto que se pasa como segundo argumento. El valor de la propiedad headers es un objeto con los nombres de encabezado como claves y valores de encabezado como valores.

    Por ejemplo, el código siguiente enviará un encabezado content-type con un valor de text/plain y un encabezado X-GitHub-Api-Version con un valor de 2026-03-10.

    JavaScript
    await octokit.request("GET /octocat", {
      headers: {
        "content-type": "text/plain",
        "X-GitHub-Api-Version": "2026-03-10",
      },
    });
    

Uso de la respuesta

Tras hacer una solicitud, la API devolverá el código de estado de respuesta, los encabezados de respuesta y, posiblemente, un cuerpo de la respuesta.

Acerca del código de respuesta y los encabezados

Cada solicitud devolverá un código de estado HTTP que indica el éxito de la respuesta. Para obtener más información sobre los códigos de respuesta, consulta la documentación del código de estado de respuesta HTTP de MDN.

Además, la respuesta incluirá encabezados que proporcionan más detalles sobre la respuesta. Los encabezados que comienzan por X- o x- son personalizados para GitHub. Por ejemplo, los encabezados x-ratelimit-remaining y x-ratelimit-reset indican cuántas solicitudes puede realizar en un período de tiempo.

Para ver el código de estado y los encabezados, usa la opción --include o --i al enviar la solicitud.

Por ejemplo, esta solicitud obtiene una lista de incidencias en el repositorio octocat/Spoon-Knife:

gh api \
--header 'Accept: application/vnd.github+json' \
--method GET /repos/octocat/Spoon-Knife/issues \
-F per_page=2 --include

Y devuelve un código de respuesta y encabezados que tienen un aspecto similar al siguiente:

HTTP/2.0 200 OK
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: ETag, Link, Location, Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset
Cache-Control: private, max-age=60, s-maxage=60
Content-Security-Policy: default-src 'none'
Content-Type: application/json; charset=utf-8
Date: Thu, 04 Aug 2022 19:56:41 GMT
Etag: W/"a63dfbcfdb73621e9d2e89551edcf9856731ced534bd7f1e114a5da1f5f73418"
Link: <https://api.github.com/repositories/1300192/issues?per_page=1&page=2>; rel="next", <https://api.github.com/repositories/1300192/issues?per_page=1&page=14817>; rel="last"
Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin
Server: GitHub.com
Strict-Transport-Security: max-age=31536000; includeSubdomains; preload
Vary: Accept, Authorization, Cookie, Accept-Encoding, Accept, X-Requested-With
X-Accepted-Oauth-Scopes: repo
X-Content-Type-Options: nosniff
X-Frame-Options: deny
X-Github-Api-Version-Selected: 2022-08-09
X-Github-Media-Type: github.v3; format=json
X-Github-Request-Id: 1C73:26D4:E2E500:1EF78F4:62EC2479
X-Oauth-Client-Id: 178c6fc778ccc68e1d6a
X-Oauth-Scopes: gist, read:org, repo, workflow
X-Ratelimit-Limit: 15000
X-Ratelimit-Remaining: 14996
X-Ratelimit-Reset: 1659645499
X-Ratelimit-Resource: core
X-Ratelimit-Used: 4
X-Xss-Protection: 0

En este ejemplo, el código de respuesta es 200, que indica una solicitud correcta.

Al realizar una solicitud con Octokit.js, el método request devuelve una promesa. Si la solicitud se realizó correctamente, la promesa se resuelve en un objeto que incluye el código de estado HTTP de la respuesta (status) y los encabezados de respuesta (headers). En caso de error, la promesa se resuelve en un objeto que incluye el código de estado HTTP de la respuesta (status) y los encabezados de respuesta (response.headers).

Puedes usar un bloque try/catch para detectar un error si se produce. Por ejemplo, si la solicitud del script siguiente se realiza correctamente, el script registrará el código de estado y el valor del encabezado x-ratelimit-remaining. Si la solicitud no se realizó correctamente, el script registrará el código de estado, el valor del encabezado x-ratelimit-remaining y el mensaje de error.

En el ejemplo siguiente, reemplaza REPO-OWNER por el nombre de la cuenta que posee el repositorio y REPO-NAME por el nombre del repositorio.

JavaScript
try {
  const result = await octokit.request("GET /repos/{owner}/{repo}/issues", {
    owner: "REPO-OWNER",
    repo: "REPO-NAME",
    per_page: 2,
  });

  console.log(`Success! Status: ${result.status}. Rate limit remaining: ${result.headers["x-ratelimit-remaining"]}`)

} catch (error) {
  console.log(`Error! Status: ${error.status}. Rate limit remaining: ${error.headers["x-ratelimit-remaining"]}. Message: ${error.response.data.message}`)
}

Para ver el código de estado y los encabezados, usa la opción --include o --i al enviar la solicitud.

Por ejemplo, esta solicitud obtiene una lista de incidencias en el repositorio octocat/Spoon-Knife:

curl --request GET \
--url "https://api.github.com/repos/octocat/Spoon-Knife/issues?per_page=2" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN" \
--include

Y devuelve un código de respuesta y encabezados que tienen un aspecto similar al siguiente:

HTTP/2 200
server: GitHub.com
date: Thu, 04 Aug 2022 20:07:51 GMT
content-type: application/json; charset=utf-8
cache-control: public, max-age=60, s-maxage=60
vary: Accept, Accept-Encoding, Accept, X-Requested-With
etag: W/"7fceb7e8c958d3ec4d02524b042578dcc7b282192e6c939070f4a70390962e18"
x-github-media-type: github.v3; format=json
link: <https://api.github.com/repositories/1300192/issues?per_page=2&sort=updated&direction=asc&page=2>; rel="next", <https://api.github.com/repositories/1300192/issues?per_page=2&sort=updated&direction=asc&page=7409>; rel="last"
access-control-expose-headers: ETag, Link, Location, Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset
access-control-allow-origin: *
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: origin-when-cross-origin, strict-origin-when-cross-origin
content-security-policy: default-src 'none'
x-ratelimit-limit: 15000
x-ratelimit-remaining: 14996
x-ratelimit-reset: 1659645535
x-ratelimit-resource: core
x-ratelimit-used: 4
accept-ranges: bytes
content-length: 4936
x-github-request-id: 14E0:4BC6:F1B8BA:208E317:62EC2715

En este ejemplo, el código de respuesta es 200, que indica una solicitud correcta.

Acerca del cuerpo de la respuesta

Muchos puntos de conexión devolverán un cuerpo de la respuesta. A menos que se especifique lo contrario, el cuerpo de la respuesta está en formato JSON. Los campos vacíos se incluyen como valores null en lugar de omitirse. Todas las marcas de tiempo se devuelven en hora UTC, formato ISO 8601: YYYY-MM-DDTHH:MM:SSZ.

A diferencia de GraphQL API donde se especifica la información que deseas, la API de REST normalmente devuelve más información de la que necesitas. Si lo deseas, puedes analizar la respuesta para extraer fragmentos de información específicos.

Por ejemplo, puedes usar > para redirigir la respuesta a un archivo. En el ejemplo siguiente, reemplaza REPO-OWNER por el nombre de la cuenta que posee el repositorio y REPO-NAME por el nombre del repositorio.

Shell
gh api \
--header 'Accept: application/vnd.github+json' \
--method GET /repos/REPO-OWNER/REPO-NAME/issues \
-F per_page=2 > data.json

A continuación, puedes usar jq para obtener el título y el identificador de autor de cada incidencia:

Shell
jq '.[] | {title: .title, authorID: .user.id}' data.json

Los dos comandos anteriores devuelven algo parecido a:

{
  "title": "Update index.html",
  "authorID": 10701255
}
{
  "title": "Edit index file",
  "authorID": 53709285
}

Para obtener más información sobre jq, consulta la documentación de jq.

Por ejemplo, puedes obtener el título y el ID de autor de cada número. En el ejemplo siguiente, reemplaza REPO-OWNER por el nombre de la cuenta que posee el repositorio y REPO-NAME por el nombre del repositorio.

JavaScript
try {
  const result = await octokit.request("GET /repos/{owner}/{repo}/issues", {
    owner: "REPO-OWNER",
    repo: "REPO-NAME",
    per_page: 2,
  });

  const titleAndAuthor = result.data.map(issue => {title: issue.title, authorID: issue.user.id})

  console.log(titleAndAuthor)

} catch (error) {
  console.log(`Error! Status: ${error.status}. Message: ${error.response.data.message}`)
}

Por ejemplo, puedes usar > para redirigir la respuesta a un archivo. En el ejemplo siguiente, reemplaza REPO-OWNER por el nombre de la cuenta que posee el repositorio y REPO-NAME por el nombre del repositorio.

Shell
curl --request GET \
--url "https://api.github.com/repos/REPO-OWNER/REPO-NAME/issues?per_page=2" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN" > data.json

A continuación, puedes usar jq para obtener el título y el ID de autor de cada incidencia:

Shell
jq '.[] | {title: .title, authorID: .user.id}' data.json

Los dos comandos anteriores devuelven algo parecido a:

{
  "title": "Update index.html",
  "authorID": 10701255
}
{
  "title": "Edit index file",
  "authorID": 53709285
}

Para obtener más información sobre jq, consulta la documentación de jq.

Representaciones detalladas frente a resumen

Una respuesta puede incluir todos los atributos de un recurso o solo un subconjunto de atributos, en función de si se captura un recurso individual o una lista de recursos.

  • Al capturar un recurso individual, como un repositorio específico, la respuesta suele incluir todos los atributos para ese recurso. Es la representación "detallada" del recurso.
  • Al capturar una lista de recursos, como una lista de varios repositorios, la respuesta solo incluirá un subconjunto de los atributos de cada recurso. Esta es la representación resumida del recurso.

Ten en cuenta que, en ocasiones, la autorización influye en la cantidad de detalles que se incluyen en la representación.

El motivo de esto es que, para proporcionar algunos atributos, la API requiere realizar muchos cálculos, por lo que GitHub excluye esos atributos de la representación de resumen. Para obtener estos atributos, puedes recuperar la representación detallada.

La documentación proporciona un ejemplo de respuesta para cada método de la API. La respuesta de ejemplo ilustra todos los atributos que se devuelven con ese método.

Hypermedia

Todos los recursos pueden tener una o varias propiedades *_url vinculadas a otros recursos. Su función es proporcionar las URL explícitas para que los clientes de API adecuados no tengan que construirlas ellos mismos. Se recomienda encarecidamente que los clientes de API las usen. De esta forma, para los desarrolladores será más sencillo realizar actualizaciones futuras de la API. Se espera que todas las direcciones URL sean plantillas de URI RFC 6570 correctas.

Después, puede expandir estas plantillas con algo parecido a la gema uri_template:

>> tmpl = URITemplate.new('/notifications{?since,all,participating}')
>> tmpl.expand
=> "/notifications"

>> tmpl.expand all: 1
=> "/notifications?all=1"

>> tmpl.expand all: 1, participating: 1
=> "/notifications?all=1&participating=1"

Pasos siguientes

En este artículo se ha mostrado cómo enumerar y crear propuestas en un repositorio. Para más práctica, intenta comentar una propuesta, edita el título de una propuesta o cierra una propuesta. Para obtener más información sobre estas operaciones, consulta el punto de conexión “Crear un comentario de incidencia” y “Actualizar una incidencia”.

Para obtener más información sobre otros puntos de conexión que puedes usar, consulta la documentación de referencia de REST.