Skip to content

GitHub API

Daria Gaponenko edited this page Mar 10, 2020 · 1 revision

Обзор Git API применимо к проекту

Можно получить информацию по pull request (PR). Структура запроса: https://api.github.com/repos/:user/:repo/pulls?state=all (state open или closed в зависимости от того, какое состояние PR нам нужно. По умолчанию – state=open) Пример: https://api.github.com/repos/polis-mail-ru/2017-highload-kv/pulls?state=all

В том числе, доступны (подробнее: https://developer.github.com/v3/pulls/):

  • ссылка на общий diff PR (текст со всеми изменениями всех файлов)
  • ссылка на список коммитов PR (по ссылке возвращает информацию о максимум 250 коммитах). Подробнее: https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository
  • title, дата создания PR, информация о пользователе
  • ссылка на PR, из которой мы можем получить список (массив json) измененных или добавленных файлов (информация о файле: "sha", "filename", "status", "additions", "deletions", "changes","blob_url", "raw_url", "contents_url", "patch" – для картинок patch отсутствует). Структура запроса: https://api.github.com/repos/:user/:repo/pulls/:PR_number/files (пример: https://api.github.com/repos/polis-mail-ru/2017-highload-kv/pulls/81/files ) Ответы содержат не более 3000 файлов. Ответ с разбиением на страницы по умолчанию возвращает 30 файлов на страницу.

API будет автоматически разбивать результат запроса на страницы (подробнее: https://developer.github.com/v3/guides/traversing-with-pagination/ и https://developer.github.com/v3/#pagination ). Информация о количестве страниц представлена в заголовках ответа. Параметр page позволяет указать номер страницы для просмотра (пример: https://api.github.com/repos/polis-mail-ru/2017-highload-kv/pulls?state=all&page=2 ). Параметр per_page позволяет изменить количество элементов на странице (максимум 100 элементов, по умолчанию - 30).

Ограничения по количеству запросов (подробнее: https://developer.github.com/v3/#rate-limiting ):

  • Неавторизированные пользователи могут делать 60 запросов в час. Неаутентифицированные запросы связаны с исходящим IP-адресом, а не с пользователем, выполняющим запросы.
  • Для запросов API, использующих обычную проверку подлинности (Basic Authentication) или OAuth, можно создать до 5000 запросов в час. Все приложения с авторизацией совместно используют одну и ту же квоту в 5000 запросов в час при аутентификации на разных токенах, принадлежащих одному и тому же пользователю. Подробнее про аутентификацию: https://developer.github.com/v3/#authentication
  • Рекомендуется использовать условные запросы, проверяющие, не был ли ресурс изменен с предыдущего запроса. Условные запросы не уменьшают счетчик запросов. Это может быть полезным при проверке, не поступил ли новый PR. Подробнее: https://developer.github.com/v3/#conditional-requests

Есть возможность создавать и редактировать комментарии к PR. Подробнее: https://developer.github.com/v3/issues/comments/

Есть возможность сразу получить ответ, который завернут в функцию (параметр: ?callback). Подробнее: https://developer.github.com/v3/#json-p-callbacks

Отслеживание событий в репозитории:

  • GitHub Webhooks - автоматически оповещает о произошедшем событии (подробнее: https://developer.github.com/webhooks/ и https://developer.github.com/v3/repos/hooks/), но, насколько я поняла, требует настройки хука администратором репозитория.
  • Опрос API о событиях репозитория (подробнее: https://developer.github.com/v3/activity/events/). Есть возможность получить информацию о событиях репозитория за последние 90 дней (но не более 300 событий). Опрос производится вручную, но, если новых событий не произошло, то квота на запросы в час не уменьшается. Нас интересует событие PullRequestEvent, которое возникает в том числе при открытии и изменении PR. Конкретное действие с PR указано в action, также доступен номер PR и ссылка на него. Подробнее о событии PullRequestEvent: https://developer.github.com/v3/activity/events/types/#pullrequestevent

Библиотеки для работы с API: https://developer.github.com/v3/libraries/ (Ruby, .NET, JavaScript, Clojure, Dart, Emacs Lisp, Erlang, Go, Haskell, Java, Julia, OCaml, Perl, PHP, Python, Scala, Shell)

Clone this wiki locally