Skip to main content

RĂ©solution des problĂšmes de l’API REST

DĂ©couvrez comment diagnostiquer et rĂ©soudre les problĂšmes courants pour l’API REST.

Erreurs de limite de débit

GitHub applique les limites de dĂ©bit pour s’assurer que l’API reste disponible pour tous les utilisateurs. Pour plus d’informations, consultez « Limites de dĂ©bit pour l'API REST Â».

Si vous dĂ©passez votre limite de dĂ©bit primaire, vous recevrez une rĂ©ponse 403 Forbidden ou 429 Too Many Requests et l’en-tĂȘte x-ratelimit-remaining sera 0. Si vous dĂ©passez une limite de dĂ©bit secondaire, vous recevrez une rĂ©ponse 403 Forbidden ou 429 Too Many Requests et un message d’erreur indiquant que vous avez dĂ©passĂ© une limite de dĂ©bit secondaire.

Si vous recevez une erreur de limite de dĂ©bit, vous devez arrĂȘter temporairement d’effectuer des demandes en fonction des instructions suivantes :

  • Si l'en-tĂȘte de rĂ©ponse retry-after est prĂ©sent, vous ne devez pas rĂ©essayer votre demande avant le nombre de secondes spĂ©cifiĂ©.
  • Si l’en-tĂȘte x-ratelimit-remaining est 0, vous ne devez pas effectuer une autre demande avant la durĂ©e spĂ©cifiĂ©e par l’en-tĂȘte x-ratelimit-reset. L’en-tĂȘte x-ratelimit-reset est en secondes d’époque UTC.
  • Sinon, attendez au moins une minute avant de rĂ©essayer. Si votre demande continue d'Ă©chouer en raison d'une limite de dĂ©bit secondaire, attendez une durĂ©e exponentiellement croissante entre les nouvelles tentatives et levez une erreur aprĂšs un nombre spĂ©cifique de nouvelles tentatives.

La poursuite des demandes pendant que vous ĂȘtes limitĂ© peut entraĂźner l'interdiction de votre intĂ©gration.

Pour plus d’informations sur la façon d’éviter de dĂ©passer les limites de dĂ©bit, consultez Meilleures pratiques pour utiliser l'API REST.

404 Not Found pour une ressource existante

Si vous effectuez une demande d’accĂšs Ă  une ressource privĂ©e et que votre demande n’est pas correctement authentifiĂ©e, vous recevrez une rĂ©ponse 404 Not Found. GitHub utilise une rĂ©ponse 404 Not Found au lieu d’une rĂ©ponse 403 Forbidden pour Ă©viter de confirmer l’existence de rĂ©fĂ©rentiels privĂ©s.

Si vous recevez une rĂ©ponse 404 Not Found lorsque vous savez que la ressource que vous demandez existe, vous devez case activĂ©e votre authentification. Par exemple :

  • Si vous utilisez un personal access token (classic), vous devez vous assurer que :
    • Le jeton a les Ă©tendues requises pour utiliser le point de terminaison. Pour plus d’informations, consultez « Ă‰tendues des applications OAuth Â» et « Gestion de vos jetons d'accĂšs personnels Â».
    • Le propriĂ©taire du jeton dispose des autorisations nĂ©cessaires pour utiliser le point de terminaison. Par exemple, si un point de terminaison ne peut ĂȘtre utilisĂ© que par des propriĂ©taire d'organisation s, seuls les utilisateurs propriĂ©taires de l’organisation concernĂ©e peuvent utiliser le point de terminaison.
    • Le jeton n’a pas expirĂ© ou n’a pas Ă©tĂ© rĂ©voquĂ©. Pour plus d’informations, consultez « Expiration et rĂ©vocation des jetons Â».
  • Si vous utilisez un fine-grained personal access token, vous devez vous assurer que :
    • Le jeton dispose des autorisations nĂ©cessaires pour utiliser le point de terminaison. Consultez la documentation du point de terminaison pour obtenir plus d’informations sur les autorisations requises.
    • Le propriĂ©taire de la ressource spĂ©cifiĂ© pour le jeton correspond au propriĂ©taire de la ressource affectĂ©e par le point de terminaison. Pour plus d’informations, consultez « Gestion de vos jetons d'accĂšs personnels Â».
    • Le jeton a accĂšs Ă  tous les rĂ©fĂ©rentiels privĂ©s affectĂ©s par le point de terminaison. Pour plus d’informations, consultez « Gestion de vos jetons d'accĂšs personnels Â».
    • Le propriĂ©taire du jeton dispose des autorisations nĂ©cessaires pour utiliser le point de terminaison. Par exemple, si un point de terminaison ne peut ĂȘtre utilisĂ© que par des propriĂ©taire d'organisation s, seuls les utilisateurs propriĂ©taires de l’organisation concernĂ©e peuvent utiliser le point de terminaison.
    • Le jeton n’a pas expirĂ© ou n’a pas Ă©tĂ© rĂ©voquĂ©. Pour plus d’informations, consultez « Expiration et rĂ©vocation des jetons Â».
  • Si vous utilisez un jeton d’accĂšs d’installation GitHub App, vĂ©rifiez que :
    • Les GitHub App disposent des autorisations requises pour utiliser le point de terminaison. Consultez la documentation du point de terminaison pour obtenir plus d’informations sur les autorisations requises.
    • Le point de terminaison affecte uniquement les ressources appartenant au compte oĂč les GitHub App sont installĂ©es.
    • Les GitHub App ont accĂšs aux rĂ©fĂ©rentiels affectĂ©s par le point de terminaison.
    • Le jeton n’a pas expirĂ© ou n’a pas Ă©tĂ© rĂ©voquĂ©. Pour plus d’informations, consultez « Expiration et rĂ©vocation des jetons Â».
  • Si vous utilisez un jeton d’accĂšs utilisateur GitHub App, vĂ©rifiez que :
    • Les GitHub App disposent des autorisations requises pour utiliser le point de terminaison. Consultez la documentation du point de terminaison pour obtenir plus d’informations sur les autorisations requises.
    • L’utilisateur qui a autorisĂ© le jeton dispose d’autorisations requises pour utiliser le point de terminaison. Par exemple, si un point de terminaison ne peut ĂȘtre utilisĂ© que par des propriĂ©taire d'organisation s, seuls les utilisateurs propriĂ©taires de l’organisation concernĂ©e peuvent utiliser le point de terminaison.
    • Les GitHub App ont accĂšs aux rĂ©fĂ©rentiels affectĂ©s par le point de terminaison.
    • L’utilisateur a accĂšs Ă  tous les rĂ©fĂ©rentiels affectĂ©s par le point de terminaison.
    • L’utilisateur a approuvĂ© toutes les autorisations mises Ă  jour pour vos GitHub App. Pour plus d’informations, consultez « Approbation des autorisations mises Ă  jour pour une application GitHub Â».
  • Si vous utilisez un jeton d’accĂšs utilisateur OAuth app, vĂ©rifiez que :
    • Le jeton a les Ă©tendues requises pour utiliser le point de terminaison. Pour plus d’informations, consultez « Ă‰tendues des applications OAuth Â».
    • L’utilisateur qui a autorisĂ© le jeton dispose d’autorisations requises pour utiliser le point de terminaison. Par exemple, si un point de terminaison ne peut ĂȘtre utilisĂ© que par des propriĂ©taire d'organisation s, seuls les utilisateurs propriĂ©taires de l’organisation concernĂ©e peuvent utiliser le point de terminaison.
    • L’organisation n’a pas bloquĂ© l’accĂšs aux applications OAuth, si vous utilisez un point de terminaison qui affectera les ressources appartenant Ă  une organisation. Les propriĂ©taires d’applications ne peuvent pas voir si leur application est bloquĂ©e, mais ils peuvent demander aux utilisateurs de l’application de case activĂ©e cela. Pour plus d’informations, consultez À propos des restrictions d’accĂšs des applications OAuth.
    • Le jeton n’a pas expirĂ© ou n’a pas Ă©tĂ© rĂ©voquĂ©. Pour plus d’informations, consultez « Expiration et rĂ©vocation des jetons Â».
  • Si vous utilisez GITHUB_TOKEN dans un flux de travail GitHub Actions, vĂ©rifiez que :
    • Le point de terminaison affecte uniquement les ressources dĂ©tenues par le rĂ©fĂ©rentiel oĂč le flux de travail est en cours d’exĂ©cution. Si vous devez accĂ©der aux ressources en dehors de ce rĂ©fĂ©rentiel, telles que les ressources appartenant Ă  une organisation ou des ressources appartenant Ă  un autre rĂ©fĂ©rentiel, vous devez utiliser un personal access token ou un jeton d’accĂšs pour un GitHub App.

Pour plus d’informations sur l’authentification, consultez Authentification auprùs de l’API REST.

Vous devez Ă©galement case activĂ©e pour les fautes de frappe dans votre URL. Par exemple, l’ajout d’une barre oblique de fin au point de terminaison entraĂźne un 404 Not Found. Vous pouvez consulter la documentation de rĂ©fĂ©rence du point de terminaison pour confirmer que vous disposez de l’URL correcte.

En outre, tous les paramĂštres de chemin d’accĂšs doivent ĂȘtre encodĂ©s dans l’URL. Par exemple, toutes les barres obliques de la valeur du paramĂštre doivent ĂȘtre remplacĂ©es par %2F. Si vous n’encodez pas correctement les barres obliques dans le nom du paramĂštre, l’URL du point de terminaison ne sera pas interprĂ©tĂ©e correctement.

Résultats manquants

La plupart des points de terminaison qui retournent une liste de ressources prennent en charge la pagination. Pour la plupart de ces points de terminaison, seules les 30 premiĂšres ressources sont retournĂ©es par dĂ©faut. Pour afficher toutes les ressources, vous devez paginer les rĂ©sultats. Pour plus d’informations, consultez « Utilisation de la pagination dans l’API REST Â».

Si vous utilisez correctement la pagination et que vous ne voyez toujours pas tous les rĂ©sultats attendus, vĂ©rifiez que les informations d’identification d’authentification que vous avez utilisĂ©es ont accĂšs Ă  toutes les ressources attendues. Par exemple, si vous utilisez un jeton d’accĂšs d’installation GitHub App, si l’installation n’a Ă©tĂ© accordĂ©e qu’à un sous-ensemble de rĂ©fĂ©rentiels d’une organisation, toute demande de tous les rĂ©fĂ©rentiels de cette organisation retourne uniquement les rĂ©fĂ©rentiels auxquels l’installation de l’application peut accĂ©der.

NĂ©cessite une authentification lors de l’utilisation de l’authentification de base

L’authentification de base avec votre nom d’utilisateur et votre mot de passe n’est pas prise en charge. À la place, vous devez utiliser une personal access token or un jeton d’accĂšs pour un GitHub App ou OAuth app. Pour plus d’informations, consultez « Authentification auprĂšs de l’API REST Â».

Délais d'attente

Si GitHub prend plus de 10 secondes pour traiter une demande d’API, GitHub mettra fin Ă  la demande et vous recevrez une rĂ©ponse de dĂ©lai expirĂ© et un message d’« Erreur de serveur Â».

GitHub se rĂ©serve le droit de modifier le dĂ©lai d’expiration pour protĂ©ger la vitesse et la fiabilitĂ© de l’API.

Vous pouvez case activĂ©e l’état de l’API REST Ă  githubstatus.com pour dĂ©terminer si le dĂ©lai d’expiration est dĂ» Ă  un problĂšme avec l’API. Vous pouvez Ă©galement essayer de simplifier votre demande ou d’essayer votre demande ultĂ©rieurement. Par exemple, si vous demandez 100 articles sur une page, vous pouvez essayer de demander moins d’articles.

Ressource non accessible

Si vous utilisez un GitHub App ou fine-grained personal access token et que vous recevez une erreur « Ressource non accessible par intĂ©gration Â» ou « Ressource non accessible par personal access token Â», votre jeton a des autorisations insuffisantes. Consultez la documentation du point de terminaison pour obtenir plus d’informations sur les autorisations requises.

Vous pouvez utiliser l’en-tĂȘte X-Accepted-GitHub-Permissions pour identifier les autorisations requises pour accĂ©der au point de terminaison de l’API REST.

La valeur de l’en-tĂȘte X-Accepted-GitHub-Permissions est une liste sĂ©parĂ©e par des virgules des autorisations requises pour utiliser le point de terminaison. Parfois, vous pouvez choisir parmi plusieurs ensembles d’autorisations. Dans ce cas, les diverses listes sĂ©parĂ©es par des virgules seront sĂ©parĂ©es par un point-virgule.

Par exemple :

  • X-Accepted-GitHub-Permissions: contents=read signifie que votre GitHub App ou fine-grained personal access token a besoin d’un accĂšs en lecture Ă  l’autorisation de contenu.
  • X-Accepted-GitHub-Permissions: pull_requests=write,contents=read signifie que votre GitHub App ou fine-grained personal access token a besoin d’un accĂšs en Ă©criture Ă  l’autorisation de demande de tirage (pull request) et d’accĂšs en lecture Ă  l’autorisation de contenu.
  • X-Accepted-GitHub-Permissions: pull_requests=read,contents=read; issues=read,contents=read signifie que votre GitHub App ou fine-grained personal access token a besoin soit d’un accĂšs en lecture Ă  l’autorisation de demande de tirage (pull request) et d’un accĂšs en lecture Ă  l’autorisation de contenu, ou alors d’un accĂšs en lecture aux problĂšmes d’autorisation et d’un accĂšs en lecture Ă  l’autorisation de contenu.

Problùmes d’analyse JSON

Si vous envoyez un JSON non valide dans le corps de la demande, vous pouvez recevoir une rĂ©ponse 400 Bad Request et un message d’erreur « ProblĂšmes d’analyse JSON Â». Vous pouvez utiliser un validateur linter ou JSON pour vous aider Ă  identifier les erreurs dans votre JSON.

Le corps doit ĂȘtre un objet JSON

Si le point de terminaison attend un objet JSON et que vous ne mettez pas en forme votre corps de requĂȘte en tant qu’objet JSON, vous pouvez recevoir une rĂ©ponse 400 Bad Request et un message d’erreur « Corps doit ĂȘtre un objet JSON Â».

Demande non valide

Si vous omettez les paramĂštres requis ou que vous utilisez le type incorrect pour un paramĂštre, vous pouvez recevoir une rĂ©ponse 422 Unprocessable Entity et un message d’erreur « Demande non valide Â». Par exemple, vous obtiendrez cette erreur si vous spĂ©cifiez une valeur de paramĂštre en tant que tableau, mais que le point de terminaison attend une chaĂźne. Vous pouvez consulter la documentation de rĂ©fĂ©rence du point de terminaison pour vĂ©rifier que vous utilisez les types de paramĂštres corrects et que vous incluez tous les paramĂštres obligatoires.

Échec de la validation

Si votre demande n’a pas pu ĂȘtre traitĂ©e, vous pouvez recevoir une rĂ©ponse 422 Unprocessable Entity et un message d’erreur « Ă‰chec de validation Â». Le corps de la rĂ©ponse inclut une propriĂ©tĂ© errors, qui inclut une propriĂ©tĂ© code pour vous aider Ă  diagnostiquer le problĂšme.

CodeDescription
missingUne ressource n’existe pas.
missing_fieldUn paramĂštre requis n’a pas Ă©tĂ© spĂ©cifiĂ©. Passez en revue la documentation du point de terminaison pour voir quels paramĂštres sont requis.
invalidLa mise en forme d’un paramùtre n’est pas valide. Pour plus d’informations, consultez la documentation du point de terminaison.
already_existsUne autre ressource a la mĂȘme valeur que l’un de vos paramĂštres. Cela peut se produire dans les ressources qui doivent disposer d’une clĂ© unique (par exemple les noms d’étiquette).
unprocessableLes paramĂštres fournis n’étaient pas valides.
customReportez-vous Ă  la propriĂ©tĂ© message pour diagnostiquer l’erreur.

Version non prise en charge

Vous devez utiliser l’en-tĂȘte X-GitHub-Api-Version pour spĂ©cifier une version d’API. Par exemple :

curl --header "X-GitHub-Api-Version:2022-11-28" https://api.github.com/zen

Si vous spĂ©cifiez une version qui n’existe pas, vous recevrez une erreur 400 Bad Requestet un message indiquant que la version n’est pas prise en charge.

Pour plus d’informations, consultez « Versions des API Â».

Agent utilisateur requis

Les demandes sans un en-tĂȘte User-Agent valable seront rejetĂ©es. Vous devez utiliser votre nom d’utilisateur ou le nom de votre application pour la valeur User-Agent.

curl envoie par dĂ©faut un en-tĂȘte User-Agent valide.

Autres erreurs

Si vous observez une erreur qui n’est pas traitĂ©e ici, vous devez faire rĂ©fĂ©rence au message d’erreur que l’API vous donne. La plupart des messages d’erreur fournissent un indice sur ce qui est incorrect et un lien vers la documentation pertinente.

Si vous observez des dĂ©faillances inattendues, vous pouvez utiliser githubstatus.com ou l’API d’état de GitHub pour vĂ©rifier si des incidents affectent l’API.

Pour aller plus loin