Ekstraksi Data REST API dengan Python

Ekstraksi Data REST API dengan Python sainsdata.id

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.

Contoh Response REST API

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!

Tulisan Lainnya

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

Daftar Isi