API GitHub открывает захватывающий мир возможностей для автоматизации рабочих процессов, интеграции с GitHub, управления проектами и анализа данных. Как разработчики Python, мы можем в полной мере воспользоваться преимуществами API для повышения производительности и создания полезных инструментов.
В этом подробном пошаговом руководстве вы узнаете, как использовать API GitHub с помощью Python.
Зачем использовать API GitHub с Python?
Прежде чем приступить к коду, давайте посмотрим, почему использование GitHub API с Python так эффективно:
Автоматизировать рабочие процессы – Устраните повторяющиеся задачи, написав сценарии для создания проблем, открытия и объединения запросов на подачу заявок, выпуска двоичных файлов и т. д.
Повышение производительности – Интегрируйте специальные инструменты в свою среду разработки для улучшения рабочих процессов.
Управлять проектами – Программно управлять проблемами, метками и этапами в репозиториях.
Анализировать данные – Собирайте интересные показатели и идеи из более чем 96 миллионов репозиториев.
Интегрируйте и расширяйте GitHub – Создавайте собственные веб-приложения, визуализации, инструменты CLI, ботов и многое другое!
API открывает множество творческих способов повышения производительности и создания отличных инструментов и возможностей для разработчиков.
Обзор API GitHub
API GitHub предоставляет конечные точки RESTful для доступа к данным и сервисам GitHub. Ты можешь:
- Управление репозиториями, сутью, проблемами, запросами на включение
- Взаимодействие с данными Git — коммиты, ветки, теги.
- Получение профилей пользователей, организаций, команд
- Код поиска, проблемы, репозитории, пользователи
- Доступ к метаданным, проблемам, PR, файлам, коммитам
- Анализируйте тенденции сообщества, развилки проектов
И, намного больше!
API использует JSON для сериализации данных и использует OAuth для аутентификации. Все запросы должны выполняться через HTTPS.
Чтобы использовать API, вы просто:
- Создайте учетную запись GitHub
- Создать токен личного доступа для аутентификации
- Делайте запросы API и обрабатывайте ответы
Теперь давайте посмотрим это в действии на примерах Python!
Выполнение запросов API GitHub
Питон requests
библиотека упрощает взаимодействие с веб-API. Давайте получим некоторые пользовательские данные GitHub:
import requests
username = "defunkt"
response = requests.get(f"https://api.github.com/users/{username}")
print(response.json())
Это печатает такую информацию, как:
{
"login": "defunkt",
"id": 2,
"node_id": "MDQ6VXNlcjI=",
"avatar_url": "https://avatars.githubusercontent.com/u/2?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/defunkt",
"html_url": "https://github.com/defunkt",
//...
}
Таким образом мы можем получить доступ к любому неаутентифицированному маршруту API. Чтобы получить доступ к личным данным, нам нужно передать токен аутентификации.
Создание токена личного доступа GitHub
Чтобы сгенерировать токен:
- Перейдите на Настройки > Настройки разработчика > Токены личного доступа.
- Нажмите Создать новый токен
- Дайте ему описание, например «Мой скрипт Python».
- Выберите нужные области/разрешения
- Нажмите Создать токен
Обязательно скопируйте токен — вы не сможете получить его позже!
Общие области включают в себя:
repo
– Доступ к частным репозиториямadmin:org
– Управлять организациямиnotifications
– Доступ к уведомлениямuser
– Доступ для чтения/записи к информации профиля.
Давайте используем наш токен для создания нового репо:
import requests
token = "ghp_123abcMyToken"
data = {"name": "My New Repo"}
response = requests.post(
"https://api.github.com/user/repos",
json=data,
headers={"Authorization": f"token {token}"}
)
print(response.status_code) # 201 = Success!
Токен аутентифицирует нас для создания частных репозиториев.
Вы также можете использовать Приложения GitHub которые имеют ограниченный доступ и не имеют срока действия, как токены пользователя. Для получения доступа приложения должны быть установлены пользователем/организацией.
Работа с репозиториями GitHub
Основная часть API связана с управлением репозиториями. Давайте рассмотрим некоторые распространенные задачи репозитория.
Получить репозиторий
Чтобы получить метаданные репозитория:
response = requests.get("https://api.github.com/repos/pandas-dev/pandas")
repo_info = response.json()
print(repo_info[‘description‘])
# Powerful data structures for data analysis, time series, statistics
Мы можем получить доступ к такой информации, как описания, звезды, клоны, участники, языки, релизы, коммиты и многое другое!
Получение списка репозиториев
Чтобы вывести список репозиториев для пользователя или организации:
repos_url = "https://api.github.com/users/octocat/repos"
repos = requests.get(repos_url).json()
for repo in repos:
print(repo[‘name‘]) # Prints names of each repo
Создать репозиторий
Мы также можем создавать новые репозитории:
data = {
"name": "My New Repo",
"description": "This is my cool new repo",
"private": False
}
response = requests.post(
"https://api.github.com/user/repos",
json=data,
headers={"Authorization": "token {token}"}
)
Удалить репозиторий
Чтобы удалить репозиторий:
requests.delete(‘https://api.github.com/repos/octocat/Hello-World‘,
headers={"Authorization": "token {token}"})
Это дает вам полный контроль над программным управлением вашими репозиториями.
Примечание: В целях безопасности все запросы API должны выполняться с использованием HTTPS.
Работа с проблемами в репозиториях
API проблем позволяет управлять проблемами и запросами на включение. Ты можешь:
- Список/создание/редактирование/закрытие/повторное открытие проблем
- Блокируйте разговоры, объединяйте PR
- Отправляйте и редактируйте комментарии
- Добавляйте ярлыки, правопреемников, этапы
Например, чтобы получить задачи из репозитория:
response = requests.get(‘https://api.github.com/repos/octocat/hello-world/issues‘)
issues = response.json()
for issue in issues:
print(issue[‘title‘]) # Prints each issue title
Это позволяет интегрировать управление проблемами во внешние инструменты и рабочие процессы.
Работа с данными Git
API данных Git предоставляет конечные точки для прямого взаимодействия с репозиториями Git. Ты можешь:
- Управление ветками и тегами
- Чтение/запись данных большого двоичного объекта
- Получение коммитов, ссылок, деревьев
- Сравнить коммиты, ссылки, файлы
Например, чтобы получить коммиты из репо:
commits_url = "https://api.github.com/repos/pandas-dev/pandas/commits"
commits = requests.get(commits_url).json()
for commit in commits:
print(commit[‘sha‘]) # Print commit SHAs
print(commit[‘commit‘][‘message‘]) # Print messages
Это обеспечивает полный доступ к программному управлению репозиториями Git.
Поиск репозиториев и кода
API поиска GitHub позволяет запрашивать практически любую информацию в более чем 96 миллионах общедоступных репозиториев.
Например, чтобы найти проекты Python, связанные с наукой о данных:
import requests
query = "language:python data science in:readme"
response = requests.get("https://api.github.com/search/repositories",
params={"q": query})
results = response.json()[‘items‘]
for result in results:
print(result[‘name‘]) # Prints names of matching repos
Синтаксис поискового запроса поддерживает логические операторы, фильтры, выбор контекста и многое другое для создания целевого поиска.
Некоторые примеры:
org:facebook language:python stars:>5000
– Репозитории Python в организации Facebook с более чем 5 тысячами звезд.filename:requirements.txt django
– Репозитории с файлом require.txt, содержащим Django.user:defunkt location:san francisco
– Найти репозитории несуществующих файлов, если они расположены в Сан-Франциско.
API поиска открывает множество творческих способов поиска интересных наборов данных и аналитической информации из открытых данных GitHub.
Использование API GraphQL GitHub
В дополнение к REST API GitHub предоставляет API GraphQL для более гибких запросов.
GraphQL позволяет вам точно указать нужные данные во вложенных структурах JSON. Вы можете запросить несколько связанных объектов в одном запросе.
Например, здесь мы запрашиваем данные профиля пользователя, а также имена его репозиториев:
import requests
query = """
query {
user(login:"defunkt") {
name
repositories(first:10) {
nodes {
name
}
}
}
}
"""
response = requests.post(‘https://api.github.com/graphql‘, json={‘query‘: query})
print(response.json())
Это позволяет сформировать именно тот ответ, который вам нужен. ГрафQL-проводник помогает строить запросы в интерактивном режиме.
Интеграция API GitHub в приложения
Теперь, когда вы знаете основы, давайте рассмотрим создание приложений с помощью API GitHub.
Авторизация приложения OAuth
Для веб-приложений используйте GitHub OAuth для авторизации вместо жестко закодированных токенов. Это позволяет пользователям отозвать доступ.
- Зарегистрируйте новое приложение OAuth
- Используйте идентификатор клиента и секрет для авторизации.
- Перенаправить пользователей для запроса доступа к GitHub
Теперь ваше приложение может выполнять вызовы API от имени пользователей.
Выполнение аутентифицированных запросов
После авторизации совершайте вызовы с помощью токена доступа:
access_token = "abc123xxddff" # OAuth token
response = requests.get(
"https://api.github.com/user/repos",
headers={"Authorization": f"token {access_token}"}
)
print(response.json()) # Print user‘s private repos
Это позволяет вам получить доступ к личным данным на основе разрешений пользователя.
Ограничение скорости
API GitHub имеет ограничения на скорость запросов. Следите за статусом вашего приложения:
response = requests.get("https://api.github.com/users/octocat")
print(response.headers[‘X-RateLimit-Limit‘]) # 5000
print(response.headers[‘X-RateLimit-Remaining‘]) # 4999
Распределяйте запросы по времени и кэшируйте данные, чтобы избежать ограничений.
Грамотная обработка ошибок
Всегда проверяйте коды состояния и правильно обрабатывайте ошибки:
response = requests.get(‘https://api.github.com/invalid/url‘)
if response.status_code == 404:
print("Resource not found!")
elif response.status_code == 403:
print("You do not have access!")
else:
print("An error occurred.")
Это гарантирует, что ваше приложение останется стабильным в рабочей среде.
Следуя рекомендациям по API, вы сможете создавать надежные интеграции и инструменты для разработчиков.
Создание приложения для панели управления GitHub
Давайте свяжем воедино то, что мы узнали, создавая веб-приложение для просмотра вашего профиля GitHub и репозиториев с помощью Flask:
# app.py
from flask import Flask
import requests
from github import Github # pyGithub library
app = Flask(__name__)
@app.route("/")
def dashboard():
# Use access token for API requests
github = Github("access_token123xxdd")
# Fetch user profile info
user = github.get_user()
# Fetch list of repos
repos = user.get_repos()
# Pass info to template
return render_template("dashboard.html", user=user, repos=repos)
if __name__ == "__main__":
app.run(debug=True)
Мы используем pyGithub для упрощения некоторых взаимодействий API. На главной странице будет отображаться dashboard.html
шаблон:
<!-- dashboard.html -->
<h3>GitHub Dashboard for {{user.name}}</h3>
<img src="{{user.avatar_url}}" style="width:64px">
<h4>Your Repositories</h4>
<ul>
{% for repo in repos %}
<li>{{repo.name}}</li>
{% endfor %}
</ul>
Здесь показано, как можно создать приложение для отображения данных GitHub для вошедшего в систему пользователя!
Возможности для интеграции API в ваши собственные приложения и инструменты безграничны.
Рекомендации по использованию API GitHub
Вот несколько рекомендаций, которые помогут обеспечить производительность, безопасность и надежность ваших приложений, использующих API GitHub:
- Аутентификация – Используйте токены или OAuth, избегайте отправки необработанных имен пользователей и паролей.
- HTTPS – Всегда используйте конечные точки HTTPS для защиты данных.
- Ограничение скорости – Распределяйте запросы и кэшируйте данные, чтобы избежать ограничений.
- Нумерация страниц – Используйте параметры страницы для перебора наборов результатов.
- Обработка ошибок – Грамотно обрабатывайте ошибки 4xx и 5xx.
- Тестирование – Тщательно тестируйте вызовы API, используйте мокинг для итераций.
- Документация – Внимательно читайте документацию, в ней представлены примеры кода для каждой конечной точки.
Следование лучшим практикам API предотвращает ошибки, которых можно избежать, и обеспечивает надежность приложений.
Другие функции GitHub API, которые стоит изучить
Мы лишь поверхностно рассмотрели возможности API GitHub. Вот еще несколько интересных функций, на которые стоит обратить внимание:
- API действий GitHub – Автоматизируйте рабочие процессы, запуская действия с помощью API.
- GitHub Pages – Программное управление сайтами Pages.
- суть – Управление фрагментами кода, конфигурациями и шаблонами.
- организации – Управление организационными командами, участниками и разрешениями
- База данных Git – Прямой доступ к данным объектов Git, таким как капли и деревья.
- API торговой площадки GitHub – Управление приложениями, перечисленными в GitHub Marketplace.
- API обсуждений GitHub – Создавайте форумы сообщества и интеграцию вопросов и ответов.
Возможности API расширяются по мере добавления новых функций GitHub, поэтому следите за новыми конечными точками.
Сравните API GitHub с альтернативами
Для разработчиков, работающих с другими платформами, как API GitHub сравнивается с API конкурентов, таких как GitLab, BitBucket, Azure DevOps и т. д.?
В целом возможности API GitHub выделяются с точки зрения:
- Принятие – Безусловно, самая большая база пользователей и сообщество
- Документация – Чрезвычайно подробная документация с примерами
- ОТДЫХ + GraphQL – Гибкость конечных точек REST и GraphQL.
- Возможности поиска – Мощный индексированный поиск по всем общедоступным данным.
- Экосистема – Огромная экосистема приложений, инструментов и интеграций
- Анализ кода – Возможности сканирования кода, линтинга и анализа качества.
GitHub явно лидирует по функциональности API благодаря своему масштабу и многолетнему развитию. Другие провайдеры, такие как GitLab и BitBucket, расширяют возможности API, чтобы конкурировать. Но на данный момент GitHub остается наиболее полнофункциональным API для программного взаимодействия с репозиториями Git.
Следующие шаги и ресурсы
Я надеюсь, что в этом руководстве представлен исчерпывающий обзор того, как использовать API GitHub с Python!
Вот некоторые следующие шаги и ресурсы для дальнейшего обучения:
- Углубитесь в документацию: Документы для разработчиков
- Посмотрите видеоролики об API: Лаборатория обучения GitHub
- Откройте для себя приложения, созданные с помощью API: Торговая площадка GitHub
- Узнайте больше об OAuth: Документация приложения OAuth
- Ознакомьтесь с такими библиотеками, как PyGithub и urllib3, чтобы упростить использование API.
- Рассмотрите возможность имитации ответов для проверки взаимодействия API.
- Изучите связанные инструменты, такие как GitHub CLI и GitHub Actions.
API GitHub открывает целый мир возможностей для создания инструментов разработчика, автоматизации рабочих процессов, управления проектами и анализа данных. Надеюсь, вы вдохновлены на создание чего-то ценного для сообщества!
Удачного кодирования!