Git

Berinteraksi dengan GitHub API menggunakan Python 3

Berinteraksi dengan GitHub API menggunakan Python 3
GitHub sebagai aplikasi web adalah entitas yang besar dan kompleks. Pikirkan tentang semua repositori, pengguna, cabang, komit, komentar, kunci SSH, dan aplikasi pihak ketiga yang merupakan bagian darinya. Selain itu, ada banyak cara untuk berkomunikasi dengannya. Ada aplikasi desktop untuk GitHub, ekstensi untuk Visual Studio Code dan Atom Editor, git cli, aplikasi Android dan iOS untuk beberapa nama.

Orang-orang di GitHub, dan pengembang pihak ketiga, tidak mungkin mengelola semua kerumitan ini tanpa antarmuka yang sama. Antarmuka umum ini adalah apa yang kami sebut API GitHub. Setiap utilitas GitHub seperti cli, UI web, dll menggunakan antarmuka umum yang satu ini untuk mengelola sumber daya (sumber daya menjadi entitas seperti repositori, kunci ssh, dll).

Dalam tutorial ini kita akan mempelajari beberapa dasar tentang bagaimana seseorang berinteraksi dengan API menggunakan GitHub API v3 dan Python3. GitHub API v4 terbaru mengharuskan Anda mempelajari GraphQL yang menghasilkan kurva belajar yang lebih curam. Jadi saya akan tetap menggunakan versi tiga yang masih aktif dan cukup populer.

Cara berbicara dengan API web

API Web adalah apa yang memungkinkan Anda untuk menggunakan semua layanan yang ditawarkan oleh aplikasi web, seperti GitHub, secara terprogram menggunakan bahasa pilihan Anda. Misalnya, kita akan menggunakan Python untuk kasus penggunaan kita, di sini. Secara teknis, Anda dapat melakukan semua yang Anda lakukan di GitHub menggunakan API tetapi kami akan membatasi diri untuk hanya membaca informasi yang dapat diakses publik.

Program Python Anda akan berbicara dengan API dengan cara yang sama seperti browser Anda berbicara ke situs web. Artinya, sebagian besar melalui permintaan HTTPS. Permintaan ini akan berisi 'bagian' yang berbeda, mulai dari metode permintaan [GET, POST, PUT, DELETE], URL itu sendiri, string kueri, header HTTP, dan badan atau muatan. Sebagian besar adalah opsional. Namun kami perlu memberikan metode permintaan dan URL tujuan kami membuat permintaan.

Apa ini dan bagaimana mereka diwakili dalam permintaan HTTPS adalah sesuatu yang akan kita lihat lambat saat kita mulai menulis Skrip Python untuk berinteraksi dengan GitHub.

Sebuah contoh

Menambahkan kunci SSH ke server yang baru dibuat selalu merupakan proses yang canggung. Mari kita menulis skrip Python yang akan mengambil kunci SSH publik Anda dari GitHub dan menambahkannya ke file otor_keys di server Linux atau Unix mana pun tempat Anda menjalankan skrip ini. Jika Anda tidak tahu cara membuat atau menggunakan kunci SSH, berikut adalah artikel bagus tentang cara melakukannya. Saya akan berasumsi bahwa Anda telah membuat dan menambahkan kunci SSH publik Anda sendiri ke akun GitHub Anda.

Implementasi Python yang sangat sederhana dan naif untuk mencapai tugas yang kami jelaskan di atas adalah seperti yang ditunjukkan di bawah ini:

permintaan impor
impor os
 
# Mendapatkan masukan pengguna
unix_user = input("Masukkan nama pengguna Unix Anda: ")
github_user = input("Masukkan nama pengguna GitHub Anda: ")
 
# Memastikan .direktori ssh ada dan membuka file otor_keys
ssh_dir = '/home/'+unix_user+'/.ssh/'
jika tidak os.jalan.ada(ssh_dir):
os.makedirs(ssh_dir)
 
otor_keys_file = buka(ssh_dir+'authorized_keys','a')
 
# Mengirim permintaan ke GiHub API dan menyimpan respons dalam variabel bernama 'respons'
api_root = "https://api.github.com"
request_header = 'Terima':'aplikasi/vnd.github.v3+json'
tanggapan = permintaan.get(api_root+'/users/'+github_user+'/keys', header = request_header)
 
## Memproses respons dan menambahkan kunci ke file otor_keys
untuk saya sebagai tanggapan.json():
otorisasi_keys_file.tulis(i['kunci']+'\n')

Mari kita abaikan penanganan file Python dan detail lain-lain dan perhatikan permintaan dan tanggapannya. Pertama kami mengimpor permintaan modul permintaan impor perpustakaan ini memungkinkan kami membuat panggilan API dengan sangat mudah. Pustaka ini juga merupakan salah satu contoh terbaik dari proyek sumber terbuka yang dikerjakan dengan benar. Inilah situs resminya jika Anda ingin melihat lebih dekat dokumennya.

Selanjutnya kita atur variabel api_root.

api_root = "https://api.github.com"

Ini adalah substring umum di semua URL tempat kami akan membuat panggilan API. Jadi alih-alih mengetik “https://api.github.com” setiap kali kita perlu mengakses https://api.github.com/users atau https://api.github.com/pengguna/ kita hanya menulis api_root+'/pengguna/' atau api_root+'/pengguna/', seperti yang ditunjukkan dalam cuplikan kode.

Selanjutnya, kami menetapkan header dalam permintaan HTTPS kami, yang menunjukkan bahwa respons dimaksudkan untuk API versi 3 dan harus berformat JSON. GitHub akan menghargai informasi tajuk ini.

1.  DAPATKAN Permintaan

Jadi sekarang kita memiliki URL dan informasi header (opsional) yang disimpan dalam variabel yang berbeda, saatnya untuk membuat permintaan.

tanggapan = permintaan.get(api_root+'/users/'+github_user+'/keys', header = request_header)

Permintaan bertipe 'dapatkan' karena kami membaca informasi yang tersedia untuk umum dari GitHub. Jika Anda menulis sesuatu di bawah akun pengguna GitHub Anda, Anda akan menggunakan POST. Demikian pula metode lain yang dimaksudkan untuk fungsi lain seperti DELETE adalah untuk menghapus sumber daya seperti repositori.

2.  Titik Akhir API

Titik akhir API yang kami jangkau adalah:

https://api.github.com/pengguna//kunci

Setiap sumber daya GitHub memiliki titik akhir API sendiri. Permintaan Anda untuk GET, PUT, DELETE, dll kemudian dibuat terhadap titik akhir yang Anda berikan. Bergantung pada tingkat akses yang Anda miliki, GitHub akan mengizinkan Anda untuk memenuhi permintaan itu atau menolaknya.

Sebagian besar organisasi dan pengguna di GitHub menetapkan sejumlah besar informasi yang dapat dibaca dan publik. Misalnya, akun pengguna GitHub saya memiliki beberapa repositori publik dan kunci SSH publik yang dapat diakses oleh siapa saja (bahkan tanpa akun pengguna GitHub). Jika Anda ingin memiliki kontrol yang lebih halus atas akun pribadi Anda, Anda dapat membuat "Token Akses Pribadi" untuk membaca dan menulis informasi istimewa yang disimpan di akun GitHub pribadi Anda. Jika Anda menulis aplikasi pihak ketiga, yang dimaksudkan untuk digunakan oleh pengguna selain Anda, maka Token OAuth dari pengguna tersebut akan dibutuhkan oleh aplikasi Anda.

Tetapi seperti yang Anda lihat, banyak informasi berguna yang dapat diakses tanpa membuat token apa pun.

3.  Tanggapan

Respons dikembalikan dari server API GitHub dan disimpan dalam variabel bernama response. Seluruh tanggapan dapat dibaca dalam beberapa cara seperti yang didokumentasikan di sini. Kami secara eksplisit meminta konten jenis JSON dari GitHub sehingga kami akan memproses permintaan tersebut, seolah-olah itu adalah JSON. Untuk melakukan ini, kami memanggil metode json() dari modul permintaan yang akan mendekodekannya menjadi objek asli Python seperti kamus dan daftar.

Anda dapat melihat kunci yang ditambahkan ke file otor_keys di loop for ini:

untuk saya sebagai tanggapan.json():
otorisasi_keys_file.tulis(i['kunci']+'\n')

Jika Anda mencetak tanggapan.json() objek, Anda akan melihat bahwa itu adalah daftar Python dengan kamus Python sebagai anggota. Setiap kamus memiliki kunci bernama 'kunci' dengan kunci SSH publik Anda sebagai nilai untuk kunci itu. Jadi Anda dapat menambahkan nilai-nilai ini satu per satu ke file otor_keys Anda. Dan sekarang Anda dapat dengan mudah SSH ke server Anda dari komputer mana pun yang memiliki kunci SSH pribadi yang sesuai dengan salah satu kunci publik yang baru saja kami tambahkan.

Menjelajahi Lebih Lanjut

Banyak pekerjaan dengan API melibatkan pemeriksaan yang cermat terhadap dokumentasi API itu sendiri, lebih dari sekadar menulis baris kode. Dalam hal GitHub, dokumentasinya adalah salah satu yang terbaik di industri. Tetapi membaca dokumen API dan membuat panggilan API menggunakan Python agak tidak menarik sebagai aktivitas mandiri.

Sebelum Anda melangkah lebih jauh, saya akan merekomendasikan Anda untuk membuat satu tugas yang ingin Anda lakukan menggunakan Python di akun GitHub Anda. Kemudian coba implementasikan dengan hanya membaca dokumentasi resmi yang disediakan oleh Python, perpustakaan dependennya, dan GitHub. Ini juga akan membantu Anda mengadopsi pola pikir yang lebih sehat di mana Anda memahami apa yang terjadi di dalam kode Anda dan meningkatkannya secara bertahap seiring waktu.

Port Sumber Terbuka dari Mesin Game Komersial
Rekreasi mesin game gratis, open source, dan lintas platform dapat digunakan untuk bermain lama serta beberapa judul game yang cukup baru. Artikel ini...
Game Baris Perintah Terbaik untuk Linux
Baris perintah bukan hanya sekutu terbesar Anda saat menggunakan Linux-ini juga dapat menjadi sumber hiburan karena Anda dapat menggunakannya untuk me...
Aplikasi Pemetaan Gamepad Terbaik untuk Linux
Jika Anda suka bermain game di Linux dengan gamepad alih-alih sistem input keyboard dan mouse biasa, ada beberapa aplikasi yang berguna untuk Anda. Ba...