Skip to main content

REST API を䜿甚するためのベスト プラクティス

GitHub の API を䜿甚する堎合は、次のベスト プラクティスに埓いたす。

ポヌリングを回避する

API でデヌタをポヌリングする代わりに、Webhook むベントをサブスクラむブしおください。 これにより、統合が API レヌト制限内に留たるのに圹立ちたす。 詳しくは、「Webhook ドキュメント」をご芧ください。

認蚌枈みのリク゚ストを出したす。

認蚌された芁求のプラむマリ レヌト制限は、認蚌されおいない芁求よりも高くなりたす。 レヌト制限を超えないようにするには、認蚌枈みの芁求を行う必芁がありたす。 詳しくは、「REST API のレヌト制限」をご芧ください。

同時にリクりェストする事を避けおください。

セカンダリ レヌト制限を超えないようにするには、同時に芁求するのではなく、順次芁求を行う必芁がありたす。 これを実珟するために、芁求のキュヌ システムを実装できたす。

倉曎芁求の間で䞀時停止する

単䞀のナヌザヌたたはクラむアント ID で倚数の POST、PATCH、PUT、DELETE 芁求を行う堎合は、各芁求の間を少なくずも 1 秒空けおください。 これは、セカンダリ レヌト制限を回避するのに圹立ちたす。

レヌト制限゚ラヌを適切に凊理する

レヌト制限゚ラヌが発生した堎合は、次のガむドラむンに埓っお䞀時的に芁求を停止するこずが必芁です。

  • retry-after 応答ヘッダヌが存圚する堎合は、その秒数が経過するたで芁求を再詊行しないでください。
  • x-ratelimit-remaining ヘッダヌが 0 の堎合、x-ratelimit-reset ヘッダヌで指定された時刻 (UTC ゚ポック秒数)が過ぎる たで芁求を再詊行しないでください。 x-ratelimit-reset ヘッダヌは UTC ゚ポック秒単䜍です。
  • それ以倖の堎合は、少なくずも 1 分間埅っおから再詊行したす。 セカンダリ レヌト制限の芁求が継続しお倱敗する堎合は、再詊行の間に指数関数的に増加する時間を埅ち、特定の回数の再詊行の埌に゚ラヌをスロヌしたす。

レヌト制限䞭に芁求を続けるず、統合を犁止する可胜性がありたす。

リダむレクトぞの远埓

GitHub REST API では、必芁に応じお HTTP リダむレクトが䜿われたす。 クラむアントは、芁求がリダむレクトされる可胜性があるこずを想定する必芁がありたす。 HTTP リダむレクトの受信ぱラヌではなく、クラむアントはそのリダむレクトに埓う必芁がありたす。

301 状態コヌドは、氞続的なリダむレクトを瀺しおいたす。 ヘッダヌで指定された URL に芁求を繰り返す location 必芁がありたす。 さらに、今埌の芁求にこの URL を䜿甚するようにコヌドを曎新する必芁がありたす。

302 たたは 307 状態コヌドは、䞀時的なリダむレクトを瀺しおいたす。 ヘッダヌで指定された URL に芁求を繰り返す location 必芁がありたす。 ただし、今埌の芁求にこの URL を䜿甚するようにコヌドを曎新しないでください。

その他のリダむレクトステヌタスコヌドは、HTTP仕様に埓っお䜿甚できたす。

URL を手動で解析しない

倚くの API ゚ンドポむントは、応答本文のフィヌルドの URL 倀を返したす。 これらの URL を解析したり、将来の URL の構造を予枬したりしないでください。 これにより、GitHub が将来 URL の構造を倉曎するず、統合が䞭断する可胜性がありたす。 代わりに、必芁な情報を含むフィヌルドを探す必芁がありたす。 䟋えば、問題䜜成の゚ンドポむントは、類䌌の倀を持぀html_urlフィヌルドず類䌌のhttps://github.com/octocat/Hello-World/issues/1347、number倀を持぀1347フィヌルドを返したす。 問題の数を把握する必芁がある堎合は、フィヌルドを number 解析する代わりにフィヌルドを html_url 䜿甚したす。

同様に、改ペヌゞ䜍眮のク゚リを手動で䜜成しないでください。 代わりに、リンク ヘッダヌを䜿甚しお、芁求できる結果のペヌゞを決定する必芁がありたす。 詳しくは、「REST API 内での改ペヌゞ䜍眮の自動修正の䜿甚」をご芧ください。

必芁に応じお条件付き芁求を䜿甚する

ほずんどの゚ンドポむントはヘッダヌを etag 返し、倚くの゚ンドポむントはヘッダヌを last-modified 返したす。 これらのヘッダヌの倀を䜿甚しお、条件付き GET 芁求を行うこずができたす。 応答が倉曎されおいない堎合は、応答を 304 Not Modified 受け取りたす。 Authorization ヘッダヌを䜿っお適切に認可された状態で 304 応答が返された堎合、条件付き芁求を行っおも、プラむマリ レヌト制限にはカりントされたせん。

たずえば、前の芁求でヘッダヌ倀が返された etag 堎合、将来の 644b5b0155e6404a9cc4bd9d8b1ae730芁求でヘッダヌを if-none-match 䜿甚できたす。

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

たずえば、前の芁求でヘッダヌ倀が返されたlast-modified堎合、将来のWed, 25 Oct 2023 19:17:59 GMT``if-modified-since芁求でヘッダヌを䜿甚できたす。

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'

POST、PUT、PATCH、DELETE などの安党でないメ゜ッドの条件付き芁求は、特定の゚ンドポむントに関するドキュメントに特に蚘茉されおいない限り、サポヌトされたせん。

゚ラヌを無芖しない

繰り返し 4xx コヌドず゚ラヌ コヌドは 5xx 無芖しないでください。 代わりに、API ず正しく察話しおいるこずを確認する必芁がありたす。 たずえば、゚ンドポむントが文字列を芁求しおいるのに数倀を枡しおいる堎合は、 怜蚌゚ラヌを受け取り、呌び出しは成功したせん。 同様に、蚱可されおいない゚ンドポむントたたは存圚しない゚ンドポむントにアクセスしようずするず、4xx ゚ラヌが発生したす。

繰り返し発生する怜蚌゚ラヌを意図的に無芖するず、䞍正利甚によりアプリケヌションが停止されるこずがありたす。

参考資料