Skip to main content

Meilleures pratiques pour utiliser l'API REST

Suivez ces meilleures pratiques pendant l’utilisation de l’API de GitHub.

Éviter l’interrogation

Vous devez vous abonner aux Ă©vĂ©nements de webhook au lieu d’interroger l’API pour rechercher des donnĂ©es. Ce qui aidera votre intĂ©gration Ă  rester dans la limite de dĂ©bit d’API. Pour plus d’informations, consultez « Documentation sur les webhooks Â».

Formuler des demandes authentifiées

Les demandes authentifiĂ©es ont une limitation de dĂ©bit primaire plus Ă©levĂ©e que celles qui ne le sont pas. Pour Ă©viter de dĂ©passer la limitation de dĂ©bit, il est donc recommandĂ© de formuler des demandes authentifiĂ©es. Pour plus d’informations, consultez « Limites de dĂ©bit pour l'API REST Â».

Éviter les demandes simultanĂ©es

Pour Ă©viter de dĂ©passer les limitations de dĂ©bit secondaires, vous devez formuler des demandes en sĂ©rie plutĂŽt que simultanĂ©ment. Pour ce faire, vous pouvez implĂ©menter un systĂšme de file d’attente pour les demandes.

Pause entre les demandes mutatives

Si vous formulez un grand nombre de demandes POST, PATCH, PUT ou DELETE, attendez au moins une seconde entre chaque demande. Cela vous aidera à rester en dessous des limitations de débit secondaires.

Gérer les erreurs de limitation de débit de maniÚre appropriée

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.

Suivre les redirections

L’API REST GitHub utilise la redirection HTTP le cas Ă©chĂ©ant. Vous devez partir du principe que toute demande peut entraĂźner une redirection. La rĂ©ception d’une redirection HTTP ne constitue pas une erreur, et vous devez suivre cette redirection.

Un code d’état 301 indique une redirection permanente. Vous devez rĂ©pĂ©ter votre demande Ă  l’URL spĂ©cifiĂ©e par l’en-tĂȘte location. En outre, vous devez mettre Ă  jour votre code pour utiliser cette URL pour les demandes ultĂ©rieures.

Un code d’état 302 ou 307 indique une redirection temporaire. Vous devez rĂ©pĂ©ter votre demande Ă  l’URL spĂ©cifiĂ©e par l’en-tĂȘte location. Toutefois, vous ne devez pas mettre Ă  jour votre code pour utiliser cette URL pour les demandes ultĂ©rieures.

D’autres codes d’état de redirection peuvent ĂȘtre utilisĂ©s conformĂ©ment aux spĂ©cifications HTTP.

Ne pas analyser manuellement les URL

De nombreux points de terminaison d’API retournent des valeurs d’URL pour les champs dans le corps de la rĂ©ponse. Il est dĂ©conseillĂ© d’essayer d’analyser ces URL ou de prĂ©voir la structure des URL futures. Cela peut entraĂźner le dysfonctionnement de votre intĂ©gration si GitHub modifie la structure de l’URL Ă  l’avenir. Au lieu de cela, il est recommandĂ© de rechercher un champ qui contient les informations dont vous avez besoin. Par exemple, le point de terminaison utilisĂ© pour crĂ©er un problĂšme retourne un champ html_url avec une valeur de type https://github.com/octocat/Hello-World/issues/1347 et un champ number avec une valeur de type 1347. Si vous avez besoin de connaĂźtre le numĂ©ro du problĂšme, utilisez le champ number au lieu d’analyser le champ html_url.

De mĂȘme, il est dĂ©conseillĂ© d’essayer de construire manuellement des requĂȘtes de pagination. Au lieu de cela, utilisez les en-tĂȘtes de lien pour dĂ©terminer quelles pages de rĂ©sultats peuvent faire l’objet d’une demande. Pour plus d’informations, consultez « Utilisation de la pagination dans l’API REST Â».

Utiliser des demandes conditionnelles si nécessaire

La plupart des points de terminaison retournent un en-tĂȘte etag et ils sont nombreux Ă  retourner un en-tĂȘte last-modified. Vous pouvez utiliser les valeurs de ces en-tĂȘtes pour formuler des demandes conditionnelles GET. Si la rĂ©ponse n’a pas changĂ©, vous recevrez une rĂ©ponse 304 Not Modified. L’établissement d’une requĂȘte conditionnelle n’est pas pris en compte dans votre limite de dĂ©bit principale si une rĂ©ponse 304 est renvoyĂ©e et que la requĂȘte a Ă©tĂ© effectuĂ©e avec une autorisation correcte Ă  l’aide d’un en-tĂȘte Authorization.

Par exemple, si une demande prĂ©cĂ©dente a retournĂ© la valeur 644b5b0155e6404a9cc4bd9d8b1ae730 pour l’en-tĂȘte etag, vous pouvez utiliser l’en-tĂȘte if-none-match dans une demande ultĂ©rieure :

curl -H "Authorization: Bearer YOUR-TOKEN" https://api.github.com/meta --include --header 'if-none-match: "644b5b0155e6404a9cc4bd9d8b1ae730"'

Par exemple, si une demande prĂ©cĂ©dente a retournĂ© la valeur Wed, 25 Oct 2023 19:17:59 GMT pour l’en-tĂȘte last-modified, vous pouvez utiliser l’en-tĂȘte if-modified-since dans une demande ultĂ©rieure :

curl -H "Authorization: Bearer YOUR-TOKEN" https://api.github.com/repos/github/docs --include --header 'if-modified-since: Wed, 25 Oct 2023 19:17:59 GMT'

Les demandes conditionnelles pour les mĂ©thodes non sĂ©curisĂ©es, telles que POST, PUT, PATCH et DELETE ne sont pas prises en charge, sauf indication contraire dans la documentation d’un point de terminaison spĂ©cifique.

Ne pas ignorer les erreurs

Il est dĂ©conseillĂ© d’ignorer les codes d’erreur 4xx et 5xx qui reviennent plusieurs fois. Au lieu de cela, vĂ©rifiez que vous interagissez correctement avec l’API. Par exemple, si un point de terminaison demande une chaĂźne et que vous transmettez une valeur numĂ©rique, vous recevrez une erreur de validation. De mĂȘme, toute tentative d’accĂšs Ă  un point de terminaison non autorisĂ© ou inexistant entraĂźne une erreur 4xx.

Le fait d’ignorer intentionnellement toutes les erreurs de validation peut entraüner la suspension de votre application pour abus.

Pour aller plus loin