Ekstraksi Data REST API dengan Python


REST API (Representational State Transfer Application Programming Interface) merupakan cara yang umum dan efisien dalam pertukaran data antar sistem melalui protokol HTTP. Konsep ini didasarkan pada arsitektur stateless client-server dan menggunakan metode HTTP standar seperti GET, POST, PUT, dan DELETE untuk melakukan operasi terhadap sumber daya. Dalam konteks data science, REST API memberikan fleksibilitas tinggi untuk mengakses berbagai jenis data secara real-time, tanpa harus mengunduh file statis atau menunggu batch processing.
Python menjadi salah satu bahasa pemrograman yang dapat menangani REST API dengan sintaks yang sederhana dan mudah dipahami. Dengan pustaka seperti requests
pengguna dapat dengan mudah melakukan permintaan HTTP, mengelola autentikasi, menangani data JSON, dan mengotomatiskan ekstraksi data dari berbagai endpoint. Pada artikel ini akan menyajikan panduan lengkap untuk mengekstrak dan mengelola data REST API dengan Python melalui berbagai skenario. Tentunya akan dimulai dari yang paling sederhana.
Membaca REST API Sederhana
Pada bagian pertama, kita akan membahas bagaimana melakukan permintaan HTTP sederhana ke REST API menggunakan pustaka requests
di Python. Yang dimaksud dengan “sederhana” di sini adalah skenario di mana API tidak memerlukan autentikasi, parameter kompleks, atau pemrosesan paralel, serta merespons dengan data dalam format yang langsung dapat diproses seperti JSON.
Contoh yang akan digunakan adalah REST API Countries. REST API ini merupakan API publik yang digunakan untuk mendapatkan informasi negara-negara. Dokumentasi lengkap dapat dilihat pada tautan tersebut. Endpoint yang akan kita coba yaitu https://restcountries.com/v3.1/region/europe
untuk mengambil informasi negara-negara yang ada di benua Eropa.
API ini memberikan response dalam bentuk JSON dan berisi informasi sangat lengkap untuk setiap negara di Eropa. Berikut adalah potongan respon yang diberikan. Untuk melihat contoh outputnya, kita dapat mencoba langsung di web browser. Berikut adalah tangkapan layar pada Google Chrome.


Membaca REST API
Kode di bawah ini mengambil daftar negara di wilayah Eropa. Data yang diterima berformat JSON dan langsung dapat diolah untuk menampilkan nama-nama negara tersebut. Jika diperlukan, data yang diperoleh tentunya dapat juga disimpan misalnya dalam format JSON atau ditransformasikan untuk mengambil informasi yang diinginkan, kemudian disimpan dalam dataframe.
Python
import requests # API endpoint url = "https://restcountries.com/v3.1/region/europe" # Ambil data dari API response = requests.get(url) # Ambil data JSON dari response data = response.json() # Tampilkan nama Negara dan Ibukota print("Daftar Negara di Eropa dan Ibu Kotanya:") print("---------------------------------------") for country in data: print(f"{country['name']['common']} - Ibu Kota: {country['capital'][0]}")
# OUTPUT Daftar Negara di Eropa dan Ibu Kotanya: --------------------------------------- Czechia - Ibu Kota: Prague Portugal - Ibu Kota: Lisbon Kosovo - Ibu Kota: Pristina Hungary - Ibu Kota: Budapest Italy - Ibu Kota: Rome ... Guernsey - Ibu Kota: St. Peter Port Estonia - Ibu Kota: Tallinn Luxembourg - Ibu Kota: Luxembourg
Menyimpan Data Menjadi Dataframe
Untuk analisis data lebih lanjut, kita dapat mengonversi respons JSON menjadi DataFrame menggunakan pustaka pandas
. Misalnya untuk mengekstrak beberapa informasi, seperti kode negara (ISO3), nama resmi, ibukota, luas wilayah, populasi, dan mata uang.
Python
import pandas as pd data_list = [] for country in data: kode_negara = country.get('cca3', None) nama_resmi = country.get('name', {}).get('official', None) ibukota = country.get('capital', [None])[0] if country.get('capital') else None luas = country.get('area', None) populasi = country.get('population', None) # Ambil mata uang (bisa lebih dari satu) mata_uang = country.get('currencies', {}) if mata_uang: kode_uang, info_uang = list(mata_uang.items())[0] nama_uang = info_uang.get('name', None) simbol_uang = info_uang.get('symbol', None) else: kode_uang = nama_uang = simbol_uang = None data_list.append({ 'Code': kode_negara, 'Name': nama_resmi, 'Capital': ibukota, 'Area': luas, 'Population': populasi, 'Currency Code': kode_uang, 'Currency Name': nama_uang, 'Currency Symbol': simbol_uang }) # Konversi ke DataFrame eropa_df = pd.DataFrame(data_list) # Menampilkan DataFrame print(eropa_df.head())
# OUTPUT Code Name Capital Area Population Currency Code Currency Name Currency Symbol 0 CZE Czech Republic Prague 78865.0 10698896 CZK Czech koruna Kč 1 PRT Portuguese Republic Lisbon 92090.0 10305564 EUR Euro € 2 UNK Republic of Kosovo Pristina 10908.0 1775378 EUR Euro € 3 HUN Hungary Budapest 93028.0 9749763 HUF Hungarian forint Ft 4 ITA Italian Republic Rome 301336.0 59554023 EUR Euro €
Membaca REST API dengan Parameter
REST API sering kali menyediakan cara untuk memfilter atau mengatur hasil respons melalui query parameters. Query parameters adalah pasangan key-value yang ditambahkan pada bagian akhir URL. Parameter ini dimulai setelah tanda tanya (?
) dan dipisahkan dengan simbol &
jika lebih dari satu parameter.
Pada bagian ini, contoh API yang akan digunakan yaitu Dragon Ball API. API ini memberikan informasi tentang karakter atau planet pada franchise Dragon Ball. Salah satu endpoint dapat difilter berdasarkan beberapa kriteria, sehingga cocok menjadi contoh pada bagian ini.
Sebagai contoh, endpoint berikut: https://dragonball-api.com/api/characters?race=Saiyan&affiliation=Z Fighter
digunakan untuk mengambil daftar karakter dari ras Saiyan
yang tergabung dalam afiliasi Z Fighter
. Response dari endpoint ini diberikan langsung dalam bentuk list. Setiap elemen pada list tersebut berisi informasi dari setiap karakter yang terpilih.
Python
import requests # API endpoint url = "https://dragonball-api.com/api/characters" # Menentukan parameter yang akan dikirimkan params = {"race": "Saiyan", "affiliation": "Z Fighter"} # Menambahkan parameters sebagai bagian dari request response = requests.get(url, params=params) # Ambil data JSON dari response data = response.json() # Menampilkan output pertama dari response print(data[0]) # Menampilkan nama karakter Saiyan yang merupakan anggota Z Fighter print("\nDaftar Karakter Saiyan yang merupakan anggota Z Fighter:") print("-------------------------------------------------------") for karakter in data: print(karakter['name'])
# OUTPUT {'id': 1, 'name': 'Goku', 'ki': '60.000.000', 'maxKi': '90 Septillion', 'race': 'Saiyan', 'gender': 'Male', 'description': .., 'image': 'https://dragonball-api.com/characters/goku_normal.webp', 'affiliation': 'Z Fighter', 'deletedAt': None } Daftar Karakter Saiyan yang merupakan anggota Z Fighter: ------------------------------------------------------- Goku Vegeta Gohan Gotenks Trunks Bardock Gogeta Vegetto
Seperti sebelumnya, data juga dapat disimpan ke dalam bentuk dataframe. Pada contoh ini, response dari API langsung berupa list serta setiap elemennya hanya berupa dictionary satu level (tidak bersarang). Response tersebut dapat dengan mudah direformat menjadi dataframe mengunakan sintaks di bawah ini.
Python
import pandas as pd data_df = pd.DataFrame(data) print(data_df)
# OUTPUT id name ki maxKi race gender ... affiliation deletedAt 0 1 Goku 60.000.000 90 Septillion Saiyan Male ... Z Fighter None 1 2 Vegeta 54.000.000 19.84 Septillion Saiyan Male ... Z Fighter None 2 10 Gohan 45.000.000 40 septillion Saiyan Male ... Z Fighter None 3 15 Gotenks 65.600.000 34.8 Billion Saiyan Male ... Z Fighter None 4 16 Trunks 50.000.000 37.4 septllion Saiyan Male ... Z Fighter None 5 18 Bardock 450.000 180.000.000 Saiyan Male ... Z Fighter None 6 65 Gogeta 250 Billion 15 septillion Saiyan Male ... Z Fighter None 7 66 Vegetto 180 Billion 10.8 Septillion Saiyan Male ... Z Fighter None
Request dengan Autentikasi API
Beberapa API memerlukan API key untuk mengakses datanya. Biasanya penggunaan API Key diberikan pada layanan-layanan yang lebih kompleks dan mengharuskan registrasi terlebih dahulu untuk mendapatkannya.
API key umumnya ditambahkan langsung pada URL, parameter query atau melalui header. Jika API key ditambahkan sebagai parameter query, maka cara mengaksesnya juga mirip dengan parameter query lainnya. Pengaturan ini sangat tergantung dari penyedia layanan, sehingga penting pagi kita untuk membaca dokumentasi layanan tersebut.
Contoh API Key Sebagai Parameter
Pada contoh ini, kita gunakan API dari layanan Weather and Geolocation API – WeatherAPI.com. Pembaca dapat melakukan registrasi secara gratis untuk menggunakan layanan ini serta mendapatkan API Key. Terdapat limitasi pada versi gratis API ini. Namun secara umum masih sangat mencukupi untuk digunakan dalam pembelajaran.
Pada endpoint yang digunakan berikut ini, kita akan mengambil informasi cuaca saat ini (current
) untuk wilayah Jakarta
. Adapun parameter yang perlu diatur yaitu "key"
, "q"
dan "aqi"
. Parameter “key” merupakan parameter wajib dan berisi API Key untuk autentikasi pengguna layanan. Berikutnya, parameter "q"
juga wajib dan dapat diisi dengan berbagai informasi lokasi. Misalnya dapat berupa koordinat (Lattitude dan Longitude), nama kota, Kode IATA dan sebagainya. Parameter berikutnya yaitu "aqi"
diisi dengan nilai "yes"
atau "no"
. Jika diisi "yes"
maka response akan menyertakan data air quality index pada output yang diberikan, dan begitu juga sebaliknya. URL lengkap saat pemanggilan API adalah https://api.weatherapi.com/v1/current.json?key=XXX&q=Jakarta&aqi=no
Sebagai catatan, output yang ditampilkan pada kode di bawah ini akan berbeda tergantung kapan API ini diakses. Hal ini tentunya karena endpoint yang kita gunakan adalah untuk kondisi cuaca terkini.
Python
import requests import json API_KEY = "XXXXXXXXXXXXXXX" # Masukkan API Key yang sesuai url = "https://api.weatherapi.com/v1/current.json" params = {"key": API_KEY, "q": "Jakarta", "aqi": "no"} response = requests.get(url, params=params) data = response.json() print(json.dumps(data, indent=4))
# OUTPUT { "location": { "name": "Jakarta", "region": "Jakarta Raya", "country": "Indonesia", "lat": -6.2146, "lon": 106.8451, "tz_id": "Asia/Jakarta", "localtime_epoch": 1751812423, "localtime": "2025-07-06 21:33" }, "current": { "last_updated_epoch": 1751812200, "last_updated": "2025-07-06 21:30", "temp_c": 25.1, "temp_f": 77.2, "is_day": 0, "condition": { "text": "Partly cloudy", "icon": "//cdn.weatherapi.com/weather/64x64/night/116.png", "code": 1003 }, "wind_mph": 2.2, "wind_kph": 3.6, "wind_degree": 155, "wind_dir": "SSE", "pressure_mb": 1012.0, "pressure_in": 29.88, "precip_mm": 0.0, "precip_in": 0.0, "humidity": 89, "cloud": 50, "feelslike_c": 27.3, "feelslike_f": 81.2, "windchill_c": 26.4, "windchill_f": 79.6, "heatindex_c": 29.5, "heatindex_f": 85.0, "dewpoint_c": 23.1, "dewpoint_f": 73.6, "vis_km": 7.0, "vis_miles": 4.0, "uv": 0.0, "gust_mph": 6.7, "gust_kph": 10.8 } }
Contoh API Key Sebagai Header
Header biasanya digunakan untuk menyampaikan informasi penting seperti autentikasi, format respons yang diinginkan, atau jenis konten. Berbeda dengan params, header dikirimkan dalam bagian metadata HTTP dan tidak terlihat langsung di URL.
Contoh layanan yang menggunakan header untuk mengirimkan API key adalah Latest Exchange Rates | currencyapi. Untuk menggunakan layanan ini kita juga perlu registrasi dan dapat memulai versi gratisnya. Informasi api key dimasukkan pada header sedangkan parameter lainnya tetap dimasukkan sebagai parameter query. Endpoint berikut ini digunakan untuk mendapatkan nilai tukar terkini dari US Dollar ke mata uang Euro, Poundsterling, Yen dan Rupiah.
Python
import requests import json url = "https://api.currencyapi.com/v3/latest" headers = {"apikey": "XXXXXXXXXXXXXXX"} # Masukkan API Key yang sesuai params = {"base_currency": "USD", "currencies": "EUR,GBP,JPY,IDR"} response = requests.get(url, headers=headers, params=params) data = response.json() print(json.dumps(data, indent=4))
# OUTPUT { "meta": { "last_updated_at": "2025-07-05T23:59:59Z" }, "data": { "EUR": { "code": "EUR", "value": 0.8485101374 }, "GBP": { "code": "GBP", "value": 0.7328300997 }, "IDR": { "code": "IDR", "value": 16175.52863103 }, "JPY": { "code": "JPY", "value": 144.4642580616 } } }
Selamat mencoba!