Ă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
est0
, vous ne devez pas effectuer une autre demande avant la durĂ©e spĂ©cifiĂ©e par lâen-tĂȘtex-ratelimit-reset
. Lâen-tĂȘtex-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.