Web Servis Nedir — SOAP ve RESTful Servisler
Api Nedir?
Öncelikle API’nin ne olduğundan bahsedelim. Bir uygulamanın/servisin sahip olduğu yeteneklerin dışarıdan da kullanılabilmesini sağlayan yapıya API diyoruz. Daha basit ifade etmek gerekirse A uygulamasının, belli yetki kısıtları dahilinde, B uygulaması tarafından da kullanılmasını istiyorsak API ismini verdiğimiz yapıya ihtiyaç duyuyoruz.
API’nin ne olduğunu detaylarıyla anlamak için bazı başlıklara göz atmamız gerekiyor:
1- TCP Protokolü
2- HTTP Protokolü
3- SOAP Web Servis(API)
4- Restful Web Servis(API)
TCP Protokolü
TCP, IP yani İnternet Protokollerinden biridir. Bilgisayarlar arasında veri aktarımı yapılmasını sağlama amacıyla yazılmış bir protokoldür.
TCP protokülünün çalışmasını 3 adımda özetleyebiliriz:
1- Hedef ile bir bağlantı gerçekleştir.
2- Veri paketini gerçekleştirilen bağlantı üzerinden transfer et.
3- Verinin transferi tamamlanınca bağlantıyı sonlandır.
TCP yapısı ile çalışan bir çok protokol mevcuttur. Mesela adını sıkça duyduğumuz HTTP, HTTPS, SMTP ve FTP veri iletim protokolleri TCP ile çalışmaktadır. Web servisler HTTP protokolü üzerinden çalıştığı için bu yazıda bundan bahsedeceğiz.
HTTP Protokolü
Hyper Text Transfer Protocol, kısaca HTTP 1990 yılından beri internet üzerinde kullanılan iletişim protokolüdür. Web sayfalarının görüntülenmesi HTTP protokolü sayesinde gerçekleşir. İstemci (genellikle web browserlar aracılığıyla) sunucuya bir istek gönderir. Sunucu aldığı bu isteğe web sunucu programları aracılığıyla bir yanıt verir.
İstemcinin sunucuya gönderdiği isteğin (request) yapısında 4 ana başlık bulunur:
1- Request Method: GET, POST, HEAD, PUT, DELETE, TRACE.
2- URL: Sunucudan talep edilen web sayfası veya servisin adresi.
3- Protokol: HTTP 1.1, HTTP 1.2 gibi
4- Host bilgisi (istekte bulunulan sunucunun IP adresi veya domain adı)
İstemci bazen sunucuya kendisiyle ilgili bilgi de göndermek isteyebilir. Bu durumda header alanı kullanılır. Örnek vermek gerekirse yetki gerektiren bir sayfaya girerken header alanında kullanıcı adı/şifre veya authorization tokeni gönderilebilir. Headerda gönderilen veriler key-value eşleştirmesi şeklinde gönderilir.
Sunucunun istemciye gönderdiği yanıtın (response) yapısı da şu şekildedir:
1- Protokol bilgisi (HTTP 1.1, HTTP 1.2 gibi)
2- Yanıtın statüsüyle ilgili bilgi içeren bir sayı (1xx, 2xx, 3xx…)
3- Response içeriği
4- Response’a dair birçok bilgi gönderilebilir
Şimdi gelelim HTTP protokolü üzerinden haberleşen web servislere, yani API’lere.
SOAP (Simple Object Access Protocol)
Uygulamaların HTTP protokolü üzerinden haberleşmesini sağlayan, XML tabanlı mesajlar içeren servis protokolüdür.
Bir SOAP mesajının yapısında şunlar bulunur:
1- Envelope: Tüm SOAP istek ve cevaplarının bilgileri bu kısımdadır. XML yapısının root elemanı diyebiliriz. Header ve body kısımları envelope etiketinin içerisinde olmalıdır.
2- Header: Meta-data gibi bilgileri iletmeye yarar, her zaman kullanılmak zorunda değildir.
3- Body: Bir soap mesajında mutlaka bulunur. Yapılan isteğin içeriği XML formatında bu kısımda iletilir ve sunucudan gelen yanıt da yine body kısmında XML olarak döndürülür.
4- Fault: Yapılan isteğin sonucunda dönen hata ve hatanın durumunu içerir.
Farkettiğiniz üzere SOAP söz konusu olduğunda sürekli XML’den bahsettik. SOAP bizi XML tabanlı mesajlaşmaya mecbur bırakır. Bu konuda esnek değildir.
REST (Representational State Transfer):
REST, HTTP protokolünü kullanan bir mesajlaşma yöntemidir ve istemci ile sunucu arasında haberleşmeyi sağlayan günümüzde kullanılan en basit yöntem denilebilir.
Rest mimarisinde yapılan işlemler resource(kaynak) kavramıyla yapılır ve bu resourcelar URI ile tanımlanır. Rest servisler de URI’ler ile doğrudan HTTP metodlarıyla istek yapar, SOAP gibi bir WDSL’e gerek yoktur. Bir diğer önemli fark ise SOAP’ta sadece XML üzerinden mesajlaşma yapılırken Rest servisinde başta JSON olmak üzere, XML, hatta Text formatında bile data iletilebilir.
Rest servisler yardımıyla veritabanında CRUD işlemleri yapabiliriz. Bunun için HTTP metodları kullanılır:
GET -> Select
POST -> Insert
PUT veya PATCH -> Update
DELETE -> Delete
REST mimarisini sınırlarını belirleyen bazı kısıtlar(prensipler) vardır. Bu prensiplere uygun yazılmış bir web servise Restful Web Servis denir. Rest mimarisinin kısıtları 6 başlıktan oluşmaktadır:
1- Client-server mimarisi: “Seperation of Concerns” prensibinden bahsedilen bu yapıda client(istemci) ile serverın(sunucu) birbirinden ayrı olmasından bahsedilir. Client, server tarafındaki veri kaynağı hakkında hiçbir bilgiye sahip değildir ve sunucu da doğru istekler geldiği sürece doğru yanıt verir.
2- Stateless: Server tarafında client ile ilgili bilgi içeren bir context veya session tutulmaz. Bu durumda clientın yaptığı her requestin içinde serverın yanıt verebilmesi için gerekli tüm bilgi mevcuttur. Bu konu Scalability açısından önemlidir çünkü server state’i saklamak zorunda değildir ve kaynak yönetimini kolaylaştırır.
Stateless yapının dezavantajları olduğunu da söylemeliyiz. Client yaptığı her requeste gerekli bilgileri eklediği için network trafiği artar.
3- Cacheable: Client, kendisine gelen HTTP response’larını cache’leyebilir, o yüzden server gönderdiği responseların cachelenebilir olup olmadığını belirtmelidir, bu performans açısından önemlidir.
4- Uniform interface: Client-server arasında mesajlaşırken kullanılan arayüzün ortak ve tek biçimli olması Rest mimarisinin önemli prensiplerinden biridir. Bu iletişimin ortak, basit ve anlaşılabilir hale gelmesini sağlar.
5- Layered system: Katmanlı sistemden kast edilen şey, client’ın hangi katmana yani son server’a mı yoksa aracı bir servera mı bağlandığını bilmiyor olmasıdır. Her katman sadece tek bir katmanı bilir. Aracı serverların load-balancing yaparak scalability sağlaması için bu yapı gereklidir.
6- Code on demand: Server bazı durumlarda client tarafındaki fonksiyonaliteyi artırmak için executable scriptler gönderebilir. Bu opsiyonel bir özelliktir.
Yazılan bir web servis code on demand harici tüm prensipleri taşıyorsa ona Restful Web Servis denir.
Farklı beklentilere göre SOAP ve REST web servisleri kullanılabilmektedir. Ancak birçok açıdan avantaj sağlaması sebebiyle günümüzde REST servisleri daha yaygın kullanılmaktadır.
Verdiğim eğitimler ve hizmetleri incelemek isterseniz web sitemi ziyaret edebilirsiniz.