Python ile Basit API Entegrasyonu Nasıl Yapılır? (Adım Adım)

Python ile Basit API Entegrasyonu Nasıl Yapılır? (Adım Adım)

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!

T

Site Yöneticisi

Merhaba! Ben Ramazan, Bir yazılım geliştiricisiyim.

💬 Yorumlar (0)

İlk yorumu siz yapın!

💬 Yorum Yap