Apı nedir,nasıl çalışır, apı çeşitleri nelerdir,ne işe yarar ve döviz kuru hesaplama

Apı nedir,nasıl çalışır, apı çeşitleri nelerdir,ne işe yarar ve döviz kuru hesaplama

API Nedir?

API (Application Programming Interface - Uygulama Programlama Arayüzü), iki farklı yazılım uygulamasının birbiriyle iletişim kurmasını sağlayan bir dizi tanım ve protokol bütünüdür. Basitçe söylemek gerekirse, bir uygulamanın başka bir uygulamaya veri veya işlevsellik talebinde bulunması için kullanılan bir köprüdür.

Nasıl Çalışır?

API'ler, tıpkı bir restorandaki menü gibidir. Müşteri (uygulama A), garsona (API) ne istediğini (veri veya işlev) söyler. Garson, mutfaktan (uygulama B) istenen şeyi alır ve müşteriye geri getirir. Bu süreçte müşteri, mutfakta yemeğin nasıl yapıldığını bilmek zorunda değildir, sadece menüdeki seçenekleri bilir ve siparişini verir.

Teknik olarak, API'ler genellikle istek (request) ve yanıt (response) prensibiyle çalışır. Bir uygulama (istemci), API aracılığıyla diğer uygulamaya (sunucu) bir istek gönderir. Sunucu, bu isteği işler ve bir yanıt döndürür. Bu yanıt genellikle JSON veya XML gibi standart veri formatlarında olur.

Neden Önemlidir?

API'ler, modern yazılım geliştirmenin temel taşlarından biridir ve birçok önemli fayda sağlar

  • Entegrasyon ve Birlikte Çalışabilirlik: Farklı sistemlerin ve uygulamaların sorunsuz bir şekilde bir araya gelmesini ve veri paylaşmasını sağlar. Örneğin, bir e-ticaret sitesi ödeme işlemleri için bir bankanın API'sini kullanabilir

  • Hız ve Verimlilik: Geliştiricilerin sıfırdan her şeyi yazmak yerine, mevcut işlevsellikleri kullanmalarına olanak tanır. Bu da geliştirme sürecini hızlandırır ve maliyetleri düşürür.

  • İnovasyon: Uygulamaların yeni ve yaratıcı yollarla birleşerek daha zengin deneyimler sunmasına olanak tanır. Örneğin, bir harita uygulaması, restoran yorumları için başka bir uygulamanın API'sini kullanabilir.

  • Modülerlik: Uygulamaların daha küçük ve yönetilebilir parçalara ayrılmasını sağlar. Bu da bakımı ve güncellemeleri kolaylaştırır.

  • Güvenlik: API'ler, hangi verilere erişilebileceğini ve hangi işlemlerin yapılabileceğini kontrol ederek güvenlik katmanı sağlar.

    Çeşitleri Nelerdir?

  • 1. Erişim Düzeyine Göre API'ler

    API'ler, kimlerin bu arayüze erişebileceğine göre sınıflandırılır.

    a. Açık API'ler (Public API veya Open API)

    • Tanım: Herkesin erişimine açık olan API'lerdir. Genellikle geliştiricilerin kendi uygulamalarına entegre etmeleri için tasarlanmıştır.

    • Özellikler: Geniş bir geliştirici topluluğuna hitap eder. Genellikle belgelemeleri iyi hazırlanmış ve kullanımı kolaydır. Bazıları ücretsizken, bazıları belirli kullanım limitleri veya abonelik ücretleri içerebilir.

    • Örnekler: Google Maps API (harita hizmetleri), Twitter API (tweet gönderme, veri çekme), OpenWeather API (hava durumu verileri).

    b. Dahili API'ler (Internal API veya Private API)

    • Tanım: Yalnızca belirli bir şirketin veya organizasyonun iç sistemleri arasında iletişimi sağlamak için kullanılan API'lerdir. Dış dünyaya kapalıdırlar.

    • Özellikler: Şirket içi süreçleri optimize etmek, farklı departmanlar arasında veri paylaşımını sağlamak ve iç otomasyonları yönetmek amacıyla tasarlanmıştır. Güvenlik ve gizlilik önlemleri çok daha sıkıdır.

    • Örnek: Bir e-ticaret platformunun veri tabanı ile sipariş işleme modülü arasında veri alışverişini sağlayan API.

    c. Ortak API'ler (Partner API)

    • Tanım: Belirli iş ortaklarının erişimine açık olan API'lerdir. İki şirket arasında veri alışverişi ve iş birliği sağlamak için kullanılır.

    • Özellikler: Güvenli ve kontrollü bir veri alışverişi sağlar. Erişim için belirli haklar veya lisanslar gerektirir.

    • Örnek: Bir seyahat şirketi ile bir otel zinciri arasındaki rezervasyon sistemlerinin entegrasyonu için kullanılan API veya bir e-ticaret sitesi ile bir kargo firması arasındaki iletişim API'si.

    d. Bileşen API'leri (Composite API)

    • Tanım: Birden fazla API'nin veya veri kaynağının işlevlerini tek bir çağrıda birleştirerek daha karmaşık işlemlerin tek bir arayüz üzerinden yapılmasını sağlayan API'lerdir.

    • Özellikler: Geliştiricilerin birden fazla API ile uğraşmasını önler, karmaşık iş süreçlerini basitleştirir ve performansı artırabilir. Özellikle mikroservis mimarilerinde yaygındır.

    • Örnek: Bir e-ticaret platformunun, kullanıcıların ürün arama, ödeme ve kargo takibi gibi farklı işlemleri tek bir API çağrısıyla gerçekleştirmesini sağlayan bir API.


    2. Mimari Tarzlara Göre API'ler

    API'ler, nasıl tasarlandıklarına ve iletişimi nasıl gerçekleştirdiklerine göre farklı mimarilere sahip olabilir.

    a. REST API (Representational State Transfer)

    • Tanım: Web üzerindeki en popüler ve esnek API mimarisidir. HTTP protokolü üzerinden çalışır ve kaynaklara (resources) odaklanır. Kaynaklar genellikle benzersiz URL'lerle (URI) tanımlanır.

    • Özellikler:

      • Durumsuz (Stateless): Her istek, sunucunun önceki bir isteğe dair hiçbir bilgisi olmadan bağımsız olarak işlenir. Bu, sunucu tarafında oturum bilgisi tutulmadığı anlamına gelir, bu da ölçeklenebilirliği artırır.

      • İstemci-Sunucu (Client-Server): İstemci ve sunucu birbirinden bağımsızdır ve her biri kendi sorumluluklarına sahiptir.

      • Önbelleklenebilir (Cacheable): Yanıtlar önbelleğe alınabilir, bu da performansı artırır.

      • Katmanlı Sistem (Layered System): İstemci, son sunucuya doğrudan bağlanıyor gibi görünse de, araya yük dengeleyiciler, proxy'ler veya önbellekler gibi ara katmanlar eklenebilir.

      • Birleşik Arayüz (Uniform Interface): Kaynakların nasıl manipüle edileceğine dair standart bir yöntem setini (HTTP metotları: GET, POST, PUT, DELETE) kullanır.

    • Veri Formatı: Genellikle JSON veya XML kullanır. JSON, hafifliği ve insan tarafından okunabilirliği nedeniyle daha yaygın tercih edilir.

    • Kullanım Alanı: Mobil uygulamalar, web siteleri, tek sayfalık uygulamalar (SPA'lar) ve genel web servisleri.

    b. SOAP API (Simple Object Access Protocol)

    • Tanım: XML tabanlı, daha katı ve standartlaştırılmış bir iletişim protokolüdür. Genellikle eski sistemler ve kurumsal uygulamalar arasında veri transferi için kullanılır.

    • Özellikler:

      • Katı Kurallar: Mesaj formatı ve iletişim kuralları çok daha sıkıdır ve XML şemaları ile tanımlanır.

      • Güvenlik: WS-Security gibi gelişmiş güvenlik standartlarını destekler. Bu nedenle finans ve sağlık gibi yüksek güvenlik gerektiren sektörlerde tercih edilebilir.

      • Karmaşıklık: XML tabanlı olması ve katı kuralları nedeniyle genellikle REST'e göre daha karmaşık ve daha yavaş olabilir.

      • Protokol Bağlımsızlığı: HTTP'nin yanı sıra SMTP, TCP/IP gibi farklı taşıma protokollerini de kullanabilir.

    • Veri Formatı: Sadece XML kullanır.

    • Kullanım Alanı: Kurumsal uygulamalar, eski sistem entegrasyonları, hassas veri transferi gerektiren durumlar.

    c. GraphQL API

    • Tanım: Facebook tarafından geliştirilen bir sorgu dilidir ve API'ler için bir çalışma zamanı ortamıdır. İstemcinin tam olarak neye ihtiyacı olduğunu sorgulamasına olanak tanır.

    • Özellikler:

      • Esneklik: İstemci, tek bir istekte birden fazla kaynaktan veri alabilir ve sadece ihtiyaç duyduğu verileri talep edebilir. Bu, "aşırı getirme (over-fetching)" veya "eksik getirme (under-fetching)" sorunlarını ortadan kaldırır.

      • Tek Uç Nokta: Genellikle tek bir HTTP uç noktası üzerinden çalışır.

      • Tip Güvenliği: Bir şema ile tanımlanır, bu da istemcinin ve sunucunun veri yapısını anlamasına yardımcı olur.

    • Veri Formatı: Genellikle JSON kullanır.

    • Kullanım Alanı: Mobil uygulamalar, karmaşık veri ihtiyaçları olan uygulamalar, mikroservis mimarileri.

    d. gRPC API (Google Remote Procedure Call)

    • Tanım: Google tarafından geliştirilen, yüksek performanslı, açık kaynaklı bir RPC (Remote Procedure Call) çerçevesidir. Özellikle mikroservisler arası iletişim ve düşük gecikmeli, yüksek performanslı uygulamalar için tasarlanmıştır.

    • Özellikler:

      • Yüksek Performans: HTTP/2 protokolünü kullanır ve Protocol Buffers (Protobuf) adı verilen verimli bir serileştirme formatı kullanır. Bu sayede daha az bant genişliği tüketir ve daha hızlı iletişim sağlar.

      • Çoklu Dil Desteği: Birçok programlama dilini destekler.

      • İki Yönlü Akış (Bi-directional Streaming): Hem istemci hem de sunucu arasında eşzamanlı olarak veri gönderip almayı destekler.

    • Veri Formatı: Protocol Buffers (Protobuf).

    • Kullanım Alanı: Mikroservis mimarileri, gerçek zamanlı uygulamalar, mobil ve IoT cihazları arası iletişim.

    e. WebSocket API

    • Tanım: Web uygulamalarında gerçek zamanlı ve çift yönlü iletişim sağlayan bir iletişim protokolüdür. Geleneksel HTTP'den farklı olarak, istemci ve sunucu arasında kalıcı bir bağlantı kurar.

    • Özellikler:

      • Çift Yönlü İletişim: Hem istemci hem de sunucu, bağlantı üzerinden veri gönderip alabilir. Bu sayede sunucu, istemciye herhangi bir olay olduğunda doğrudan bildirim gönderebilir.

      • Düşük Gecikme: Bağlantı kurulduktan sonra HTTP gibi her istek için yeni bir bağlantı açma veya başlık bilgisi gönderme ihtiyacını ortadan kaldırır, bu da gecikmeyi azaltır.

    • Veri Formatı: Genellikle JSON veya özel ikili formatlar.

    • Kullanım Alanı: Canlı sohbet uygulamaları, online oyunlar, gerçek zamanlı bildirim sistemleri, borsalar ve canlı veri akışı gerektiren uygulamalar.


    3. Kullanım Alanlarına Göre API'ler (Örnekler)

    API'ler, belirli sektörlerde veya işlevlerde özel olarak tasarlanabilir.

    • Sosyal Medya API'leri: Facebook API, Twitter API, Instagram API.

    • Ödeme API'leri: Stripe API, PayPal API, iyzico API (bankalarla entegrasyon).

    • Harita ve Konum API'leri: Google Maps API, OpenStreetMap API.

    • Hava Durumu API'leri: OpenWeatherMap API.

    • Pazarlama API'leri: E-posta pazarlama servisleri (Mailchimp API), CRM (Salesforce API).

    • Finans API'leri: Bankacılık ve tahsilat API'leri, hisse senedi verileri API'leri.

    • E-ticaret API'leri: Shopify API, WooCommerce API (ürün yönetimi, sipariş işleme).

    • Mesajlaşma API'leri: WhatsApp API, Telegram API.

    API'lerin dünyası oldukça geniş ve sürekli gelişiyor. Her bir tür, belirli ihtiyaçları karşılamak üzere tasarlanmıştır ve doğru API'yi seçmek, bir uygulamanın performansını, güvenliğini ve geliştirme sürecini büyük ölçüde etkileyebilir.

  • Günlük Hayattan Örnekler Nelerdir?

    1. Online Alışveriş ve Ödeme İşlemleri

    • Senaryo: Bir e-ticaret sitesinden (Trendyol, Hepsiburada vb.) alışveriş yapıyorsunuz. Sepetinizi doldurup ödeme sayfasına geldiğinizde, kredi kartı bilgilerinizi giriyorsunuz.

    • API Devrede: E-ticaret sitesi, sizin kredi kartı bilgilerinizi doğrudan saklamaz veya işlemez. Bunun yerine, bir ödeme ağ geçidi hizmetinin (iyzico, Stripe, PayTR vb.) API'sini kullanır. Sizin girdiğiniz bilgiler, bu ödeme ağ geçidinin API'si aracılığıyla güvenli bir şekilde bankanıza iletilir. Banka onay verdiğinde, ödeme ağ geçidi API aracılığıyla e-ticaret sitesine "Ödeme Başarılı" yanıtını gönderir.

    • Fayda: E-ticaret sitesinin her bankayla ayrı ayrı entegrasyon kurmasına gerek kalmaz. Ödeme hizmeti sağlayıcısı bu karmaşık işi API aracılığıyla basitleştirir.


    2. Harita ve Konum Servisleri

    • Senaryo: Bir yemek siparişi uygulaması (Yemek Sepeti, GetirYemek) kullanıyorsunuz veya bir arkadaşınızın size konumunu atmasını istiyorsunuz. Uygulama size harita üzerinde bir nokta gösteriyor.

    • API Devrede: Uygulamanın kendisi bir harita geliştirmiyor. Bunun yerine, Google Haritalar API'si veya OpenStreetMap API'si gibi bir servisin API'sini kullanır. Uygulama, kullanıcının konum bilgisini (GPS koordinatları) bu harita API'sine gönderir ve API, o konumdaki harita görüntüsünü veya adres bilgilerini uygulamaya geri döndürür. Restoranın veya teslimatçının konumunu takip etmek de yine bu API'ler sayesinde mümkün olur.

    • Fayda: Her uygulamanın kendi harita altyapısını oluşturma maliyetinden ve karmaşıklığından kurtulması sağlanır.


    3. Sosyal Medya Paylaşım Butonları

    • Senaryo: Bir haber sitesinde veya blogda okuduğunuz bir makaleyi Facebook, Twitter veya LinkedIn'de paylaşmak istiyorsunuz ve sayfanın altındaki küçük paylaşım butonlarına tıklıyorsunuz.

    • API Devrede: Web sitesi, doğrudan sosyal medya platformuna bağlanmıyor. Bunun yerine, ilgili sosyal medya platformunun (örneğin Twitter API'si veya Facebook Graph API'si) paylaşım API'sini kullanır. Siz butona tıkladığınızda, bu API çağrılır ve makalenin başlığı, bağlantısı ve bazen küçük bir önizleme görüntüsü gibi bilgiler sosyal medya platformuna gönderilir. Bu, sizin hesabınız üzerinden paylaşımın yapılmasını sağlar.

    • Fayda: Web sitesi geliştiricilerinin sosyal medya platformlarının karmaşık altyapılarına girmeden, kullanıcılarına kolayca içerik paylaşma imkanı sunabilmesini sağlar.


    4. Hava Durumu Uygulamaları ve Widget'ları

    • Senaryo: Telefonunuzdaki hava durumu uygulamasını açtığınızda veya bilgisayarınızın masaüstündeki bir widget'ta güncel hava durumunu görüyorsunuz.

    • API Devrede: Hava durumu uygulaması, meteoroloji istasyonlarından doğrudan veri toplamaz. Bunun yerine, OpenWeatherMap API'si veya AccuWeather API'si gibi bir hava durumu sağlayıcısının API'sini kullanır. Uygulama, sizin bulunduğunuz şehrin adını veya konumunu bu API'ye gönderir ve API, o şehirle ilgili sıcaklık, nem, rüzgar hızı gibi güncel hava durumu verilerini uygulamaya geri döndürür.

    • Fayda: Geliştiricilerin kapsamlı meteoroloji altyapısı kurmasına gerek kalmadan, güvenilir ve güncel hava durumu verilerine erişmelerini sağlar.


    5. Seyahat ve Konaklama Siteleri

    • Senaryo: Booking.com veya Enuygun gibi bir siteden uçak bileti veya otel arıyorsunuz. Farklı havayollarının ve otellerin fiyatlarını ve müsaitliklerini tek bir yerde görüyorsunuz.

    • API Devrede: Bu siteler, her havayolu veya otel zinciriyle tek tek bağlantı kurmak yerine, havayollarının ve otellerin kendi API'lerini veya üçüncü taraf seyahat veri sağlayıcılarının API'lerini kullanır. Siz arama yaptığınızda, siteler bu API'ler aracılığıyla gerçek zamanlı olarak fiyat ve müsaitlik bilgilerini sorgular ve sonuçları size sunar.

    • Fayda: Kullanıcılara geniş bir seçenek yelpazesi sunulurken, seyahat siteleri için veri toplama ve karşılaştırma süreci otomatize edilmiş olur.

    • API Çalışma Şeması

      Aşağıdaki şema, bir API'nin iki farklı uygulama arasındaki iletişimi nasıl sağladığını adım adım göstermektedir

    graph LR
        A[İstemci Uygulama] -- 1. İstek (Request) --> B(API - Uygulama Programlama Arayüzü);
        B -- 2. İsteği İşleme --> C[Sunucu Uygulama / Veritabanı];
        C -- 3. Yanıt Üretme --> B;
        B -- 4. Yanıt (Response) --> A;

        subgraph Açıklamalar
            direction LR
            A_desc[İstemci Uygulama: Veri veya hizmet talep eden uygulama (örn. mobil uygulama, web sitesi)]
            B_desc[API: İstemci ve Sunucu arasında veri alışverişini sağlayan köprü, kurallar bütünü]
            C_desc[Sunucu Uygulama / Veritabanı: İsteği karşılayan ve veriyi barındıran sistem]
            1_desc[1. İstek: İstemcinin API'ye gönderdiği talep (örn. "hava durumunu getir", "ödeme yap")]
            2_desc[2. İsteği İşleme: API'nin isteği anlaması ve Sunucu Uygulamaya iletmesi]
            3_desc[3. Yanıt Üretme: Sunucu Uygulamanın isteği işleyip sonucu hazırlaması]
            4_desc[4. Yanıt: API'nin Sunucu Uygulamadan aldığı sonucu İstemci Uygulamaya döndürmesi (örn. hava durumu verisi, ödeme onayı)]
        end

    Şemanın Açıklaması:

    1. İstemci Uygulama (Client Application): Bu, kullanıcının doğrudan etkileşimde bulunduğu veya arka planda çalışan yazılımdır. Bir mobil uygulama, bir web sitesi veya başka bir sunucu uygulaması olabilir. Bir şeye ihtiyaç duyduğunda (örneğin hava durumu bilgisi, ürün listesi, ödeme onayı), bir istek gönderir.

    2. 1. İstek (Request): İstemci Uygulama, belirli bir format ve kurallar çerçevesinde (bu kurallar API tarafından tanımlanır) API'ye bir istek gönderir. Bu istek genellikle bir HTTP metodu (GET, POST, PUT, DELETE) ve bir URL (uç nokta) içerir. Örneğin: GET /api/hava_durumu?sehir=Adana.

    3. API (Application Programming Interface): İşte köprü burada devreye girer. API, İstemci'nin isteğini alır. Bu istek, API'nin tanımladığı kurallara uygun mu diye kontrol edilir (örneğin, kimlik doğrulama, yetkilendirme kontrolü). Ardından, isteği Sunucu Uygulama'nın anlayacağı bir dile çevirir.

    4. 2. İsteği İşleme: API, İstemci'den aldığı isteği Sunucu Uygulamaya iletir. Bu, bir fonksiyon çağrısı, bir veritabanı sorgusu veya başka bir dahili işlem olabilir.

    5. Sunucu Uygulama / Veritabanı: Bu, API'nin arkasında çalışan ana sistemdir. İstemci'nin talebini gerçekten işleyen yerdir. Örneğin, bir hava durumu API'sinde bu, hava durumu verilerini tutan ve işleyen sistem olabilir. Bir ödeme API'sinde ise, bankalarla entegre olan ve ödeme işlemlerini yürüten sistemdir. İstek işlendikten sonra, Sunucu bir yanıt hazırlar.

    6. 3. Yanıt Üretme: Sunucu Uygulama, isteği başarıyla işledikten sonra (veya bir hata durumunda), işlenmiş veriyi veya işlem sonucunu içeren bir yanıt oluşturur.

    7. 4. Yanıt (Response): Sunucu Uygulamanın hazırladığı yanıt, tekrar API aracılığıyla İstemci Uygulamaya geri gönderilir. Bu yanıt da belirli bir formatta (genellikle JSON veya XML) olur ve istemcinin isteğinin sonucunu içerir (örneğin, Adana'nın güncel sıcaklığı, ödeme işlemi başarılı mesajı). İstemci Uygulama bu yanıtı alıp kullanıcıya gösterir veya kendi iç süreçlerinde kullanır.

    • Döviz Kuru Hesaplayan Python Kodu

    • import requests
      import xml.etree.ElementTree as ET
      from datetime import datetime, timedelta

      def get_latest_available_exchange_rates(max_days_back=5):
          """
          TCMB'den döviz kurlarını bugünden başlayarak en fazla `max_days_back` gün öncesine kadar arar.
          Geçerli bir XML bulunduğunda kurları döndürür.
          """
          today = datetime.now()

          for i in range(max_days_back):
              check_date = today - timedelta(days=i)

              # Hafta sonlarını atla (5: Cumartesi, 6: Pazar)
              if check_date.weekday() >= 5:
                  continue

              day = check_date.strftime('%d')
              month = check_date.strftime('%m')
              year = check_date.strftime('%Y')

              url = f"https://www.tcmb.gov.tr/kurlar/{year}{month}/{day}{month}{year}.xml"
              print(f"Deneme: {check_date.strftime('%d.%m.%Y')} → {url}")

              try:
                  response = requests.get(url)
                  response.raise_for_status()

                  root = ET.fromstring(response.content)

                  rates = {}
                  for currency in root.findall('Currency'):
                      code = currency.get('CurrencyCode')
                      selling = currency.find('ForexSelling')
                      if code and selling is not None and selling.text:
                          try:
                              rates[code] = float(selling.text.replace(',', '.'))
                          except ValueError:
                              continue

                  print(f"\n✅ {check_date.strftime('%d.%m.%Y')} tarihli kurlar bulundu.")
                  return rates, check_date.strftime('%d.%m.%Y')

              except requests.exceptions.HTTPError:
                  print(f"❌ {check_date.strftime('%d.%m.%Y')} için XML dosyası yok.")
              except Exception as e:
                  print(f"Hata: {e}")
                  break

          print("\n❌ Son {max_days_back} gün içinde geçerli bir TCMB kuru bulunamadı.")
          return None, None

      # --- Ana Çalıştırma ---
      print("\n--- TCMB Döviz Kurları Sorgulanıyor (Geriye Deneme Yapılıyor) ---")
      rates_data, date_str = get_latest_available_exchange_rates()

      if rates_data:
          print(f"\n--- {date_str} Tarihli Kurlar ---")
          usd = rates_data.get("USD")
          eur = rates_data.get("EUR")

          if usd:
              print(f"1 ABD Doları (USD) = {usd:.4f} TL (Döviz Satış)")
          else:
              print("USD kuru bulunamadı.")

          if eur:
              print(f"1 Euro (EUR)      = {eur:.4f} TL (Döviz Satış)")
          else:
              print("EUR kuru bulunamadı.")
      else:
          print("Döviz kurları alınamadı. Lütfen internet bağlantınızı ve tarihleri kontrol edin.")

      print("\n--- İşlem Tamamlandı ---")