Bỏ để qua phần nội dung

Cách sử dụng API GitHub trong Python: Hướng dẫn đầy đủ

API GitHub mở ra một thế giới thú vị về khả năng tự động hóa quy trình làm việc, tích hợp với GitHub, quản lý dự án và phân tích dữ liệu. Với tư cách là nhà phát triển Python, chúng ta có thể tận dụng tối đa API để tăng năng suất và tạo ra các công cụ hữu ích.

Trong hướng dẫn từng bước toàn diện này, bạn sẽ tìm hiểu cách sử dụng API GitHub bằng Python.

Tại sao nên sử dụng API GitHub với Python?

Trước khi bắt đầu viết mã, hãy xem tại sao việc sử dụng API GitHub với Python lại mạnh mẽ đến vậy:

  • Tự động hóa quy trình làm việc – Loại bỏ các tác vụ lặp đi lặp lại bằng cách viết các tập lệnh để tạo sự cố, mở và hợp nhất PR, phát hành tệp nhị phân, v.v.

  • Nâng cao năng suất – Tích hợp các công cụ tùy chỉnh vào môi trường nhà phát triển của bạn để cải thiện quy trình làm việc.

  • Quản lý các dự án – Quản lý theo chương trình các vấn đề, nhãn, các mốc quan trọng trên các kho lưu trữ.

  • Phân tích dữ liệu – Khai thác các số liệu và thông tin chi tiết thú vị từ hơn 96 triệu repo.

  • Tích hợp và mở rộng GitHub – Tạo các ứng dụng web tùy chỉnh, trực quan hóa, công cụ CLI, bot và hơn thế nữa!

API mở ra nhiều cách sáng tạo để tăng năng suất và xây dựng các công cụ và trải nghiệm tuyệt vời dành cho nhà phát triển.

Tổng quan về API GitHub

API GitHub cung cấp các điểm cuối RESTful để truy cập dữ liệu và dịch vụ GitHub. Bạn có thể:

  • Quản lý kho lưu trữ, ý chính, vấn đề, yêu cầu kéo
  • Tương tác với dữ liệu Git – cam kết, nhánh, thẻ
  • Truy xuất hồ sơ người dùng, tổ chức, nhóm
  • Tìm kiếm mã, vấn đề, kho lưu trữ, người dùng
  • Truy cập siêu dữ liệu, sự cố, PR, tệp, cam kết
  • Phân tích xu hướng cộng đồng, các nhánh dự án

nhiều hơn!

API sử dụng JSON để tuần tự hóa dữ liệu và sử dụng OAuth để xác thực. Tất cả các yêu cầu phải được thực hiện qua HTTPS.

Để sử dụng API, bạn chỉ cần:

  1. Tạo tài khoản GitHub
  2. Tạo mã thông báo truy cập cá nhân để xác thực
  3. Thực hiện các yêu cầu API và xử lý các phản hồi

Bây giờ chúng ta hãy xem điều này hoạt động như thế nào với các ví dụ Python!

Thực hiện các yêu cầu API GitHub

của Python requests thư viện giúp bạn dễ dàng tương tác với các API web. Hãy lấy một số dữ liệu người dùng GitHub:

import requests

username = "defunkt"
response = requests.get(f"https://api.github.com/users/{username}")

print(response.json())

Điều này in thông tin như:

{
  "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",

  //...
}

Chúng tôi có thể truy cập bất kỳ tuyến API chưa được xác thực nào theo cách này. Để truy cập dữ liệu riêng tư, chúng ta cần vượt qua một mã thông báo xác thực.

Tạo mã thông báo truy cập cá nhân GitHub

Để tạo mã thông báo:

  1. Truy cập Cài đặt > Cài đặt dành cho nhà phát triển > Mã thông báo truy cập cá nhân
  2. Nhấp chuột Tạo mã thông báo mới
  3. Cung cấp cho nó một mô tả như "Tập lệnh Python của tôi"
  4. Chọn phạm vi/quyền bạn muốn
  5. Nhấp chuột Tạo mã thông báo

Hãy nhớ sao chép mã thông báo – bạn không thể truy xuất lại mã thông báo đó sau này!

Phạm vi phổ biến bao gồm:

  • repo – Truy cập kho riêng
  • admin:org – Quản lý các tổ chức
  • notifications – Truy cập thông báo
  • user – Truy cập đọc/ghi thông tin hồ sơ

Hãy sử dụng mã thông báo của chúng tôi để tạo một kho lưu trữ mới:

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!

Mã thông báo xác thực chúng tôi để tạo các kho lưu trữ riêng tư.

Vous sử dụng pouvez aussi Ứng dụng GitHub có quyền truy cập trong phạm vi và không hết hạn như mã thông báo của người dùng. Người dùng/tổ chức phải cài đặt ứng dụng để có quyền truy cập.

Làm việc với kho lưu trữ GitHub

Một phần chính của API liên quan đến việc quản lý kho lưu trữ. Chúng ta hãy xem qua một số tác vụ kho lưu trữ phổ biến.

Nhận một kho lưu trữ

Để lấy siêu dữ liệu của kho lưu trữ:

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

Chúng tôi có thể truy cập thông tin như mô tả, ngôi sao, bản sao, người đóng góp, ngôn ngữ, bản phát hành, cam kết và nhiều thông tin khác!

Liệt kê kho lưu trữ

Để liệt kê các kho lưu trữ cho người dùng hoặc tổ chức:

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

Tạo một kho lưu trữ

Chúng tôi cũng có thể tạo kho lưu trữ mới:

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}"}
) 

Xóa kho lưu trữ

Để xóa một kho lưu trữ:

requests.delete(‘https://api.github.com/repos/octocat/Hello-World‘, 
                headers={"Authorization": "token {token}"})

Điều này cung cấp cho bạn toàn quyền kiểm soát việc quản lý kho lưu trữ của bạn theo chương trình.

Lưu ý: Tất cả các yêu cầu API phải được thực hiện bằng HTTPS để bảo mật.

Xử lý các vấn đề trong kho lưu trữ

API sự cố cho phép quản lý sự cố và yêu cầu kéo. Bạn có thể:

  • Liệt kê/tạo/chỉnh sửa/đóng/mở lại các vấn đề
  • Khóa cuộc hội thoại, hợp nhất PR
  • Gửi và chỉnh sửa ý kiến
  • Thêm nhãn, người được giao, cột mốc

Ví dụ: để nhận các vấn đề từ kho lưu trữ:

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

Điều này cho phép bạn tích hợp quản lý vấn đề vào các công cụ và quy trình công việc bên ngoài.

Làm việc với dữ liệu Git

API dữ liệu Git cung cấp các điểm cuối để tương tác trực tiếp với kho Git. Bạn có thể:

  • Quản lý chi nhánh và thẻ
  • Đọc/ghi dữ liệu blob
  • Truy xuất các cam kết, tài liệu tham khảo, cây
  • So sánh các cam kết, tài liệu tham khảo, tập tin

Ví dụ: để nhận được các cam kết từ một repo:

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

Điều này cung cấp quyền truy cập đầy đủ vào các kho lưu trữ Git được quản lý theo chương trình.

Tìm kiếm kho lưu trữ và mã

API tìm kiếm của GitHub cho phép truy vấn hầu hết mọi thứ trên hơn 96 triệu kho lưu trữ công khai.

Ví dụ: để tìm các dự án Python liên quan đến khoa học dữ liệu:

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 

Cú pháp truy vấn tìm kiếm hỗ trợ các toán tử Boolean, bộ lọc, lựa chọn ngữ cảnh, v.v. để tạo các tìm kiếm được nhắm mục tiêu.

Vài ví dụ:

  • org:facebook language:python stars:>5000 – Kho lưu trữ Python trong tổ chức Facebook với hơn 5 nghìn sao
  • filename:requirements.txt django – Repos với require.txt chứa Django
  • user:defunkt location:san francisco – Tìm kho lưu trữ của defunkt nếu vị trí là SF

API Tìm kiếm mở ra nhiều cách sáng tạo để khai thác các tập dữ liệu thú vị và thông tin chuyên sâu từ dữ liệu mở của GitHub.

Sử dụng API GraphQL của GitHub

Ngoài API REST, GitHub còn cung cấp API GraphQL để truy vấn linh hoạt hơn.

GraphQL cho phép bạn chỉ định chính xác dữ liệu bạn muốn trong các cấu trúc JSON lồng nhau. Bạn có thể truy vấn nhiều thực thể được liên kết trong một yêu cầu.

Ví dụ: ở đây chúng tôi truy vấn dữ liệu hồ sơ của người dùng cũng như tên kho lưu trữ của họ:

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())

Điều này cho phép định hình phản ứng chính xác mà bạn cần. Các Trình khám phá đồ thị giúp xây dựng các truy vấn một cách tương tác.

Tích hợp API GitHub vào ứng dụng

Bây giờ bạn đã biết những điều cơ bản, hãy xem việc xây dựng ứng dụng bằng API GitHub.

Ủy quyền ứng dụng OAuth

Đối với các ứng dụng web, hãy sử dụng GitHub OAuth để ủy quyền thay vì mã thông báo được mã hóa cứng. Điều này cho phép người dùng thu hồi quyền truy cập.

  1. Đăng ký ứng dụng OAuth mới
  2. Sử dụng ID khách hàng và Bí mật để ủy quyền
  3. Chuyển hướng người dùng yêu cầu quyền truy cập GitHub

Giờ đây, ứng dụng của bạn có thể thực hiện lệnh gọi API thay mặt người dùng.

Thực hiện các yêu cầu được xác thực

Sau khi được ủy quyền, hãy thực hiện cuộc gọi bằng mã thông báo truy cập:

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

Điều này cho phép bạn truy cập dữ liệu riêng tư dựa trên quyền của người dùng.

Rate Limiting

API GitHub có giới hạn tốc độ đối với các yêu cầu. Theo dõi trạng thái ứng dụng của bạn:

response = requests.get("https://api.github.com/users/octocat") 

print(response.headers[‘X-RateLimit-Limit‘]) # 5000
print(response.headers[‘X-RateLimit-Remaining‘]) # 4999

Truyền bá các yêu cầu theo thời gian và lưu trữ dữ liệu vào bộ nhớ đệm để tránh các giới hạn.

Xử lý lỗi một cách khéo léo

Luôn kiểm tra mã trạng thái và xử lý lỗi đúng cách:

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.")

Điều này đảm bảo ứng dụng của bạn vẫn ổn định trong quá trình sản xuất.

Bằng cách làm theo các phương pháp hay nhất về API, bạn có thể xây dựng các công cụ và tích hợp mạnh mẽ dành cho nhà phát triển.

Xây dựng ứng dụng bảng điều khiển GitHub

Hãy kết hợp những gì chúng ta đã học được bằng cách xây dựng một ứng dụng web để xem hồ sơ và kho lưu trữ GitHub của bạn bằng 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)

Chúng tôi sử dụng pyGithub để đơn giản hóa một số tương tác API. Trang chủ sẽ hiển thị dashboard.html bản mẫu:

<!-- 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>

Điều này cho thấy cách bạn có thể xây dựng một ứng dụng để hiển thị dữ liệu GitHub cho người dùng đã đăng nhập!

Khả năng tích hợp API vào các ứng dụng và công cụ của riêng bạn là vô tận.

Các phương pháp hay nhất khi sử dụng API GitHub

Dưới đây là một số phương pháp hay nhất để đảm bảo ứng dụng của bạn sử dụng API GitHub hoạt động hiệu quả, an toàn và mạnh mẽ:

  • Xác thực – Sử dụng token hoặc OAuth, tránh gửi tên người dùng/mật khẩu thô.
  • HTTPS – Luôn sử dụng điểm cuối HTTPS để bảo mật dữ liệu.
  • Rate Limiting – Trải rộng các yêu cầu và dữ liệu bộ đệm để tránh giới hạn.
  • Sự đánh số trang – Sử dụng các tham số trang để lặp qua các tập kết quả.
  • Xử lý lỗi – Xử lý lỗi 4xx và 5xx một cách khéo léo.
  • Kiểm tra – Kiểm tra kỹ lưỡng các lệnh gọi API, sử dụng chế độ mô phỏng cho các lần lặp.
  • Tài liệu – Đọc kỹ tài liệu, họ cung cấp mẫu mã cho từng điểm cuối.

Việc tuân theo các phương pháp hay nhất về API sẽ ngăn ngừa những lỗi có thể tránh được và đảm bảo ứng dụng đáng tin cậy.

Các tính năng API GitHub khác để khám phá

Chúng tôi mới chỉ sơ lược về những gì có thể làm được với API GitHub. Dưới đây là một số tính năng thú vị khác để kiểm tra:

  • API hành động GitHub – Tự động hóa quy trình công việc bằng cách kích hoạt Hành động với API
  • Trang GitHub – Quản lý theo chương trình các trang Trang
  • Ý chính – Quản lý đoạn mã, cấu hình và mẫu
  • Tổ chức – Quản lý nhóm tổ chức, thành viên và quyền
  • Cơ sở dữ liệu Git – Truy cập trực tiếp dữ liệu đối tượng Git như đốm màu và cây
  • API thị trường GitHub – Quản lý ứng dụng được liệt kê trong GitHub Marketplace
  • API thảo luận GitHub – Xây dựng diễn đàn cộng đồng và tích hợp hỏi đáp

Khả năng của API mở rộng khi GitHub bổ sung thêm các tính năng mới, vì vậy hãy chú ý đến các điểm cuối mới.

So sánh API của GitHub với các lựa chọn thay thế

Đối với các nhà phát triển làm việc với các nền tảng khác, API của GitHub so với các đối thủ như GitLab, BitBucket, Azure DevOps, v.v. như thế nào?

Các khả năng API tổng thể của GitHub nổi bật về:

  • Nhận con nuôi – Cho đến nay có cơ sở người dùng và cộng đồng lớn nhất
  • Tài liệu – Tài liệu cực kỳ kỹ lưỡng với các ví dụ
  • REST + GraphQL – Tính linh hoạt của cả điểm cuối REST và GraphQL
  • Khả năng tìm kiếm – Tìm kiếm được lập chỉ mục mạnh mẽ trên tất cả dữ liệu công cộng
  • Hệ sinh thái – Hệ sinh thái ứng dụng, công cụ và tích hợp khổng lồ
  • Phân tích mã – Khả năng quét mã, linting và phân tích chất lượng

GitHub rõ ràng dẫn đầu về chức năng API nhờ quy mô và nhiều năm phát triển. Các nhà cung cấp khác như GitLab và BitBucket đang mở rộng khả năng API để cạnh tranh. Nhưng hiện tại GitHub vẫn là API có đầy đủ tính năng nhất để tương tác theo chương trình với kho Git.

Các bước tiếp theo và tài nguyên

Tôi hy vọng hướng dẫn này cung cấp cái nhìn tổng quan toàn diện về cách sử dụng API GitHub với Python!

Dưới đây là một số bước tiếp theo và tài nguyên để học thêm:

API GitHub mở ra toàn bộ thế giới khả năng xây dựng các công cụ dành cho nhà phát triển, tự động hóa quy trình làm việc, quản lý dự án và phân tích dữ liệu. Tôi hy vọng bạn cảm thấy được truyền cảm hứng để tạo ra điều gì đó có giá trị cho cộng đồng!

Chúc bạn viết mã vui vẻ!

Tham gia vào cuộc đối thoại

Chúng tôi sẽ không công khai email của bạn. Các ô đánh dấu * là bắt buộc *