De GitHub API opent een opwindende wereld van mogelijkheden voor het automatiseren van workflows, integratie met GitHub, het beheren van projecten en het analyseren van gegevens. Als Python-ontwikkelaars kunnen we de API ten volle benutten om onze productiviteit te verhogen en nuttige tools te creëren.
In deze uitgebreide, stapsgewijze handleiding leert u hoe u de GitHub API gebruikt met Python.
Waarom de GitHub API gebruiken met Python?
Laten we, voordat we in de code duiken, eens kijken waarom het gebruik van de GitHub API met Python zo krachtig is:
Automatiseer workflows – Elimineer repetitieve taken door scripts te schrijven om problemen te creëren, PR's te openen en samen te voegen, binaire bestanden vrij te geven, enz.
Productiviteit verbeteren – Integreer aangepaste tools in uw ontwikkelomgeving om workflows te verbeteren.
Projecten beheren – Beheer problemen, labels en mijlpalen programmatisch in alle repository's.
Data analyseren – Verzamel interessante statistieken en inzichten uit de meer dan 96 miljoen repo's.
Integreer en breid GitHub uit – Maak aangepaste webapps, visualisaties, CLI-tools, bots en meer!
De API biedt veel creatieve manieren om de productiviteit te verhogen en geweldige ontwikkelaarstools en -ervaringen te bouwen.
Overzicht van de GitHub-API
De GitHub API biedt RESTful-eindpunten voor toegang tot GitHub-gegevens en -services. Jij kan:
- Beheer opslagplaatsen, samenvattingen, problemen en pull-aanvragen
- Interactie met Git-gegevens – commits, branches, tags
- Haal gebruikersprofielen, organisaties, teams op
- Zoekcode, problemen, repositories, gebruikers
- Krijg toegang tot metadata, problemen, PR's, bestanden en commits
- Analyseer gemeenschapstrends, projectvorken
En meer!
De API gebruikt JSON om gegevens te serialiseren en gebruikt OAuth voor authenticatie. Alle verzoeken moeten via HTTPS worden gedaan.
Om de API te gebruiken, doet u eenvoudigweg het volgende:
- Maak een GitHub-account
- Genereer een persoonlijk toegangstoken voor authenticatie
- Voer API-verzoeken uit en handel de reacties af
Laten we dit nu in actie zien met Python-voorbeelden!
GitHub API-verzoeken indienen
Python's requests
bibliotheek maakt het eenvoudig om te communiceren met web-API's. Laten we wat GitHub-gebruikersgegevens ophalen:
import requests
username = "defunkt"
response = requests.get(f"https://api.github.com/users/{username}")
print(response.json())
Hiermee wordt informatie afgedrukt zoals:
{
"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",
//...
}
Op deze manier hebben we toegang tot elke niet-geverifieerde API-route. Om toegang te krijgen tot privégegevens, moeten we een authenticatie token.
Een GitHub persoonlijk toegangstoken maken
Om een token te genereren:
- Ga naar Instellingen > Instellingen voor ontwikkelaars > Persoonlijke toegangstokens
- Klik Genereer nieuwe token
- Geef het een beschrijving zoals "Mijn Python-script"
- Selecteer de gewenste bereiken/machtigingen
- Klik Token genereren
Zorg ervoor dat u het token kopieert. U kunt het later niet meer ophalen!
Veel voorkomende scopes zijn onder meer:
repo
– Toegang tot privéopslagplaatsenadmin:org
– Beheer organisatiesnotifications
– Toegang tot meldingenuser
– Lees-/schrijftoegang tot profielinformatie
Laten we ons token gebruiken om een nieuwe repository te maken:
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!
Het token authenticeert ons om privérepository's te maken.
U kunt ook gebruik maken van GitHub-apps die beperkte toegang hebben en niet verlopen zoals gebruikerstokens. Apps moeten door een gebruiker/organisatie worden geïnstalleerd om toegang te krijgen.
Werken met GitHub-opslagplaatsen
Een groot deel van de API omvat het beheer van repositories. Laten we enkele algemene repositorytaken doornemen.
Koop een opslagplaats
Om de metagegevens van een repository op te halen:
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
We hebben toegang tot informatie zoals beschrijvingen, sterren, klonen, bijdragers, talen, releases, commits en nog veel meer!
Lijst met opslagplaatsen
Om opslagplaatsen voor een gebruiker of organisatie weer te geven:
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
Maak een opslagplaats
We kunnen ook nieuwe repositories maken:
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}"}
)
Verwijder een opslagplaats
Om een opslagplaats te verwijderen:
requests.delete(‘https://api.github.com/repos/octocat/Hello-World‘,
headers={"Authorization": "token {token}"})
Dit geeft u volledige controle over het programmatisch beheren van uw repository's.
Opmerking: Om veiligheidsredenen moeten alle API-verzoeken via HTTPS worden gedaan.
Werken met problemen in opslagplaatsen
Met de Issues API kunt u problemen en pull-aanvragen beheren. Jij kan:
- Problemen weergeven/aanmaken/bewerken/sluiten/heropenen
- Vergrendel gesprekken, voeg PR's samen
- Opmerkingen indienen en bewerken
- Voeg labels, toegewezen personen en mijlpalen toe
Om bijvoorbeeld problemen uit een repository op te halen:
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
Hierdoor kunt u issuemanagement integreren in externe tools en workflows.
Werken met Git-gegevens
De Git Data API biedt eindpunten voor directe interactie met Git-repository's. Jij kan:
- Beheer filialen en tags
- BLOB-gegevens lezen/schrijven
- Haal commits, referenties en bomen op
- Vergelijk commits, referenties, bestanden
Om bijvoorbeeld commits uit een repository te krijgen:
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
Dit biedt volledige toegang tot het programmatisch beheren van Git-repository's.
Zoeken naar opslagplaatsen en code
De zoek-API van GitHub maakt het mogelijk om naar vrijwel alles in de meer dan 96 miljoen openbare repository's te zoeken.
Om bijvoorbeeld Python-projecten met betrekking tot datawetenschap te vinden:
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
De syntaxis van de zoekopdracht ondersteunt Booleaanse operatoren, filters, contextselectie en meer om gerichte zoekopdrachten uit te voeren.
Een paar voorbeelden:
org:facebook language:python stars:>5000
– Python-opslagplaatsen in Facebook-org met meer dan 5 sterrenfilename:requirements.txt django
– Repo's met vereisten.txt die Django bevattenuser:defunkt location:san francisco
– Vind de repos van defunkt als de locatie SF is
De Search API biedt veel creatieve manieren om interessante datasets en inzichten uit de open data van GitHub te halen.
Met behulp van de GraphQL-API van GitHub
Naast de REST API biedt GitHub een GraphQL API voor flexibelere queries.
Met GraphQL kunt u precies de gewenste gegevens specificeren in geneste JSON-structuren. U kunt in één aanvraag meerdere gekoppelde entiteiten opvragen.
Hier vragen we bijvoorbeeld de profielgegevens van een gebruiker en de namen van hun repository's:
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())
Hierdoor kunt u precies de respons vormgeven die u nodig heeft. De GraphQL-verkenner helpt bij het interactief bouwen van query's.
Integratie van de GitHub API in Apps
Nu je de basis kent, gaan we kijken naar het bouwen van applicaties met de GitHub API.
OAuth-app-autorisatie
Gebruik voor webapps GitHub OAuth voor autorisatie in plaats van hardgecodeerde tokens. Hierdoor kunnen gebruikers de toegang intrekken.
- Registreer een nieuwe OAuth-app
- Gebruik de client-ID en het geheim voor autorisatie
- Leid gebruikers om om GitHub-toegang aan te vragen
Nu kan uw app namens gebruikers API-aanroepen doen.
Geauthenticeerde verzoeken indienen
Eenmaal geautoriseerd, kunt u bellen met het toegangstoken:
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
Hierdoor hebt u toegang tot privégegevens op basis van de machtigingen van de gebruiker.
snelheidsbeperking
De GitHub API heeft snelheidslimieten voor verzoeken. Controleer de status van uw app:
response = requests.get("https://api.github.com/users/octocat")
print(response.headers[‘X-RateLimit-Limit‘]) # 5000
print(response.headers[‘X-RateLimit-Remaining‘]) # 4999
Spreid verzoeken over de tijd en cache gegevens om limieten te vermijden.
Foutloos omgaan met fouten
Controleer altijd statuscodes en handel fouten correct af:
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.")
Dit zorgt ervoor dat uw app stabiel blijft in productie.
Door de best practices van API te volgen, kunt u robuuste integraties en tools voor ontwikkelaars bouwen.
Een GitHub Dashboard-app bouwen
Laten we samenbrengen wat we hebben geleerd door een webapp te bouwen voor het bekijken van uw GitHub-profiel en repository's met 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)
We gebruiken pyGithub om sommige API-interacties te vereenvoudigen. De startpagina geeft het dashboard.html
sjabloon:
<!-- 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>
Dit laat zien hoe je een app kunt bouwen om GitHub-gegevens weer te geven voor een ingelogde gebruiker!
De mogelijkheden zijn eindeloos om de API te integreren in je eigen apps en tools.
Best practices bij het gebruik van de GitHub API
Hier volgen enkele best practices om ervoor te zorgen dat uw applicaties die de GitHub API gebruiken, performant, veilig en robuust zijn:
- authenticatie – Gebruik tokens of OAuth, vermijd het verzenden van onbewerkte gebruikersnaam/wachtwoorden.
- HTTPS – Gebruik altijd HTTPS-eindpunten om gegevens te beveiligen.
- snelheidsbeperking – Spreid verzoeken uit en cache gegevens om limieten te vermijden.
- Opdelen – Gebruik paginaparameters om door resultatensets te bladeren.
- foutafhandeling – Ga netjes om met 4xx- en 5xx-fouten.
- Testen – Test API-aanroepen grondig, gebruik spotting voor iteraties.
- Documentatie – Lees de documenten aandachtig, ze bieden codevoorbeelden voor elk eindpunt.
Het volgen van API best practices voorkomt vermijdbare fouten en zorgt voor betrouwbare apps.
Andere GitHub API-functies om te verkennen
We hebben nog maar de oppervlakte bereikt van wat mogelijk is met de GitHub API. Hier zijn enkele andere coole functies om te bekijken:
- GitHub-acties-API – Automatiseer workflows door acties te activeren met de API
- GitHub-pagina's – Beheer Pages-sites programmatisch
- Gisten – Beheer codefragmenten, configuraties en sjablonen
- organisaties – Beheer organisatieteams, leden en machtigingen
- Git-database – Rechtstreekse toegang tot Git-objectgegevens zoals blobs en bomen
- GitHub Marktplaats-API – Beheer apps die worden vermeld in GitHub Marketplace
- GitHub Discussies-API – Bouw communityforums en vraag- en antwoordintegraties
De API-mogelijkheden worden uitgebreid naarmate GitHub nieuwe functies toevoegt, dus houd nieuwe eindpunten in de gaten.
Vergelijk de API van GitHub met alternatieven
Hoe verhoudt de API van GitHub zich voor ontwikkelaars die met andere platforms werken tot concurrenten zoals GitLab, BitBucket, Azure DevOps, enz.?
Over het algemeen onderscheiden de API-mogelijkheden van GitHub zich in termen van:
- Adoptie – Veruit de grootste gebruikersbasis en community
- Documentatie – Zeer grondige documenten met voorbeelden
- REST + GrafiekQL – Flexibiliteit van zowel REST- als GraphQL-eindpunten
- Zoek mogelijkheden – Krachtige geïndexeerde zoekactie in alle openbare gegevens
- Ecosysteem – Enorm ecosysteem van apps, tools en integraties
- Code-analyse – Mogelijkheden voor het scannen van codes, linting en kwaliteitsanalyse
GitHub is duidelijk toonaangevend op het gebied van API-functionaliteit dankzij de schaalgrootte en jarenlange ontwikkeling. Andere providers zoals GitLab en BitBucket breiden de API-mogelijkheden uit om te kunnen concurreren. Maar voorlopig blijft GitHub de meest complete API voor programmatische interactie met Git-repository's.
Volgende stappen en bronnen
Ik hoop dat deze handleiding een uitgebreid overzicht geeft van het gebruik van de GitHub API met Python!
Hier zijn enkele volgende stappen en bronnen voor verder leren:
- Duik dieper in de documenten: Ontwikkelaarsdocumenten
- Bekijk API-video's: GitHub-leerlab
- Ontdek apps die zijn gebouwd met de API: GitHub-marktplaats
- Meer informatie over OAuth: OAuth-appdocumenten
- Bekijk bibliotheken zoals PyGithub en urllib3 om het API-gebruik te vereenvoudigen
- Overweeg spottende reacties om de API-interactie te testen
- Ontdek bijbehorende tools zoals GitHub CLI en GitHub Actions
De GitHub API opent een hele wereld aan mogelijkheden voor het bouwen van ontwikkelaarstools, het automatiseren van workflows, het beheren van projecten en het analyseren van gegevens. Ik hoop dat je je geïnspireerd voelt om iets waardevols voor de gemeenschap te creëren!
Veel plezier met coderen!