API’den veri almak, başka bir sistem tarafından sunulan erişim adresine giderek oradan veri isteme sürecidir. Bu işlem sonucunda dönen veri çoğu zaman JSON formatında gelir ve yapısı oldukça okunabilirdir. Temel mantık; isteği gönder, yanıtı al ve gelen veriyi kullan şeklindedir.

API Veri Çekme Sistemi Nasıl Çalışır?
Bir API veri çekme sisteminin çalışma yapısı en basit haliyle üç bileşenden oluşur. Öncelikle verinin alındığı bir API adresi vardır ve bu adres, bir web sayfası gibi tarayıcıdan ziyaret edilmez. Bu noktaya yalnızca bir program aracılığıyla erişilir.
İkinci bileşen, API adresine istek gönderen küçük bir yazılım dosyasıdır. Bu dosya genellikle Python, PHP veya JavaScript ile yazılır ve yalnızca veriyi çekmekle görevlidir.
Son olarak bu dosya çalıştırıldığında, API yanıt verir ve istenen veri elde edilir.
API Üzerinden Veri Çekme Nasıl Yapılır?
API’nin çalıştığını terminalden görelim
Önce kod yazmadan API’nin yanıt verdiğini doğrulayalım. Terminali açalım ve istek atalım.
curl https://jsonplaceholder.typicode.com/usersEğer ekranda JSON çıktısını görebiliyorsan bu adım sorunsuz şekilde tamamlanmıştır. JSON’un tek satır halinde görünmesi bu aşamada normal kabul edilir ve henüz biçimlendirilmiş olması gerekmez. Terminalde curl komutu ile alınan JSON verileri genellikle bu yapıda görüntülenir.
JSON çıktısını terminalde okunur hale getirelim
Şimdi çıktıyı okuyalım. Bunun en basit yolu, curl çıktısını Python’ın JSON aracıyla formatlamaktır.
curl -s https://jsonplaceholder.typicode.com/users | python -m json.tool
Aynı isteği küçük bir Python dosyasıyla çekelim
Bu noktada Python kullanarak API’den veri çekmeye başlayacağız. Eğer bilgisayarında Python bulunmuyorsa ya da Windows’ta Python’un nasıl kurulacağını bilmiyorsan, önce Python nedir ve Windows’a nasıl kurulur rehberimize bakabilirsiniz.
Artık terminalde çalıştırdığımız isteği bir dosya haline getirelim. Bu sayede aynı işlemi tekrar tekrar çalıştırmak daha pratik olacaktır.
Önce requests kütüphanesini kuralım
pip install requestsŞimdi veri_cek.py dosyasını oluşturalım ve içine şunu yazalım
import requests
url = "https://jsonplaceholder.typicode.com/users"
r = requests.get(url, timeout=30)
print("HTTP:", r.status_code)
r.raise_for_status() # hata varsa burada patlar<br>data = r.json()print("Kayıt sayısı:", len(data))
print("İlk kayıt örneği:", data[0])Dosyayı çalıştıralım
python veri_cek.pyParametre Göndererek API ile Nasıl Çalıştığımızı Görelim
Bir API’den veri çekerken her zaman tek tip veri almak zorunda değiliz. Çoğu API, gönderdiğimiz parametrelere göre farklı sonuçlar döndürür. Bu nedenle şimdi aynı isteği, bu kez parametre ekleyerek yapalım ve API’nin nasıl davrandığını görelim.
Terminalden basit bir test yapalım
curl "https://httpbin.org/get?limit=5&page=2"Bu istek çalıştığında, API bize gönderdiğimiz parametreleri geri yansıtır. Böylece parametrelerin doğru şekilde iletildiğini net olarak görürüz.
Şimdi aynı işlemi küçük bir kod parçası ile yapalım.
import requests
url = "https://httpbin.org/get"
params = {"limit": 5, "page": 2}
response = requests.get(url, params=params, timeout=30)
response.raise_for_status()
print(response.json()["args"])
Bu çıktıda limit ve page değerlerini görüyorsak, parametreli API çağrısı doğru şekilde çalışıyor demektir. Bundan sonraki adımlarda gerçek API’lerle çalışırken de aynı mantığı kullanacağız.
API Anahtarı Zorunluysa Nasıl Eklenmelidir?
Gerçek sistemlerde API erişimi çoğu zaman bir anahtar ile sınırlandırılır. Bu anahtar genellikle isteğin header kısmına eklenerek gönderilir. Anahtar doğru olduğu sürece veri alınır, hatalı veya eksik olduğunda ise API yanıt olarak hata verir.
Gerçek sistemlerde çoğu API anahtar ister. Bu anahtar genellikle isteğin başlığına eklenir. Mantık basittir. Anahtar doğruysa veri gelir, yanlışsa hata döner.
import requests
url = "https://api.ornek.com/data"
headers = {
"Authorization": "Bearer API_TOKEN_BURAYA"
}
r = requests.get(url, headers=headers, timeout=30)
print("HTTP kodu:", r.status_code)
print(r.text[:300])Bu noktada 401 veya 403 alıyorsak anahtar ya hatalıdır ya da yetkimiz yoktur.


Çok Fazla Veri Varsa Sayfa Sayfa Çekelim
Bazı API’ler veriyi parça parça verir. JSONPlaceholder bu durumu desteklediği için gerçek bir örnekle görelim.
curl "https://jsonplaceholder.typicode.com/posts?_page=1&_limit=5" | python -m json.toolŞimdi bunu kodla döngüye alalım.
import requests
base_url = "https://jsonplaceholder.typicode.com/posts"
all_posts = []
for page in range(1, 4):
r = requests.get(base_url, params={"_page": page, "_limit": 5}, timeout=30)
r.raise_for_status()
posts = r.json()
all_posts.extend(posts)
print(f"{page}. sayfa çekildi")
print("Toplam kayıt:", len(all_posts))Bu kodla birlikte veriyi kontrollü şekilde parça parça çekmiş oluruz.
Otomatik Hale Getirme
Tüm adımlar sorunsuz çalıştıysa artık otomatik çalıştırabiliriz. Linux sistemlerde bunun en basit yolu cron kullanmaktır.
*/10 * * * * /usr/bin/python3 /opt/veri_cek.py >> /var/log/veri_cek.log 2>&1Bu ayarla birlikte script her 10 dakikada bir çalışır.

Sık Sorulan Sorular
API çağrısı çok yavaş çalışıyorsa bunu nasıl teşhis edebilirim?
DNS çözümlemesi, TLS bağlantı süresi veya network gecikmesi bu duruma sebep olabilir. Terminalden curl -w ile bağlantı sürelerini görmek, sorunun API mi yoksa ağ mı kaynaklı olduğunu anlamaya yardımcı olur.
curl komutu her işletim sisteminde çalışır mı?
curl, Linux ve macOS sistemlerde varsayılan olarak yüklü gelir. Windows 10 ve üzeri sürümlerde de PowerShell üzerinden hazır olarak bulunur. Daha eski Windows sürümlerinde curl manuel olarak kurulabilir veya alternatif araçlar kullanılabilir.
API’den veri çekerken neden timeout tanımlamak gerekir?
API çağrıları ağ üzerinden yapıldığı için karşı tarafın cevap vermemesi veya bağlantının kopması mümkündür. Timeout tanımlanmazsa uygulama süresiz bekleyebilir. Bu da script’in kilitlenmesine ve otomatik çalışan sistemlerin durmasına neden olur.
API anahtarım doğru ama yine de 403 alıyorum, neden?
Bu genellikle anahtarın aktif olduğu ama ilgili endpoint için yetkisinin olmadığı anlamına gelir. Birçok API anahtarı oluşturulurken varsayılan olarak tüm izinler verilmez. Yetki kapsamı (scope) kontrol edilmelidir.