Open2
GitHub APIのdownload_urlがprivateリポジトリで突然404を返すようになった
この件について
概要
GitHub APIのContents APIを使ってファイルのメタデータを取得すると、レスポンスbodyにdownload_url
というフィールドが含まれている。
{
"type": "file",
"encoding": "base64",
"size": 5362,
"name": "README.md",
"path": "README.md",
"sha": "3d21ec53a331a6f037a91c368710b99387d012c1",
"url": "https://api.github.com/repos/octokit/octokit.rb/contents/README.md",
"html_url": "https://github.com/octokit/octokit.rb/blob/master/README.md",
"download_url": "https://raw.githubusercontent.com/octokit/octokit.rb/master/README.md",
...
}
privateリポジトリの場合にはdownload_url
にはhttps://raw.githubusercontent.com/path?token=...
といった形でクエリ文字列でtokenがついている(もちろんURLには有効期限がある)。
そのため、このdownload_url
をフェッチすればprivateリポジトリのファイルであってもダウンロードができたのだが、2022/01/07頃から突然404を返すようになった。publicリポジトリでは問題なく取得できるのだが、privateリポジトリでのみ404が返ってくる。
その前後でアプリケーションのソースコードに変更を行っていないため、GitHub APIの障害 or 仕様が変わったことのどちらかが原因だと考えられるが、statusページにもドキュメントにもTwitterにも一切情報が出てこない。
ちなみにこの他のAPIについてはどれも問題なく動作している。
原因を調査中
フォーラムで報告済み
- 2022/01/12追記: 改めて確認したが未だに404を返す
対応
- GitHubが対応してくれるかどうかも分からないため、Contents APIを使ってコンテンツを取得することにした。リクエストヘッダに
accept: "application/vnd.github.v3.raw"
をつけることでファイルの中身を取得できる。 - 1MBを超える画像等についてはBlobs APIを使って取得することにした。