SOAP Web Hizmetleri Eğitimi: SOAP Protokolü Nedir? ÖRNEK

SABUN nedir?

SOAP, HTTP üzerinden web servislerine erişim için XML tabanlı bir protokoldür. Tüm uygulamalarda kullanılabilecek bazı özelliklere sahiptir.

SOAP, Basit Nesne Erişim Protokolü olarak bilinir, ancak daha sonraları sadece SOAP v1.2 olarak kısaltılmıştır. SOAP bir protokoldür veya başka bir deyişle web servislerinin birbirleriyle veya onları çağıran istemci uygulamalarıyla nasıl konuştuğunun bir tanımıdır.

SOAP, çeşitli programlama dilleri üzerine kurulu uygulamaların birbirleriyle kolayca konuşabilmesi ve aşırı geliştirme çabalarından kaçınabilmesi için bir ara dil olarak geliştirildi.

SABUN Giriş

Günümüz dünyasında farklı programlama dilleri üzerine kurulu çok sayıda uygulama bulunmaktadır. Örneğin, tasarlanmış bir web uygulaması olabilir. Java, diğeri .Net'te ve diğeri PHP.

Uygulamalar arasında veri alışverişi, günümüzün ağ dünyasında hayati öneme sahiptir. Ancak bu heterojen uygulamalar arasındaki veri alışverişi karmaşık olacaktır. Bu veri alışverişini gerçekleştirmek için gereken kodun karmaşıklığı da öyle olacaktır.

Bu karmaşıklığı ortadan kaldırmak için kullanılan yöntemlerden biri, uygulamalar arası veri alışverişinde ara dil olarak XML (Genişletilebilir İşaretleme Dili) kullanmaktır.

Her programlama dili XML biçimlendirme dilini anlayabilir. Bu nedenle XML, veri alışverişinin temelini oluşturan araç olarak kullanıldı.

Ancak veri alışverişi için tüm programlama dillerinde XML kullanımına ilişkin standart özellikler yoktur. SOAP yazılımının devreye girdiği yer burasıdır.

SOAP, HTTP üzerinden XML ile çalışmak ve tüm uygulamalarda kullanılabilecek bir tür spesifikasyona sahip olmak üzere tasarlanmıştır. SOAP protokolü hakkında daha fazla ayrıntıyı sonraki bölümlerde ele alacağız.

SABUNUN AVANTAJLARI

SOAP, uygulamalar arasında veri alışverişi için kullanılan protokoldür. Aşağıda SOAP'ın neden kullanıldığına dair bazı nedenler verilmiştir.

  • SOAP tabanlı Web servisleri geliştirirken, web servislerinin istemci uygulamalarıyla konuşması için kullanılabilecek bir dile sahip olmanız gerekir. SOAP bu amaca ulaşmak için geliştirilmiş mükemmel bir araçtır. Bu protokol aynı zamanda tüm web standartlarının yönetim organı olan W3C konsorsiyumu tarafından da önerilmektedir.
  • SOAP, uygulamalar arasında veri alışverişi için kullanılan hafif bir protokoldür. ' anahtar kelimesine dikkat edinışık.' SOAP programlama, kendisi de hafif bir veri değişim dili olan XML diline dayalı olduğundan, SOAP da aynı kategoriye giren bir protokol olarak kabul edilir.
  • SOAP platformdan bağımsız olacak şekilde tasarlanmıştır ve aynı zamanda işletim sisteminden bağımsız olacak şekilde tasarlanmıştır. Böylece SOAP protokolü her iki platformda da herhangi bir programlama dili tabanlı uygulamayı çalıştırabilir. Windows ve Linux platformu.
  • HTTP protokolü üzerinde çalışır –SOAP, tüm web uygulamaları tarafından kullanılan varsayılan protokol olan HTTP protokolü üzerinde çalışır. Bu nedenle, SOAP protokolü üzerine kurulu web servislerinin World Wide Web'de çalışacak şekilde çalıştırılması için gerekli olan herhangi bir özelleştirme yoktur.

SABUN Yapı Taşları

SOAP spesifikasyonu "olarak bilinen bir şeyi tanımlar"SABUN mesajı” web hizmetine ve istemci uygulamasına gönderilen şeydir.

Aşağıdaki SOAP mimarisi diyagramı, bir SOAP Mesajının çeşitli yapı taşlarını göstermektedir.

SABUN Yapı Taşları
SOAP Mesajı Yapı Taşları

SOAP mesajı, aşağıdaki bileşenlere sahip basit bir XML belgesinden başka bir şey değildir.

  • XML belgesini bir SOAP mesajı olarak tanımlayan bir Zarf öğesi – Bu, SOAP mesajının içeren kısmıdır ve SOAP mesajındaki tüm ayrıntıları kapsüllemek için kullanılır. Bu, SOAP mesajındaki kök öğedir.
  • Başlık bilgisi içeren bir Başlık öğesi – Başlık öğesi, çağıran uygulama tarafından kullanılabilen kimlik doğrulama bilgileri gibi bilgileri içerebilir. Ayrıca, SOAP mesajında ​​kullanılabilecek karmaşık türlerin tanımını da içerebilir. Varsayılan olarak, SOAP mesajı dizeler ve sayılar gibi basit türlerde olabilen ancak karmaşık bir nesne türü de olabilen parametreler içerebilir.

Karmaşık bir tipin basit bir SOAP servis örneği aşağıda gösterilmiştir.

"Eğitim Adı" ve "Eğitim Adı" kombinasyonuna sahip yapılandırılmış bir veri türü göndermek istediğimizi varsayalım. Descript"iyon" ise, karmaşık türü aşağıda gösterildiği gibi tanımlarız.

Karmaşık tür, element etiketiyle tanımlanır Yapının gerekli tüm elemanları, ilgili veri tipleriyle birlikte karmaşık tip koleksiyonunda tanımlanır.

<xsd:complexType>     
 <xsd:sequence>       
 	<xsd:element name="Tutorial Name" type="string"/>         
  	<xsd:element name="Tutorial Description"  type="string"/>
  </xsd:sequence>
</xsd:complexType>
  • Çağrı ve yanıt bilgilerini içeren bir Gövde öğesi – Bu öğe, web hizmeti ile çağıran uygulama arasında gönderilmesi gereken gerçek verileri içerir. Aşağıda, başlık bölümünde tanımlanan karmaşık tür üzerinde çalışan SOAP gövdesinin bir SOAP web hizmeti örneği verilmiştir. İşte Eğitim Adı ve Eğitimin yanıtı DescriptBu web servisini çağıran arayan uygulamaya gönderilen iyon.
<soap:Body>
   <GetTutorialInfo>
		<TutorialName>Web Services</TutorialName> 
		<TutorialDescription>All about web services</TutorialDescription> 
   </GetTutorialInfo>
</soap:Body>

SOAP Mesaj Yapısı

Unutulmaması gereken bir nokta, SOAP mesajlarının normalde web servisi tarafından çağrıldığında otomatik olarak oluşturulmasıdır.

Bir istemci uygulaması web servisindeki bir metodu çağırdığında, web servisi otomatik olarak web servisinden istemci uygulamasına gönderilecek verilerin gerekli ayrıntılarını içeren bir SOAP mesajı üretecektir.

Bu SOAP eğitiminin önceki başlığında tartışıldığı gibi, basit bir SOAP Mesajı aşağıdaki öğelere sahiptir:

  • Zarf öğesi
  • Başlık elemanı ve
  • Vücut elemanı
  • Arıza elemanı (İsteğe bağlı)

Basit bir SOAP mesajının aşağıdaki örneğine bakalım ve gerçekte hangi öğenin işe yaradığını görelim.

SOAP Mesaj Yapısı

SOAP Mesaj Yapısı
  1. Yukarıdaki SOAP mesajından görüldüğü gibi, SOAP mesajının ilk kısmı, SOAP mesajının tamamını kapsüllemek için kullanılan zarf elemanıdır.
  2. Bir sonraki öğe, gerçek mesajın ayrıntılarını içeren SOAP gövdesidir.
  3. Mesajımız “Guru99WebService” adında bir web servisi içermektedir.
  4. “Guru99Webservice” 'int' türünde bir parametreyi kabul eder ve TutorialID adını taşır.

Şimdi yukarıdaki SOAP mesajı web servisi ile istemci uygulaması arasında iletilecektir.

Yukarıdaki bilgilerin istemci uygulaması için ne kadar yararlı olduğunu görebilirsiniz. SOAP mesajı, istemci uygulamasına Web hizmetinin adının ne olduğunu, ayrıca hangi parametrelerin beklendiğini ve ayrıca web hizmeti tarafından alınan her parametrenin türünün ne olduğunu bildirir.

SABUN Zarf Elemanı

Yapı taşının ilk parçası SABUN Zarfıdır.

SOAP Zarfı, web servisi ile istemci uygulaması arasında değiştirilen SOAP mesajlarının gerekli tüm ayrıntılarını kapsüllemek için kullanılır.

SOAP zarf elemanı, bir SOAP mesajının başlangıcını ve sonunu belirtmek için kullanılır. Bu, web servisini çağıran istemci uygulamasının SOAP mesajının ne zaman biteceğini bilmesini sağlar.

SOAP zarf elemanında aşağıdaki noktalara dikkat edilebilir.

  • Her SOAP mesajının bir kök Zarf öğesine sahip olması gerekir. SOAP mesajının zarf elemanına sahip olması kesinlikle zorunludur.
  • Her Zarf öğesinin en az bir sabun gövdesi öğesine sahip olması gerekir.
  • Bir Zarf öğesi bir başlık öğesi içeriyorsa birden fazla içermemeli ve gövde öğesinden önce Zarfın ilk alt öğesi olarak görünmelidir.
  • SOAP sürümleri değiştiğinde zarf da değişir.
  • V1.1 uyumlu bir SOAP işlemcisi, v1.2 zarf ad alanını içeren bir ileti alındığında hata oluşturur.
  • v1.2 uyumlu bir SOAP işlemcisi, v1.2 zarf ad alanını içermeyen bir ileti alırsa Sürüm Uyuşmazlığı hatası oluşturur.

Aşağıda SOAP zarf öğesinin 1.2 sürümünün bir SOAP API örneği bulunmaktadır.

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/12/soap-envelope" SOAP-ENV:encodingStyle=" http://www.w3.org/2001/12/soap-encoding">
          <soap:Body>
        <Guru99WebService xmlns="http://tempuri.org/">
                  <TutorialID>int</TutorialID>
                </Guru99WebService>
          </soap:Body>
</SOAP-ENV:Envelope>

Arıza mesajı

Bir SOAP web servisine bir istek yapıldığında, geri dönen yanıt, başarılı yanıt veya hata yanıtı olmak üzere 2 biçimde olabilir. Bir başarı elde edildiğinde sunucudan gelen yanıt her zaman bir SOAP mesajı olacaktır. Ancak SOAP hataları üretilirse “HTTP 500” hataları olarak döndürülür.

SOAP Hata mesajı aşağıdaki öğelerden oluşur.

  1. – Bu, hatanın kodunu belirten koddur. Arıza kodu aşağıdaki değerlerden herhangi biri olabilir
    1. SOAP-ENV:VersionMismatch – Bu, SOAP Envelope öğesi için geçersiz bir ad alanıyla karşılaşıldığı zamandır.
    2. SOAP-ENV:MustUnderstand – MustUnderstand özniteliği “1” olarak ayarlanmış olan Başlık öğesinin hemen bir alt öğesi anlaşılmadı.
    3. SOAP-ENV:Client – ​​İleti yanlış biçimlendirilmiş veya yanlış bilgi içeriyordu.
    4. SOAP-ENV:Server – Sunucuda bir sorun olduğu için mesaj ilerleyemedi.
  2. – Bu, hatanın ayrıntılı açıklamasını veren kısa mesajdır.
  3. (İsteğe bağlı)– Bu, hataya kimin sebep olduğunu gösteren bir metin dizisidir.
  4. (İsteğe bağlı) – Bu, uygulamaya özel hata mesajları için öğedir. Dolayısıyla uygulamanın farklı iş mantığı senaryoları için belirli bir hata mesajı olabilir.

Arıza Mesajı Örneği

Aşağıda bir hata mesajı örneği verilmiştir. İstemcinin GetTutorial sınıfında TutorialID adlı bir yöntemi kullanmaya çalıştığı senaryoda hata üretilir.

Tanımlanan sınıfta yöntemin bulunmaması durumunda aşağıdaki hata mesajı oluşturulur.

<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
      <SOAP-ENV:Body>
         <SOAP-ENV:Fault>
         <faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode>
        <faultstring xsi:type="xsd:string">
            Failed to locate method (GetTutorialID) in class (GetTutorial)
         </faultstring>
    </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Çıktı:

Yukarıdaki kodu çalıştırdığınızda “Sınıfta (GetTutorial) yöntem (GetTutorialID) bulunamadı” gibi bir hata gösterecektir.

SABUN İletişim Modeli

SOAP ile tüm iletişim HTTP protokolü aracılığıyla yapılır. SOAP'tan önce pek çok web hizmetleri iletişim için standart RPC (Uzaktan Prosedür Çağrısı) stilini kullandı. Bu en basit iletişim türüydü ancak birçok sınırlaması vardı.

Şimdi bu SOAP API eğitiminde, bu iletişimin nasıl çalıştığını görmek için aşağıdaki şemayı ele alalım. Bu örnekte, sunucunun 2 yöntem sağlayan bir web servisini barındırdığını varsayalım.

  • Çalışan Alın – Bu, tüm Çalışan ayrıntılarını alır
  • Çalışanı Ayarla – Bu, çalışanların departmanları, maaşları vb. gibi ayrıntıların değerini buna göre ayarlayacaktır.

Normal RPC tarzı iletişimde, istemci yalnızca isteğindeki yöntemleri çağırır ve gerekli parametreleri sunucuya gönderir ve ardından sunucu da istenen yanıtı gönderir.

SABUN İletişim Modeli

Yukarıdaki iletişim modeli aşağıdaki ciddi sınırlamalara sahiptir

  1. Dilden Bağımsız Değil – Yöntemleri barındıran sunucu belirli bir programlama dilinde olacaktır ve normalde sunucuya yapılan çağrılar yalnızca bu programlama dilinde olacaktır.
  2. Standart protokol değil – Uzaktan prosedüre çağrı yapıldığında, çağrı standart protokol üzerinden gerçekleştirilmez. Bu, çoğunlukla web üzerinden tüm iletişimin HTTP protokolü aracılığıyla yapılması gerektiğinden bir sorundu.
  3. Güvenlik duvarları – RPC çağrıları normal protokol üzerinden gitmediğinden, istemcinin sunucuyla iletişim kurabilmesi için sunucuda ayrı bağlantı noktalarının açık olması gerekir. Normalde tüm güvenlik duvarları bu tür trafiği engellerdi ve istemci ile sunucu arasındaki bu tür iletişimin çalışacağından emin olmak için genellikle çok sayıda yapılandırma gerekiyordu.

Yukarıda belirtilen tüm sınırlamaların üstesinden gelmek için SOAP aşağıdaki iletişim modelini kullanacaktır.

SABUN İletişim Modeli

  1. İstemci, prosedür çağrısına ve herhangi bir bağımsız değişkene ilişkin bilgiyi bir SOAP mesajına biçimlendirir ve bunu bir HTTP isteğinin parçası olarak sunucuya gönderir. Verilerin bir SOAP mesajına kapsüllenmesine ilişkin bu işlem şu şekilde biliniyordu: Marshalling.
  2. Sunucu daha sonra müşteri tarafından gönderilen mesajı açar, müşterinin ne istediğini görür ve ardından uygun yanıtı müşteriye bir SOAP mesajı olarak geri gönderir. İstemci tarafından gönderilen bir isteğin paketini açma uygulamasına şu ad verilir: Demarşaling.

Pratik SABUN Örneği

Şimdi bu SoapUI eğitiminde pratik bir SOAP örneğini görelim.

Muhtemelen SOAP mesajlarının nasıl oluşturulduğunu görmenin en iyi yollarından biri aslında bir web hizmetini çalışırken görmektir.

Bu konu, MicrosoftBir ASMX web hizmeti oluşturmak için .Net çerçevesi. Bu tür web hizmeti hem SOAP sürüm 1.1'i hem de sürüm 1.2'yi destekler.

ASMX web hizmetleri otomatik olarak Web Hizmeti Tanımlama Dili (WSDL) belge. Bu WSDL belgesi, çağrı yapan istemci uygulaması tarafından gereklidir, böylece uygulama, web hizmetinin neler yapabileceğini bilir.

Örneğimizde, web hizmetini çağıran uygulamaya bir dize döndürmek için kullanılacak basit bir web hizmeti oluşturacağız.

Bu web hizmeti bir yerde barındırılacaktır. Asp.Net web uygulaması. Daha sonra web servisini çağıracağız ve web servisinin döndürdüğü sonucu göreceğiz.

Visual Studio ayrıca web servisi ile çağıran uygulama arasında iletilen SOAP mesajının ne olduğunu da bize gösterecektir.

Web servis uygulamamızı kurmanın ilk ön koşulu aşağıdaki adımları izleyerek yapılabilir.

Bu örnek için sisteminizde Visual Studio 2013'ün yüklü olduğundan emin olun.

) 1 Adım İlk adım boş bir ASP.Net Web uygulaması oluşturmaktır. Visual Studio 2013'ten, Dosya->Yeni proje menü seçeneğine tıklayın.

SOAP Mesaj Örneği

Yeni Proje seçeneğine tıkladığınızda, Visual Studio size proje türünü seçmeniz ve projenin gerekli ayrıntılarını vermeniz için başka bir iletişim kutusu sunacaktır. Bu bir sonraki adımda açıklanmaktadır.

) 2 Adım Bu adımda,

  1. İlk önce seçtiğinizden emin olun C# ASP.NET Web uygulamasının web şablonu. SOAP servisleri projesi oluşturmak için projenin bu türde olması gerekir. Bu seçeneği seçerek, Visual Studio daha sonra herhangi bir web tabanlı uygulama tarafından ihtiyaç duyulan gerekli dosyaları eklemek için gerekli adımları gerçekleştirecektir.
  2. Projeniz için bizim durumumuzda webservice.asmx olarak verilen bir isim verin. Daha sonra proje dosyalarının saklanacağı konumu belirttiğinizden emin olun.

SOAP Mesaj Örneği

İşlem tamamlandığında Visual Studio 2013'teki çözüm gezgininizde proje dosyasının oluşturulduğunu göreceksiniz.

SOAP Mesaj Örneği

) 3 Adım Bu adımda,

Projemize bir Web servis dosyası ekleyeceğiz

  1. Öncelikle aşağıda gösterildiği gibi proje dosyasına sağ tıklayın

SOAP Mesaj Örneği

  1. Proje dosyasına sağ tıkladığınızda “Add->Web Service(ASMX)” seçeneğini seçerek web servis dosyası ekleme şansınız olur. Web hizmeti adı dosyası için Eğitim Hizmetinin adını vermeniz yeterlidir.

SOAP Mesaj Örneği

) 4 Adım Aşağıdaki kodu Tutorial Service asmx dosyanıza ekleyin.

SOAP Mesaj Örneği

Kod Açıklaması:

  1. Bu kod satırı web hizmeti dosyanız için bir ad sağlar. Bu önemli bir adımdır çünkü istemci uygulamasının web servisini web servisinin adı aracılığıyla aramasına olanak sağlar.
  2. Normalde bir sınıf dosyası, bir web hizmetinin işlevselliğini kapsüllemek için kullanılır. Böylece sınıf dosyası, istemci uygulamasına bazı işlevler sağlayacak tüm web yöntemlerinin tanımına sahip olacaktır.
  3. Burada [WebMethod], bir işlevi tanımlayan bir nitelik olarak bilinir. Sonraki adım, "Guru99WebService" adı verilen bir işlev yaratır, ancak bu adımın bir [WebMethod] niteliği ekleme adımının eklenmesiyle, bu yöntemin bir istemci uygulaması tarafından çağrılabilmesini sağlar. Bu öznitelik mevcut değilse, yöntem hiçbir zaman bir istemci uygulaması tarafından çağrılamaz.
  4. Burada, arayan istemci uygulamasına bir dize döndürmek için kullanılacak 'Guru99WebService' adlı bir işlevi tanımlıyoruz. Bu işlev herhangi bir istemci uygulaması tarafından çağrılabilen bir web hizmetidir.
  5. “Bu bir Guru99 Web hizmetidir” dizesini istemci uygulamasına döndürmek için return ifadesini kullanıyoruz.

Kod başarıyla yürütülürse, kodunuzu tarayıcıda çalıştırdığınızda aşağıdaki Çıktı gösterilecektir.

Çıktı:

SOAP Mesaj Örneği

  • Çıktıda web servisimize isim vermemiz sonucunda web servisimizin adının “Guru99 Web Servisi” olduğu açıkça görülmektedir.
  • Ayrıca web servisini çağırabileceğimizi de görebiliriz. Invoke butonuna tıklarsak web tarayıcısında aşağıdaki yanıtı alırız.

SOAP Mesaj Örneği

Yukarıdaki çıktı,

  • Web yöntemi çağrıldığında "Bu bir Guru99 Web hizmetidir" dizisinin döndürüldüğünü açıkça göstermektedir.
  • Visual Studio ayrıca yukarıdaki web servisi çağrıldığında üretilen SOAP mesaj isteğini ve yanıtını görüntülemenize de olanak tanır.

Web servis çağrıldığında oluşan SOAP isteği aşağıda gösterilmiştir.

SOAP Mesaj Örneği

Kod Açıklaması:

  1. SOAP mesajının ilk kısmı, önceki bölümlerde tartışılan zarf unsurudur. Bu, her SOAP mesajında ​​bulunan kapsülleyici öğedir.
  2. SOAP Gövdesi bir sonraki öğedir ve SOAP mesajının gerçek ayrıntılarını içerir.
  3. Üçüncü kısım ise 'Guru99WebService' isimli servisi çağırmak istediğimizi belirten elemandır.

SOAP Mesaj Örneği

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  
    <soap:Body>
      
        <Guru99WebServiceResponse xmlns="http://tempuri.org/">
          
            <Guru99WebServiceResult>string</Guru99WebServiceResult>
          
        </Guru99WebServiceResponse>
    </soap:Body>
</soap:Envelope>

Kod Açıklaması:

  1. SOAP mesajının ilk kısmı, önceki bölümlerde tartışılan zarf unsurudur. Bu, her SOAP mesajında ​​bulunan kapsülleyici öğedir.
  2. SOAP Gövdesi bir sonraki öğedir ve SOAP mesajının gerçek ayrıntılarını içerir.
  3. Şimdi göreceğiniz ilginç kısım 'string' niteliğidir. Bu, istemci uygulamasına çağrılan web servisinin string türünde bir nesne döndürdüğünü söyler. Bu çok faydalıdır çünkü aksi takdirde web servisinin ne döndürdüğünü bilmeyecek olan istemci uygulaması.

ÖZET

  • SOAP, farklı temellere dayanan uygulamalar arasında veri alışverişi yapmak için kullanılan bir protokoldür. Programlama dilleri.
  • SOAP, XML spesifikasyonu üzerine kurulmuştur ve HTTP protokolüyle çalışır. Bu, onu web uygulamalarında kullanım için mükemmel kılar.
  • SOAP yapı taşları bir SOAP Mesajından oluşur. Her SOAP mesajı bir zarf öğesi, bir başlık ve bir gövde öğesinden oluşur.
  • Zarf öğesi, SOAP mesajındaki zorunlu öğedir ve SOAP mesajındaki tüm verileri kapsüllemek için kullanılır.
  • Başlık öğesi, kimlik doğrulama bilgileri veya karmaşık veri türlerinin tanımı gibi bilgileri içermek için kullanılabilir.
  • Body öğesi, web yöntemlerinin tanımını ve gerekirse herhangi bir parametre bilgisini içeren ana öğedir.