Mehmet

WFN Üye
Konular
1,193
Mesajlar
1,194
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
Web API yazmak için önce istemci ile sunucu arasındaki sözleşmeyi tasarlayın; ardından HTTP isteklerini karşılayan uç noktaları, doğrulama kurallarını, yetki kontrollerini ve tutarlı yanıtları uygulayın. Basit bir API için kaynakları belirleyip HTTP metotlarını bu kaynakların işlemlerine eşleyebilir, JSON kullanabilir ve her isteğin sonucunu uygun HTTP durum koduyla bildirebilirsiniz.

Web API nasıl çalışır?​


İstemci; tarayıcı, mobil uygulama veya başka bir sunucu olabilir. İstemci bir HTTP isteği gönderir. İstek; metot, hedef adres, başlıklar ve gerekiyorsa gövde içerir. Sunucu isteği alır, kimlik ve yetki kontrollerini yapar, veriyi doğrular, iş mantığını çalıştırır ve bir HTTP yanıtı döndürür. Yanıtta durum kodu, başlıklar ve çoğu JSON tabanlı API'de veri veya hata açıklaması bulunur.

HTTP metodu yalnızca URL'deki eylem adını tekrar etmemelidir. Örneğin GET veri okumak, POST yeni bir işlem veya kayıt oluşturmak, PUT bir kaynağın mevcut durumunu bütünüyle değiştirmek, PATCH kısmi değişiklik uygulamak ve DELETE kaynağı kaldırmak için kullanılabilir. GET ile veri değiştirmek doğru değildir; önbellekleme, tekrar çalıştırma ve güvenlik kontrolleri açısından beklenmeyen sonuçlar doğurabilir.



Durum kodu istemcinin yalnızca metin mesajına güvenmeden karar vermesini sağlar. Geçersiz veya bozuk istek yapısı için 400 Bad Request, gerekli kimlik bilgilerinin eksik veya geçersiz olduğu istek için 401 Unauthorized, sunucunun isteği anlayıp yerine getirmeyi reddettiği işlem için 403 Forbidden, bulunamayan kaynak için 404 Not Found kullanılabilir. 403 tek başına kullanıcının kimliğinin doğrulandığını kanıtlamaz. İstek söz dizimsel olarak doğru olduğu hâlde gönderilen alanlar iş kuralını karşılamıyorsa 422 Unprocessable Content uygun olabilir. Beklenmeyen sunucu sorunları 5xx sınıfında olmalıdır.

Yerelde çalışan küçük API örneği​


Node.js kurulu bir bilgisayarda aşağıdaki kodu server.cjs olarak kaydedin. Örnek, ek paket gerektirmeden yalnızca görev listeleme uç noktasını uygular:

Kod:
const http = require('node:http');
const tasks = [{ id: 42, title: 'Yedeklemeyi kontrol et', completed: false }];

http.createServer((req, res) => {
  const send = (status, data, headers = {}) => {
    res.writeHead(status, {
      'Content-Type': 'application/json; charset=utf-8', ...headers
    });
    res.end(JSON.stringify(data));
  };
  const pathname = (req.url || '').split('?')[0];
  if (pathname !== '/api/tasks') {
    return send(404, { error: 'not_found' });
  }
  if (req.method !== 'GET') {
    return send(405, { error: 'method_not_allowed' }, { Allow: 'GET' });
  }
  send(200, tasks);
}).listen(3000, '127.0.0.1');

Terminalde node server.cjs çalıştırın; başka bir terminalde curl -i http://127.0.0.1:3000/api/tasks ile yanıtı inceleyin. Beklenen sonuç 200 ve bir JSON dizisidir. Bilinmeyen yol 404, desteklenmeyen metot 405 döndürür.

Bu öğrenme örneği yalnızca yerel arayüzü dinler; kimlik doğrulama, kalıcı veritabanı veya yazma işlemi içermez. İnternete açılacak üretim servisine dönüşmesi için aşağıdaki kontroller ayrıca uygulanmalıdır. Yeni kayıt oluşturmayı eklediğinizde gövdeyi doğrulayın; kayıt gerçekten oluşturulduktan sonra 201 Created ve oluşturulan kaydı gösteren bir yanıt kullanın.

Örneğin görev uygulamasında tasks kaynağı şöyle tasarlanabilir:
İşlemMetotUç noktaTipik yanıt
ListelemeGET/api/tasks200 OK
OluşturmaPOST/api/tasks201 Created
Kısmi güncellemePATCH/api/tasks/42200 OK veya 204 No Content
SilmeDELETE/api/tasks/42204 No Content

Uygulama adımları​

  1. Kullanıcı senaryolarını ve kaynakları yazın. Örneğin görev listeleme, tek görev görüntüleme, oluşturma, güncelleme ve silme işlemlerini ayırın.
  2. Uç noktaları ve metotları tanımlayın. /api/createTask yerine kaynak odaklı POST /api/tasks kullanın.
  3. İstek ve yanıt sözleşmesini belirleyin. Zorunlu alanları, veri tiplerini, uzunluk sınırlarını, hata biçimini, sayfalama ve filtreleme kurallarını belgeleyin.
  4. Yönlendirme, doğrulama, iş mantığı, veri erişimi ve hata yönetimini ayrı katmanlar hâlinde düzenleyin.
  5. Gelen tüm veriyi sunucuda doğrulayın. İstemci tarafındaki JavaScript kontrolleri kullanıcı deneyimine yardımcı olur; güvenlik veya veri bütünlüğü için tek başına yeterli değildir.
  6. Kimlik doğrulama ile yetkilendirmeyi ayrı uygulayın. Giriş yapmış olmak, kullanıcının başka bir kullanıcıya ait /api/tasks/42 kaydını okuyabileceği veya değiştirebileceği anlamına gelmez.
  7. HTTPS kullanın, sırları kaynak koduna veya istemciye gömmeyin ve API anahtarlarını günlük kayıtlarına yazmayın.
  8. Her nesne erişiminde sahiplik veya rol kontrolü yapın. Kullanıcının URL'de başka bir kimlik göndermesi, o nesne üzerinde işlem yapmaya yetkili olduğunu kanıtlamaz.
  9. Büyük istek gövdeleri, pahalı sorgular, toplu işlemler ve art arda gelen istekler için uygun kaynak ve hız sınırları koyun.
  10. Başarılı, hatalı ve yetkisiz senaryoları otomatik testlerle sınayın. Eksik alan, bozuk JSON, bulunamayan kayıt, başka kullanıcıya ait kayıt ve tekrar gönderilen istekleri özellikle test edin.

Bakım ve sık yapılan hatalar​


İlk sürümde az sayıda ve net uç nokta oluşturun. Listeleme uç noktalarında sayfalama, filtreleme ve sıralama sınırlarını baştan tanımlayın; istemcinin sınırsız veri çekmesine izin vermeyin. Yanıt sözleşmesini değiştirirken mevcut istemcileri bozmayacak şekilde yeni alanları geriye dönük uyumlu ekleyin. Kırıcı değişiklik gerekiyorsa sürümleme ve kaldırma takvimini belgelendirin.

Yaygın hatalar her durumda 200 OK döndürmek, doğrulamayı yalnızca tarayıcıda yapmak, kimlik doğrulamayı yetkilendirme sanmak, istemcinin gönderdiği alanları doğrudan veritabanı modeline aktarmak ve tüm iç alanları yanıta koymaktır. Parolalar, gizli belirteçler ve istemcinin ihtiyacı olmayan kişisel veya dahili alanlar yanıta alınmamalıdır.

Bir diğer hata da dış servisten gelen veriyi otomatik olarak güvenilir kabul etmektir. Harici API yanıtlarını da şema, boyut, zaman aşımı ve hata davranışı açısından kontrol edin. API dokümantasyonunu gerçek davranışla eşleştirin; dokümanda bulunan fakat sunucuda çalışmayan bir uç nokta istemci tarafında doğrudan entegrasyon sorununa dönüşür.

Sık sorulan sorular​


API dokümantasyonu ne zaman hazırlanmalıdır?​


İlk uç nokta kodlanmadan önce temel sözleşme hazırlanmalıdır. URL, metot, istek alanları, yanıt örnekleri, durum kodları ve yetki gereksinimleri önceden yazılırsa istemci ve sunucu ekipleri farklı varsayımlarla ilerlemez.

API'de mutlaka JWT kullanmak gerekir mi?​


Hayır. Kimlik doğrulama yöntemi uygulamanın istemci türüne, tehdit modeline ve mevcut kimlik altyapısına göre seçilir. JWT yalnızca bir seçenektir; kullanılacak yöntemin saklama, yenileme, iptal ve yetki kapsamı kuralları ayrıca tasarlanmalıdır.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic