REST API Nedir? RESTful Web Servisleri Rehberi
REST (REpresentational State Transfer), dağıtık sistemler, özellikle de web servisleri tasarlamak için kullanılan bir mimari stildir. Bir protokol değil, bir dizi kural ve kısıtlamadır. Bu kurallara uyan API'lere "RESTful" API denir. REST, internetin temelini oluşturan HTTP protokolünün prensiplerinden yararlanarak basit, ölçeklenebilir ve güvenilir web servisleri oluşturmayı amaçlar.
REST Mimarinin Temel Prensipleri
Bir API'nin RESTful olarak kabul edilebilmesi için altı temel prensipe uyması gerekir:
- İstemci-Sunucu Mimarisi (Client-Server): İstemci (kullanıcı arayüzü) ve sunucu (veri depolama) birbirinden tamamen ayrılmıştır. Bu ayrım, her iki tarafın da bağımsız olarak geliştirilmesine ve ölçeklenmesine olanak tanır.
- Durumsuzluk (Stateless): Sunucu, istemciden gelen her isteği, önceki isteklerden bağımsız olarak ele alır. Her istek, işlenmesi için gereken tüm bilgileri (kimlik doğrulama, parametreler vb.) içermelidir. Sunucu, istemci oturum bilgilerini saklamaz.
- Önbelleklenebilirlik (Cacheable): Performansı artırmak için istemciler veya aracı sistemler, sunucudan gelen yanıtları önbelleğe alabilir. Sunucu, yanıtın önbelleğe alınıp alınamayacağını belirtmelidir.
- Tek Tip Arayüz (Uniform Interface): İstemci ve sunucu arasındaki iletişimi basitleştiren ve standartlaştıran en önemli prensiptir. Dört alt kısıtlaması vardır:
- Kaynakların Tanımlanması: Her kaynak (örneğin, bir kullanıcı) URI (Uniform Resource Identifier) ile benzersiz bir şekilde tanımlanır (örn.
/users/123). - Temsiller Aracılığıyla Kaynakların Manipülasyonu: İstemci, bir kaynağın durumunu (temsilini), genellikle JSON veya XML formatında alır ve bu temsili kullanarak kaynağı değiştirebilir.
- Kendi Kendini Tanımlayan Mesajlar: Her mesaj, nasıl işleneceğini anlamak için yeterli bilgiyi içermelidir (örn. MIME türü:
application/json). - HATEOAS (Hypermedia as the Engine of Application State): Yanıtlar, istemcinin bir sonraki adımı atabilmesi için ilgili diğer kaynaklara bağlantılar (hyperlink) içermelidir.
- Kaynakların Tanımlanması: Her kaynak (örneğin, bir kullanıcı) URI (Uniform Resource Identifier) ile benzersiz bir şekilde tanımlanır (örn.
- Katmanlı Sistem (Layered System): İstemci, doğrudan sunucuya mı yoksa bir aracıya mı (yük dengeleyici, önbellek sunucusu vb.) bağlandığını bilemez. Bu, mimariye güvenlik ve ölçeklenebilirlik katmanları eklemeyi kolaylaştırır.
- İsteğe Bağlı Kod (Code on Demand - Opsiyonel): Sunucu, istemcinin işlevselliğini, genellikle JavaScript gibi betikler göndererek geçici olarak genişletebilir.
Standart HTTP Metotları
RESTful API'ler, kaynaklar üzerinde işlem yapmak için standart HTTP fiillerini kullanır:
- GET: Bir veya daha fazla kaynağı okumak/almak için kullanılır. Güvenli ve etkisiz (idempotent) bir işlemdir.
- POST: Yeni bir kaynak oluşturmak için kullanılır. Etkisiz değildir (her istek yeni bir kaynak oluşturabilir).
- PUT: Mevcut bir kaynağı tamamen güncellemek için kullanılır. Etkisizdir (aynı isteği tekrarlamak aynı sonucu verir).
- PATCH: Bir kaynağı kısmen güncellemek için kullanılır.
- DELETE: Bir kaynağı silmek için kullanılır. Etkisizdir.
HTTP Durum Kodları
API, isteğin sonucunu bildirmek için standart HTTP durum kodlarını kullanmalıdır:
- 2xx (Başarılı):
200 OK,201 Created,204 No Content - 3xx (Yönlendirme):
301 Moved Permanently - 4xx (İstemci Hatası):
400 Bad Request,401 Unauthorized,403 Forbidden,404 Not Found - 5xx (Sunucu Hatası):
500 Internal Server Error,503 Service Unavailable
REST API Tasarımında En İyi Uygulamalar
- Anlaşılır URI'lar Kullanın: Kaynakları temsil etmek için fiiller yerine isimler kullanın (
/getUsersyerine/users). - Sürümlendirme (Versioning): API'nizde yapacağınız köklü değişiklikler için sürümlendirme kullanın (örn.
/api/v1/users). - JSON Kullanın: Veri alışverişi için hafif, okunabilir ve diller arası uyumlu olan JSON formatını tercih edin.
- Güvenliği Sağlayın: Hassas verileri korumak için HTTPS kullanın. Kimlik doğrulama ve yetkilendirme için OAuth 2.0 veya JWT gibi standartları benimseyin.
Sonuç
REST, web'in çalışma şekliyle uyumlu, basit ve güçlü bir mimari stil sunar. Bu prensipleri anlamak ve doğru bir şekilde uygulamak, farklı platformlar ve uygulamalar arasında sorunsuz bir şekilde iletişim kurabilen, bakımı kolay, ölçeklenebilir ve güvenilir web servisleri oluşturmanın anahtarıdır.