2015-06-04 2 views
4

Из doc, я могу перечислить репозитории быть снялись с помощью:Получить общий пользователь снимавшийся подсчет с помощью GitHub API v3

GET /users/:username/starred 

Но мне кажется, что я не могу сразу получить количество от общего числа помеченных РЕПО с пользователем ,

Я что-то упустил?

ответ

6

Это очень интересный вопрос, и я думаю, что нашел ответ на него. Воспользуемся графиком GitHub top user, чтобы случайным образом выбрать Ocramius со своими 299 избранными репозиториями, доступными в форме JSON от this address.

Теперь попробуем запросить заголовки через curl -I "https://api.github.com/users/Ocramius/starred". У нас есть один загорелый заголовок:

Ссылка: https://api.github.com/user/154256/starred?page=2; rel = "next", https://api.github.com/user/154256/starred?page=10; отн = «последний»

Этот заголовок приходит от the pagination feature of the API, так что произойдет, если мы задаем для одной записи на страницу с curl -I "https://api.github.com/users/Ocramius/starred?per_page=1"?

Ссылка: https://api.github.com/user/154256/starred?per_page=1&page=2; rel = "next", https://api.github.com/user/154256/starred?per_page=1&page=299; rel = "last"

Aha! Если мы проанализируем этот HTTP-заголовок RFC5988, мы можем вычеркнуть номер страницы с пометкой rel="last", и у нас есть правильный ответ 299!

+0

Это, безусловно, возможно, и умное путь. Я все еще открыт для более удобного и простого способа. Спасибо за помощь. – skyline75489

+0

@ skyline75489 Я просто отправил по электронной почте поддержку GitHub, чтобы увидеть, насколько это надежно. Я утверждал, однако, что это так же удобно и просто, как и немного меньше сетевых издержек, чем при выполнении 'GET', а затем разбора JSON-возврата. Кроме того, этот метод должен работать для всех API, которые явно не возвращают счетчики. –

+1

@ skyline75489 Поддержка GitHub говорит: «Мы рекомендуем такой же подход к пользователям, которые интересуются только общим счетчиком, поэтому в этом смысле это безопасно и надежно для конечных точек, которые поддерживают разбиение на страницы и« последнее »rel.», Поэтому, похоже, вы можете используйте его безопасно. Они также сказали, что они не предусматривают добавления прямого поля «count» или конечной точки. –

3

Предложение для ответа Ken Y-N «s:

Когда пользователь имеет только один или ноль снимавшийся подсчет, то апи будет ответ без заголовка Link.

Так что, когда ответ не имеет заголовок Link, вы можете сразу получить снимавшееся количество от длины JSON-ARRAY «s в ответ body.It только может быть 0 или 1.

+0

Хорошее дополнение к принятому ответу. – kirtan403