Uygulama geliştirme

Uygulama arka ucu nedir

Uygulama arka ucu, ürünün kullanıcının telefonunda yaşamayan kısmıdır: istekleri alan bir API, verinin kaldığı bir veritabanı ve kimin neyi görmesine izin verildiğine karar veren bir oturum servisi. Telefondaki uygulama karar verici değildir, yalnızca arka ucun izin verdiğini gösterir; bu yüzden tamamen sağlam bir uygulama, sunucu yanıt vermeyi bıraktığında hiçbir şey yapamaz.

  • Ders 6 / 8
  • Başlangıç
  • Ücretsiz, kayıt yok

İki yüz, tek arka uç

Telefondaki uygulama

ürünün görünen yarısı ve kullanıcının onunla yargıladığı yarı

  • Ekranı kurar ve kullanıcı girdisini alır
  • İsteği gönderir ve yanıtı gösterir
  • İçindeki her şey okunabilir
tek ürün, iki farklı yüz

Site ya da yönetim paneli

aynı veri, başka bir kapıdan ve genelde başka biri için

  • Siparişleri görür ve durumlarını değiştirir
  • Erişimi daha geniştir, bu yüzden kuralları da ayrıdır

İkisi de tek bir arka uçla konuşur ve hiçbiri kendi başına karar vermez

Arka uç

kararın verildiği ve verinin gerçekten kaldığı yer

  • API: dışarıya açık tek kapı
  • Veritabanı: siparişler, kullanıcılar, mesajlar
  • Oturum servisi: her isteğin hangi kullanıcıya ait olduğu
  • Dosya saklama: görseller ve ekler, adresleri veritabanında

Bu çizim sadeleştirilmiştir: gerçek bir üründe bu parçaların yanında genelde bir önbellek katmanı ve bir bildirim servisi de durur.

Son kontrol: Bu dersteki bilgiler ve araç adları bu tarihte kaynaklarıyla yeniden doğrulanır.

Arka uç nedir ve uygulamanın yarısı neden orada?

Arka uç, kullanıcının hiç görmediği yarıdır ve o olmadan uygulama yalnızca bir fotoğraf albümüdür. Birkaç kişi arasında paylaşılması, uygulama silindikten sonra da kalması ya da kullanıcının kendi elinde olmaması gereken her şey orada yaşar, telefonda değil.

Tek bir örnek her tanımdan açıktır: bir dükkanın sipariş listesi. Bu liste telefonda saklanırsa telefon değişince kaybolur, aynı kişinin tabletinde görünmez ve uygulama dosyalarını açan biri sayıları değiştirebilir. Bu üç cümle, arka ucun var olma sebebinin tamamıdır.

Telefondaki uygulama pratikte üç şey yapar. Ekranı kurar, kullanıcı girdisini alır ve bir istek gönderir. Karar vermek onun işi değildir. Bu bariz görünür ve yeni projelerde ilk çiğnenen kuraldır: indirimi uygulama hesaplar ve son tutarı gönderir, sonra da aynı isteği herkesin istediği sayıyla gönderebildiği anlaşılır.

Dürüst bölüşme şudur: uygulama gösterir, arka uç karar verir. Uygulama nasıl çalışır yazısını okuduysanız, bu aynı sınırın bu kez sunucu tarafından görünüşüdür.

Uygulama arka ucu nedir, telefondaki uygulamadan farkı ne

Bir arka ucun içinde ne var?

Arka uç tek bir program değil, her biri tek bir iş yapan ve genelde tek bir sunucuda birlikte duran birkaç parçadır.

İlk parça API, uygulamanın içinden geçtiği kapıdır. Uygulama bir adresi çağırır, veri gönderir ve genellikle JSON olan bir yanıt alır. Her adresin ne beklediği ve ne döndürdüğü, uygulamayla sunucu arasındaki sözleşmedir; API nedir yazısı o sözleşmeyi tam olarak açar.

İkinci parça veritabanıdır. Siparişlerin, kullanıcıların ve mesajların gerçekten yazıldığı ve sunucu yeniden başladıktan sonra da kaldığı yer. Uygulama veritabanına asla doğrudan bağlanmamalıdır; çünkü o zaman veritabanı parolasının uygulamanın içinde yaşaması gerekir ve uygulama dosyasını açan herkes ona sahiptir.

Üçüncü parça oturum servisidir. İşi yalnızca parolanın doğru olup olmadığını söylemek değildir; işi sonraki her isteğe yapışıp bu isteğin hangi kullanıcıdan geldiğini söylemektir. Bu yanıt olmadan sunucunun, az önce kimin sipariş listesinin istendiğini bilmesinin yolu yoktur.

Her zaman geç düşünülen dördüncü parça dosya saklamadır. Profil fotoğrafları ve ekler genelde veritabanının içinde durmaz; kendi yerleri vardır ve veritabanında yalnızca adresleri saklanır. O adresin herkese açık mı yoksa imzalı ve geçici mi olduğu başlı başına bir güvenlik kararıdır.

Bütün bunlar, internet nasıl çalışır yazısında alttan anlatılan şeyin üzerinde çalışır: hiç kapatılmayan ve bir adreste bekleyen bir makine.

Sunucu çöktü dendiğinde tam olarak ne oldu?

"Sunucu çöktü" neredeyse hiçbir zaman bilgisayarın kapandığı anlamına gelmez. Bu tek cümlenin altında tamamen farklı üç durum toplanır ve her birinin çaresi başkadır.

Birincisi: istek sunucuya hiç ulaşmadı. Kullanıcının bağlantısı yoktu, alan adı bir adrese çevrilmedi ya da uygulama o adresi vermeyen bir ağda. Sunucu burada tamamen sağlamdır ve birinin onu aradığından haberi bile yoktur.

İkincisi: sunucu yanıt verdi ve yanıtı bir hataydı. Burada durum kodu önemlidir ve iki ailesi vardır. Beş yüzlü, sorunun sunucu tarafında olduğu; dört yüzlü ise isteğin kendisinin bozuk olduğu anlamına gelir. İkisini de "sunucu çöktü" diye gösteren bir uygulama kullanıcıyı boşuna yorar; 401 tekrar giriş yap, 500 otur ve bekle demektir.

Üçüncüsü, ikisinden de yaygını: sunucu gerçekten yanıt verdi ama çok geç. Aradaki bir şeyin sabrı tükendi ve program hâlâ çalışırken bağlantıyı kesti. Uygulama tarafından bakınca bu, kapalı bir sunucudan ayırt edilemez.

Ekiplerin en çok vakit kaybettiği yer üçüncüsüdür, çünkü sabır sayısı genelde kimsenin bakmadığı bir yerde yazılıdır. PHP nin kendi kılavuzu, request_terminate_timeout ayarını anlatırken bunun "tek bir isteğe hizmet verme süresi olduğunu, sonrasında işçi sürecin öldürüleceğini" söyler ve bu seçeneğin max_execution_time betiğin çalışmasını durdurmadığında kullanılması gerektiğini açıkça ekler. Yani iki ayrı dosyada iki sayı yaşar ve son sözü küçük olan söyler.

Uygulama yazan biri için pratik sonuç: gönderdiğiniz her isteğe açıkça bir zaman aşımı verin, hata yanıtlarını metnine göre değil durum koduna göre ayırın ve her aile için farklı bir davranış yazın. Bu, projenin ilk saatinde on dakika alır; atlanırsa aylar sonra hiçbiri yeniden üretilemeyen "uygulama çalışmıyor" bildirimleri olarak geri döner.

Bir istek ve ölebileceği dört yer

Ayırt etmesini sağlamazsanız uygulama bunların hepsini aynı görür.

  1. 1

    Kullanıcının ağı

    İstek telefondan hiç çıkmadı. Sunucunun haberi yok.

  2. 2

    Alan adı çözümlemesi

    Ad bir adrese dönüşmedi. Site kimileri için ayakta, kimileri için değil.

  3. 3

    Sunucu tarafı hatası

    Beş yüzlü kodla bir yanıt geldi. Uygulama sonra tekrar dene demeli.

  4. 4

    Süre doldu

    Program hâlâ çalışıyordu ve bir ayar dosyasındaki sayı onu önce bitirdi.

Bu sıra sabit değildir: bir istek birkaç durağı sağlam geçip sonuncusunda düşebilir.

Hazır arka uç mu almalı, kendimiz mi yazmalıyız?

Üçüncü bir yol daha var ve küçük ekiplerin çoğu sonunda oraya varıyor: hizmet olarak arka uç, yani veritabanını, girişi ve dosya saklamayı hazır teslim eden ve hiç sunucu ayağa kaldırmadığınız bir hizmet. Google un Firebase i ve Supabase iki bilinen örnek.

Satın aldığınız şey kendi belgelerinde açıkça yazılı. Firestore güvenlik kurallarının başlangıç sayfası, bu kuralların "altyapıyı yönetmek ya da sunucu tarafı kimlik doğrulama ve yetkilendirme kodu yazmak zorunda kalmadan" harika bir kullanıcı deneyimi kurmaya odaklanmanızı sağladığını söylüyor. Bu tek cümle bütün tasarrufu anlatıyor: normalde haftalar süren iş, tek bir kural dosyasına dönüşüyor.

Karşılığında verdiğiniz şey de aynı sayfalarda ve daha az okunuyor. Aradaki sunucu ortadan kalkınca uygulama doğrudan veritabanıyla konuşur ve verinizle kötü niyetli bir kullanıcı arasında duran tek şey o kural dosyasıdır. Firebase belgeleri bunu tam olarak şu tonda söylüyor: güvenlik kuralları uygulamanızın dışında tanımlanır, dolayısıyla istemciler güvenliği uygulamaktan sorumlu değildir. Bundan çıkan sonucu hatırlayana kadar rahatlatıcı bir cümle: o dosyadaki her hata, başka hiçbir kodun yakalamayacağı bir hatadır.

Aynı sayfalardaki iki küçük not sonradan pahalıya patlıyor. Birincisi, Firestore basit örnek kural setlerini gösterip altına bu kuralların geçerli olduğunu ama üretim uygulamaları için önerilmediğini yazıyor. İkincisi, sunucu istemci kütüphaneleri bütün güvenlik kurallarını atlıyor ve başka bir yoldan doğrulanıyor. Yani kendi sunucunuzda yazdığınız kod, uygulama için yazdığınız kurallardan muaf.

Kilitlenme sorusunu bizden değil onlardan duymak daha iyi. Supabase mimari sayfasında Postgres veritabanını soyutlamadığını ve ona tam yetkiyle eriştiğinizi yazıyor; ilkelerinde ise kilitlenmeyi önlemek için içeri ve dışarı taşınmayı kolay tuttuğunu, bu yüzden pg_dump ve CSV dosyaları gibi mevcut standartları kullandığını söylüyor. Bu, bir üreticinin kendi ürünü hakkındaki iddiası, bizim ölçümümüz değil; ikisinden de gerçek bir göç yürütmedik ve pratikte ne kadar sürdüğünü söyleyemeyiz.

Bizim durduğumuz yer basit. Tek kişinin yazdığı ve gelecek ay birinin telefonunda olması gereken bir uygulama için hazır arka uç doğru seçimdir; kendi kodumuz diye ısrar etmek yalnızca birkaç aylık gecikme satın alır. İçinde para mantığı olan bir ürün içinse, o mantığın kendi sunucunuzda çalışması gereken bir nokta gelir ve bunu yolun ortasında keşfetmektense ilk gün bilmek daha iyidir.

Hazır arka uca karşı kendi arka ucunuz

Yönetilen hizmet

  • Giriş, veritabanı ve dosya saklama ilk günden çalışır
  • Sunucu tarafı kimlik doğrulama ve yetkilendirme kodu yazmazsınız
  • Bütün veri güvenliği tek bir kural dosyasında toplanır
  • Uygulama doğrudan veritabanıyla konuşur

Kendi arka ucunuz

  • Her para kararı sizin elinizdeki bir sunucuda çalışır
  • API sizin sözleşmenizdir ve biçimini siz belirlersiniz
  • İlk haftalar ekranlar yerine altyapıya gider
  • Sunucu gece devrildiğinde birinin uyanması gerekir

İki sütundan biri kazanmaz; doğrusu üründe ne kadar para mantığı olduğuna ve nöbeti kimin tuttuğuna bağlıdır.

Seçmeden önce kendinize şunları sorun

Arka uç kararı neredeyse hiçbir zaman salt teknik bir karar değildir. Aşağıdaki dört soruyu ciddi ciddi yanıtlayın, cevap kendini gösterir.

Bir: yarın biri, uygulamanızın hiç göndermediği bir istek gönderirse ne olur? Yanıtınız "bizim uygulamamız bunu yapmaz" ise arka ucu henüz düşünmemişsiniz. Uygulamanıza karşı çalışan birinin uygulamanızı kullanma zorunluluğu yok.

İki: hangi sayıları kullanıcı belirlememeli? Fiyat, stok, puan, rol. Bunlardan uygulama tarafından geleni pratikte kullanıcı girdisidir.

Üç: bu hizmeti yarın bıraksanız yanınızda ne gelir? Sağlayıcıya bir suçlama olarak değil, bir alıştırma olarak. Yanıt genelde ürününüzün ne kadarının gerçekten sizin olduğunu gösterir.

Dört: sabahın üçünde sunucuyu kim ayağa kaldırır? Yanıt hiç kimseyse, yönetilen hizmet daha pahalıdır ve ucuz seçenek sayılır.

Ve dördüyle de ilgisi olmayan bir tavsiye: arka ucun ilk satırını yazmadan önce verinin şeklini kağıda çizin. Tablolar ya da koleksiyonlar, alanları ve her satırın kime ait olduğu. Bin kullanıcının verisi girdikten sonra verinin şeklini değiştirmek, projedeki her şeyden pahalıdır. Ekibiniz yoksa ve karar sizden büyüdüyse, RGB uygulama sayfası tam bu aşamayı nasıl ilerlettiğimizi anlatıyor.

Arka uç karar sayfasıilk kod satırından önce

Bunlar kağıtta olsun

  • Tabloların ya da koleksiyonların alanlarıyla listesi
  • Her satırın hangi kullanıcıya ait olduğu
  • Yalnızca sunucunun belirlemesine izin verilen sayılar
  • Her hata ailesi için uygulama davranışı, ayrı ayrı

Bunlar henüz hazır olmadığınızın işareti

  • Veritabanı parolası uygulamanın içinde bir yerde yazılı
  • Son tutarı uygulama hesaplayıp gönderiyor
  • Hiçbir isteğin açık bir zaman aşımı yok
  • Hizmeti bıraksanız geriye ne kalacağını kimse bilmiyor

Yapay zekayla hızlı yol

Modellerin bugün arka uç işinde gerçekten iyi olduğu şey kod yazmak değil, şartnameyi üretmektir. Verinin şeklini ve erişim listesini herhangi bir koddan önce bir modelden alıp kendiniz okursanız, yaygın hataların üçte ikisi doğmadan ölür; kodu sonradan kim yazarsa yazsın.

  1. Ürünün ne yapması gerektiğini teknik terim kullanmadan sade bir dille yazın. Kimler giriyor, ne görüyor, ne oluşturuyor ve neyi değiştiriyor.
  2. Aşağıdaki tarifi ucuz bir modelle değil güçlü bir modelle çalıştırın. Bu geçiş mekanik iş değil muhakemedir; şu anki tercihimiz sitenin yapay zekâ bölümünde.
  3. Erişim tablosunu satır satır okuyun. Programcı olmayan birinin de hatayı görebileceği tek yer burasıdır, çünkü bir kural dilinin sözdizimiyle değil cümlelerle yazılmıştır.
  4. Gereğini tek cümleyle açıklayamadığınız her satırı silin ve yeniden sorun. Modeller tabloyu ihtiyacınızdan daha eksiksiz kurmaya eğilimlidir.

Kopyalamaya hazır şablon

Bu ürünün arka ucunu tasarlıyorum:
{ürünün sıradan dille sade anlatımı}

Hiç kod yazma. Bana üç şey ver, fazlası değil:

1) Verinin şekli: tabloların ya da koleksiyonların listesi, her birinin alanları ve tipleri, ve her satırın hangi kullanıcıya ait olduğu. Yalnızca sunucunun yazabileceği her alanı "yalnızca sunucu" etiketiyle işaretle.

2) Erişim tablosu: her tablo ve her kullanıcı rolü için okuma, oluşturma, güncelleme ve silme sütunları. Her hücreyi "yalnızca kullanıcı kimliğinin satır sahibine eşit olduğu satırlar" gibi tam bir cümleyle doldur. Hiçbir kural sözdizimi ve hiç kod yazma.

3) İstemcinin asla belirlememesi gereken şeylerin listesi, her biri için tek satırlık gerekçesiyle.

Katı kurallar:
- Hiçbir hizmet adı, kütüphane adı, sürüm numarası ve fiyat yazma.
- Yukarıdaki anlatımda olmayan hiçbir alan ekleme; bir boşluk görürsen doldurma, "sormam gereken sorular" adlı ayrı bir listeye yaz.
- Bilmediğin yerde bilmiyorum de. Tahmin etme.

Çıktıya güvenmeden önce: Erişim tablosunu herhangi bir koda dönüşmeden önce kendiniz okuyun ve üç şeyde durun. Birincisi, içinde "giriş yapmış tüm kullanıcılar" cümlesi geçen her hücre: bu neredeyse hiçbir zaman doğru yanıt değildir ve Firestore belgelerinin kendi basit örnek kuralları için uyardığı tam olarak budur. İkincisi, modelin "yalnızca sunucu" diye işaretlemediği ama parayı ya da rolü belirleyen her alan. Üçüncüsü, "sormam gereken sorular" listesini ciddiye alın; yanıtlamazsanız sonradan bir başkasının sizin yerinize tahmin edeceği şeylerin listesidir.

Bu işte yapay zeka

Arka uç, yapay zekâ yardımının en büyük kazancı ve en büyük riski aynı anda taşıdığı yerdir. Kazanç tasarımdadır: verinin şekli, erişim tablosu ve kendi yazdığınız kuralları yeniden okumak. Risk ise, size yardım edebilsin diye modele verdiğiniz şeyin çoğunlukla bir bağlantı dizesi ya da bir hizmet anahtarı olmasıdır.

Gerçekten işe yarayan araçlar

  • Claude Yukarıdaki tasarım geçişi ve erişim tablosunu yeniden okumak için iyi. İran, Anthropic in desteklenen ülkeler listelerinin hiçbirinde yok. Bunu ölçerek değil, Anthropic in kendi sayfasında okuyarak biliyoruz.
  • Claude Code Arka uç tek dosyayı aştığında bir komut satırı aracı projenin kendisi üzerinde çalışır ve sunucu logunu da okur; bu dersteki üçüncü hata ailesinin ihtiyacı tam olarak budur. Aynı Anthropic hesabı üzerinde çalışır ve İran listede yok.
  • Gemini Bir belge sayfasını özetlemek ve daha basit geçişler için uygun maliyetli. Google ın kendi sayfası Gemini web uygulamasının 230 dan fazla ülke ve bölgede çalıştığını söylüyor ve İran o listede yok.

Nerede geri teper

İlk risk basit ve herkes bir kez yapar: veritabanı bağlantı dizesini ya da bir hizmet anahtarını isteme yapıştırmak. Harici bir hizmete gitmiş bir sır artık sır değildir ve sıradan bir API anahtarının aksine, veritabanı bağlantı dizesi doğrudan bütün veriye ulaşır. Basit alışkanlık, ayar dosyasını hiç kopyalamamak ve değerin yerine değişkenin adını yazmaktır.
İkinci risk daha incedir ve doğrudan Firebase in kendi belgelerinden çıkar: sunucu istemci kütüphaneleri bütün güvenlik kurallarını atlar ve bunun yerine Google Application Default Credentials üzerinden doğrulanır. Yani bir modelden kod isterseniz ve o sunucu tarafı bir örnek yazarsa, o kod saatlerinizi verdiğiniz kurallardan muaftır ve hiçbir hata görmezsiniz. Bir modelden arka uç kodu her aldığınızda önce şuna bakın: bu parça hangi kütüphane üzerinden konuşuyor.

Kaynaklar: Firebase: get started with Cloud Firestore Security Rules Firebase Security Rules: how they work and where they are defined Anthropic: supported countries Google: where Gemini Apps are available

Bu tavsiyenin sınırı

Bu ders arka ucun şeklini anlatır, nasıl kurulacağını değil. Bilerek dışarıda bırakılan üç şey: birkaç bin kişi aynı anda çalışırken ölçeklenme, iki yolun da gerçek maliyeti ve veritabanının kendi tasarımı. Maliyet için hiçbir sayı vermiyoruz; kullanıma bağlıdır ve buraya yazılacak her sayı yarın yanlış olur. Daha dürüst bir sınır da şu: gerçek bir ürünü yönetilen bir arka uç hizmetinden kendi sunucumuza taşımadık, dolayısıyla bunun zorluğu hakkında söylenen her şey bizim ölçümümüz değil üreticilerin kendi sözlerinin aktarımıdır.

Kendi işimizden

Bu dersteki üçüncü durum, yani "sunucu yanıt verdi ama çok geç", size bu sayfayı veren sunucunun kendisinde gösterilebilir. İki ayar dosyasını da bugün açtık. /www/server/php/85/etc/php.ini dosyasının 404. satırında max_execution_time = 900 yazıyor, /www/server/php/85/etc/php-fpm.conf dosyasının 40. satırında ise request_terminate_timeout = 180. Yani PHP ayarları on beş dakika diyen bir sitede isteği gerçekten bitiren şey üç dakika ve o sayı kimsenin genelde açmadığı başka bir dosyada yaşıyor. Böyle bir sunucuyla konuşan bir uygulama için bu, ağır bir işlemin programdan hiçbir mesaj gelmeden üçüncü dakikada bitebileceği ve kullanıcının yalnızca "sunucu çöktü" göreceği anlamına gelir. Yavaş bir API yi incelerken ilk baktığımız yer bu tek uyuşmazlıktır.

Gerçek devam soruları

Arka ucu olmayan bir uygulama mümkün mü?

Evet, hem de sandığınızdan sık. Bir hesap makinesi, bir kelime kartı uygulaması, çevrimdışı araçlar ve verisi yalnızca o telefona ait olan her uygulama arka uca ihtiyaç duymaz. Gerekli olduğu an, iki cihazın aynı şeyi görmesi gerektiği ya da verinin uygulama silindikten sonra da kalması gerektiği andır.

Uygulama, sitenin arka ucunu kullanabilir mi?

Genelde evet ve bu çoğu zaman doğru seçimdir, ama sitenin kullandığı kapıların aynısından değil. Site çerezler ve formlarla çalışır; uygulamaysa token ile çalışan ve JSON yanıt veren bir API ister. Yani aynı veritabanı ve aynı mantık, yeni bir giriş katmanıyla.

Önce uygulamayı mı yoksa arka ucu mu kurmalı?

Hiçbiri. Önce aralarındaki sözleşmeyi yazın, yani her birinin girdi ve çıktısıyla adreslerin listesini. Ondan sonra iki kişi paralel çalışabilir ve bağlanma anı bir tartışmaya dönüşmez; o olmadan bir taraf hep diğerini bekler.