İstemci-sunucu ve sunucu-sunucu arasında popüler olan bu üç adet iletişim formunu ne zaman seçileceği her zaman zor bir karar olmuştur. Kısaca yeteneklerini, avantaj ve dezavantajlarını özetlemek iyi olabilir.
REST, eski dost
Yetenekler;
- HTTP yolları veriyi tanımlar
- Kolayca keşfedilebilir veri seti, örneğin tüm CRUD (create, read, update, delete) operasyonları HTTP yolları ile tanımlanabilir
- POST/PUT genelde veri oluşturmak, GET okumak, POST/PUT güncelleme ve DELETE silmek için kullanılır
- Genel kullanımda id ile POST yapmak varolan veriyi günceller. id kullanılmadan POST yapmak ise yeni veri ekler.
- id ile PUT ise bu iki işlemi birleştirir. id varsa o verinin üzerine yazar, yoksa yeni veri oluşturur.
Avantajlar;
- Öğrenmesi ve uygulaması kolay
- RFC 2616'da iyice tanımlanmış yaygın HTTP fiilerini kullanır
- Hata ayıklama yapması kolay ve pratik. Modern web tarayıcılarının "inspect" araçları, Wireshark gibi araçlar kullanılabilir.
Dezavantajları;
- Verimsiz. Tüm API'ler her kullanım durumu için yeniden yazılmalıdır.
- JSON çıktısı büyüktür, yeterince sıkıştırılamaz ve tekrarlı veri içerebilir.
(g)RPC, orada bir fonksiyon var uzakta
Yetenekler;
- Mikro servis mimarisine geçmeyi teşvik eder.
- Genelde protobuf nesneleri kullanır.
- Servisler protobuf olarak tanımladıktan sonra sunucu uygulaması yapılır.
- İstemci kütüphaneleri her dil için protobuf kodlarından türetilir.
Avantajlar;
- Polygot (çok dilli)
- Protobuf verinin transferi aşamasında verimlidir.
- Yenilenme, ağ sorunları gibi durumları otomatik olarak çözmeye çalışır.
- İstemci ve sunucu kodunu yazdığınız/kullandığınız dilde üretir. Mühendislik zamanını düşürür.
Dezavantajları;
- Ağ üzerinden araya girilerek takip etmek, okunması zordur.
- Tüm API'ler her kullanım durumu için yeniden yazılmalıdır.
GraphQL, gönder gelsin
Yetenekler;
- Tüm işlemler için POST kullanılır.
- Tek bir HTTP yolu vardır.
- JSON içerisinde tanımlanan, sorgu ve mutasyon olarak tanımlanan iki farklı operatörü vardır.
- Sorgu ile veriler okunur.
- Mutasyon ile yeni veri ekleme, güncelleme ve silme yapılabilir.
- Sorgulanan veri alanları, istemciden sunucuya iletilen HTTP isteğinde yer alır.
- Bu veri alanları sunucuda değerlendirilip, cevap olarak iletilir.
- Veri yapıları GraphQL şemalarında ön tanımlıdır.
Avantajlar;
- REST ve gRPC'deki fazla veya eksik veri getirme sorununu çözer.
- Sadece istenen alanlardaki veri içeriğini gönderir.
Dezavantajları;
- Sorgular hep 200 OK durum kodu ile döndüğü için hatalar gizlenmiş olabilir. Bu durumları incelemek ve yönetmek için daha karmaşık bir istemci mantığı uygulanmalıdır.
- JSON çıktısı kullandığı için yine de cevap boyutu büyüktür.