ちょっとそのような用事があったので、備忘録を残します📝
ASP.NET Core の TargetFramework は netcoreapp2.2
にします。
Refit をインストール
dotnet add package refit
API を定義
namespace GitRepo.Interfaces
{
[Headers(
"User-Agent: GitRepo/0.1",
"Accept: application/vnd.github.v3+json",
"Authorization: token"
)]
public interface IGitHubApi
{
[Get("/orgs/{org}/repos")]
Task<FoundRepos[]> ListOrgRepos(string org, string page);
}
}
Note: User-Agent
は必須項目です。ないと 403 エラーになりました。
モデルを定義
namespace GitRepo.Models
{
public class FoundRepos
{
public string name { get; set; }
public string full_name { get; set; }
}
}
Organization の private レポジトリ一覧を取得します。
var api = RestService.For<IGitHubApi>("https://api.github.com", new RefitSettings
{
AuthorizationHeaderValueGetter = () => Task.FromResult("TOKEN"),
});
var allRepos = new List<FoundRepos>();
for (int page = 1; ; page++)
{
var reposList = await api.ListOrgRepos(
org: "ORGNAME",
page: page.ToString()
);
if (reposList.Length == 0)
{
break;
}
allRepos.AddRange(reposList);
}
TOKEN は Edit personal access token で取得してください。
private レポジトリ一覧化に必要な scope は repo
です。
今回のポイントは、繰り返し取得が必要な点です (ページネーションされているので)