Günümüzde neredeyse her uygulama, bir şekilde dış dünyayla iletişim kuruyor. Hava durumu bilgisi mi lazım? Bir API çağırıyorsun. Döviz kuru mu gerekiyor? Yine bir API. Peki bu API denen şey tam olarak ne ve Python ile nasıl kullanılıyor? Gelin birlikte adım adım inceleyelim.
API Nedir? Neden Önemlidir?
API (Application Programming Interface), iki yazılımın birbiriyle konuşmasını sağlayan bir köprü gibi düşünebilirsiniz. Bir restoranda garson nasıl sizinle mutfak arasında iletişim kuruyorsa, API de uygulamanız ile sunucu arasında aynı görevi görür.
💡 Gerçek Hayat Örneği: Telefonunuzdaki hava durumu uygulaması, aslında bir meteoroloji API'sine bağlanıp verileri çekiyor. Uygulama kendi başına hava tahmini yapmıyor!
Gerekli Araçlar ve Kurulum
Python ile API çalışmak için en popüler kütüphane requests kütüphanesidir. Kurulumu son derece basit:
# Terminal veya komut satırında çalıştırın
pip install requests
Kurulum tamamlandıktan sonra artık API dünyasına adım atmaya hazırsınız!
İlk API İsteğimizi Yapalım (GET Request)
En temel API işlemi GET isteğidir. Bu, sunucudan veri "almak" için kullanılır. Örnek olarak ücretsiz bir API olan JSONPlaceholder'ı kullanalım:
import requests # API endpoint'ini tanımlıyoruz url = "https://jsonplaceholder.typicode.com/posts/1" # GET isteği gönderiyoruz response = requests.get(url) # Durum kodunu kontrol edelim if response.status_code == 200: # JSON verisini Python sözlüğüne çeviriyoruz data = response.json() print(f"Başlık: {data['title']}") print(f"İçerik: {data['body']}") else: print(f"Hata oluştu! Kod: {response.status_code}")
✅ Çıktı:
Başlık: sunt aut facere repellat provident...
İçerik: quia et suscipit suscipit recusandae...
HTTP Durum Kodlarını Anlamak
API ile çalışırken karşılaşacağınız durum kodlarını bilmek çok önemli. İşte en sık karşılaşacaklarınız:
| Kod | Anlamı | Ne Yapmalısınız? |
|---|---|---|
| 200 | Başarılı | Her şey yolunda, veriyi işleyin |
| 400 | Hatalı İstek | Gönderdiğiniz parametreleri kontrol edin |
| 401 | Yetkisiz | API anahtarınızı kontrol edin |
| 404 | Bulunamadı | URL adresini doğrulayın |
| 500 | Sunucu Hatası | Bekleyin ve tekrar deneyin |
POST İsteği ile Veri Göndermek
Bazen sadece veri almak yetmez, sunucuya veri de göndermemiz gerekir. İşte burada POST isteği devreye girer:
import requests import json url = "https://jsonplaceholder.typicode.com/posts" # Göndereceğimiz veri yeni_post = { "title": "Python API Rehberi", "body": "Bu bir test gönderisidir.", "userId": 1 } # Header'ları belirliyoruz headers = { "Content-Type": "application/json" } # POST isteği gönderiyoruz response = requests.post( url, data=json.dumps(yeni_post), headers=headers ) if response.status_code == 201: # 201 = Başarıyla oluşturuldu print("Post başarıyla oluşturuldu!") print(f"Atanan ID: {response.json()['id']}") else: print(f"Hata: {response.status_code}")
API Anahtarı (API Key) ile Kimlik Doğrulama
Çoğu profesyonel API, güvenlik için bir API anahtarı ister. Bu anahtarı genellikle header'da veya URL parametresi olarak gönderirsiniz:
import requests import os # API anahtarını güvenli bir şekilde çevresel değişkenden alıyoruz # ASLA kodunuzun içine doğrudan yazmayın! API_KEY = os.getenv("MY_API_KEY") # Yöntem 1: Header'da gönderme headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } response = requests.get( "https://api.ornek.com/data", headers=headers ) # Yöntem 2: URL parametresi olarak gönderme params = { "api_key": API_KEY, "query": "python" } response = requests.get( "https://api.ornek.com/search", params=params )
⚠️ Güvenlik Uyarısı:
API anahtarlarınızı asla doğrudan kod içine yazmayın! Bunun yerine .env dosyası veya çevresel değişkenler kullanın. Aksi takdirde GitHub'a yüklediğinizde herkes anahtarınızı görebilir.
Hata Yönetimi: Try-Except Kullanımı
Gerçek dünyada her şey planladığınız gibi gitmez. İnternet bağlantısı kopabilir, sunucu yanıt vermeyebilir. Bu yüzden hata yönetimi şart:
import requests from requests.exceptions import ( ConnectionError, Timeout, HTTPError ) def guvenli_api_istegi(url, timeout=10): """ Güvenli bir şekilde API isteği yapar. Olası hataları yakalar ve uygun mesajlar döndürür. """ try: response = requests.get(url, timeout=timeout) # HTTP hatalarını kontrol et (4xx, 5xx) response.raise_for_status() return { "basarili": True, "data": response.json() } except ConnectionError: return { "basarili": False, "hata": "İnternet bağlantısı yok!" } except Timeout: return { "basarili": False, "hata": "Sunucu yanıt vermedi (timeout)!" } except HTTPError as e: return { "basarili": False, "hata": f"HTTP Hatası: {e.response.status_code}" } # Kullanım sonuc = guvenli_api_istegi("https://jsonplaceholder.typicode.com/posts/1") if sonuc["basarili"]: print("Veri alındı:", sonuc["data"]) else: print("Hata:", sonuc["hata"])
Gerçek Dünya Örneği: Hava Durumu API'si
Öğrendiklerimizi birleştirerek gerçek bir hava durumu uygulaması yapalım. Bu örnekte ücretsiz wttr.in API'sini kullanacağız:
import requests class HavaDurumuAPI: """Basit bir hava durumu sorgulama sınıfı""" def __init__(self): self.base_url = "https://wttr.in" def sorgula(self, sehir): """Belirtilen şehir için hava durumunu getirir""" # JSON formatında veri istiyoruz url = f"{self.base_url}/{sehir}?format=j1" try: response = requests.get(url, timeout=15) response.raise_for_status() data = response.json() guncel = data["current_condition"][0] return { "sehir": sehir.title(), "sicaklik": f"{guncel['temp_C']}°C", "hissedilen": f"{guncel['FeelsLikeC']}°C", "nem": f"%{guncel['humidity']}", "durum": guncel["weatherDesc"][0]["value"] } except Exception as e: return {"hata": str(e)} # Kullanım hava = HavaDurumuAPI() # Türkiye'den birkaç şehir sorgulayalım sehirler = ["Istanbul", "Ankara", "Konya"] for sehir in sehirler: sonuc = hava.sorgula(sehir) if "hata" not in sonuc: print(f"\n🌍 {sonuc['sehir']}") print(f" 🌡️ Sıcaklık: {sonuc['sicaklik']}") print(f" 💨 Hissedilen: {sonuc['hissedilen']}") print(f" 💧 Nem: {sonuc['nem']}") print(f" ☁️ Durum: {sonuc['durum']}") else: print(f"❌ {sehir}: {sonuc['hata']}")
Session Kullanarak Performans Artırma
Aynı API'ye birden fazla istek yapacaksanız, Session kullanmak performansı ciddi şekilde artırır. Çünkü bağlantı havuzu oluşturur ve TCP bağlantılarını yeniden kullanır:
import requests # Session oluşturuyoruz session = requests.Session() # Ortak header'ları bir kez tanımlıyoruz session.headers.update({ "User-Agent": "MyPythonApp/1.0", "Accept": "application/json" }) # Artık tüm istekler bu session üzerinden yapılacak base_url = "https://jsonplaceholder.typicode.com" # Birden fazla istek yapalım for post_id in range(1, 6): response = session.get(f"{base_url}/posts/{post_id}") data = response.json() print(f"Post {post_id}: {data['title'][:40]}...") # İşimiz bitince session'ı kapatıyoruz session.close()
Özet: API Entegrasyonu Kontrol Listesi
- ✅ requests kütüphanesini kurun
- ✅ API dokümantasyonunu mutlaka okuyun
- ✅ Doğru HTTP metodunu kullanın (GET, POST, PUT, DELETE)
- ✅ API anahtarınızı güvenli tutun (.env dosyası)
- ✅ Durum kodlarını her zaman kontrol edin
- ✅ Try-except ile hataları yönetin
- ✅ Timeout değeri belirleyin
- ✅ Çok sayıda istek için Session kullanın
Sonuç
API entegrasyonu ilk başta karmaşık görünebilir ama temelleri öğrendikten sonra inanılmaz güçlü bir araç haline geliyor. Bu rehberde öğrendiklerinizle artık hava durumu servisleri, ödeme sistemleri, sosyal medya platformları ve daha birçok servisle entegrasyon yapabilirsiniz.
Unutmayın: Her API'nin kendi dokümantasyonu var ve her biri biraz farklı çalışabilir. Ama temel prensipler hep aynı kalır. Pratik yaptıkça bu işler çocuk oyuncağına dönecek!
🚀 Kod yazmaya başlayın, denemekten korkmayın!
💬 Yorumlar (0)
İlk yorumu siz yapın!
💬 Yorum Yap