SOAP, makineler arası mesajlaşma için tanımlanmış bir protokoldür. W3C tarafından standartlaştırılmıştır. Her istek, Envelope adlı bir XML zarfının içinde gönderilir. Zarfın içinde isteğin başlığı (Header) ve gövdesi (Body) bulunur. Yanıt da aynı yapıda döner.
WSDL nedir?
WSDL, bir SOAP servisinin "kullanım kılavuzudur". Hangi işlemlerin olduğunu, her işlemin hangi alanları beklediğini ve ne döndürdüğünü XML ile tanımlar. Geliştirici araçları WSDL dosyasını okuyarak istek şablonlarını otomatik üretebilir.
Gerçek örnek: N11 ürün soruları
N11'in ürün soruları servisi yalnız SOAP olarak sunulur. Saystok'un N11 bağlantısı soru-cevap için ProductService adlı servisi kullanır. Servisin tanımı https://api.n11.com/ws/ProductService.wsdl adresindedir. İstekte dikkat edilen noktalar:
- Content-Type başlığı text/xml olur ve bir SOAPAction başlığı bulunur.
- Kimlik bilgileri başlıkta değil, gövdedeki auth bloğunda gönderilir: appKey ve appSecret alanları.
- Soru listesi için GetProductQuestionListRequest, cevap için SaveProductAnswerRequest işlemi kullanılır.
- Sayfalama bilgisi pagingData bloğunda currentPage ve pageSize alanlarıyla verilir.
REST ile farkı
| Konu | SOAP | REST |
|---|---|---|
| Biçim | Her zaman XML | Çoğunlukla JSON |
| Tanım | WSDL ile katı sözleşme | Dokümantasyon, bazen OpenAPI |
| Hata | SOAP Fault mesajı | HTTP durum kodu ve gövde |
| Mesaj boyutu | Büyük; zarf ve ad alanları ekler | Küçük |
Sık hatalar
- XML'de özel karakterlerin kaçırılmaması. Cevap metnindeki & ya da < karakteri kaçırılmazsa istek bozulur.
- Ad alanının (namespace) yanlış yazılması.
- Tarih alanının servisin beklediği biçimde gönderilmemesi.
- WSDL değiştiği hâlde eski istek şablonlarıyla çalışmaya devam etmek ve uzun yanıtlarda zaman aşımını çok kısa tutmak.
- Hata ayrıntısının HTTP kodunda değil, yanıt gövdesindeki Fault ya da sonuç alanında olması; yalnız HTTP koduna bakan kod hatayı kaçırır.
SOAP eski bir teknoloji gibi görünse de bankacılık, kamu ve bazı pazaryeri servislerinde hâlâ kullanılır. N11'de REST ile SOAP'ın birlikte nasıl kullanıldığı N11 API rehberinde anlatılır.


