www.fatihkabakci.com

Personal Website and Computer Science TUR EN

SOAP(BASIT NESNE ERISIM PROTOKOLU)

Last update: 7/3/2015 7:10:00 PM

Yazan:Fatih KABAKCI

Bu yazının amacı SOAP protokolünün ne olduğu ve hangi özelliklerden oluştuğu hakkında bilgi vermektir.

SOAP (Simple Object Access Protocol - Basit Nesne Erişim Protokolü) dağıtık uygulamalarda farklı makineler arasında platform bağımsız veri haberleşmesi sağlayan bir protokol standardıdır. SOAP ile ağ üzerinde farklı işletim sistemlerinde bulunan ve farklı programlama dillerinde yazılmış uygulamaları birbirleriyle konuşturabilir, veri paylaşımı gerçekleştirebilirsiniz.

SOAP Kısa Tarihi

SOAP tasarlanmadan önce, veri haberleşmeleri RPC (Remote Procedure Call - Uzak Prosedür Çağrısı) ile yapılmaktaydı. Ancak RPC hem HTTP ile kullanılamıyordu hemde güvenlik problemleri yaratıyordu. Bunun üzerine CORBA (Common Object Requet Broker Architecture - Ortak Nesne İstek Aracısı Mimarisi), DCOM ve RMI(Remote Method Invocation - Uzak Metot Çağrısı) gibi teknolojiler geliştirilse de, dil ve platform bağımlığının olması, onların kullanımını da zorluyordu.

SOAP, İlk olarak HTTP taşıma protokolünü kullanan 1.0 versiyonu ile Microsoft' un önderliğinde geliştirilmiştir. Ardından 1.1 versiyonu ile diğer taşıma protokolleri ile çalışacak hale getirilip, standart haline gelmesi için W3C (World Wide Web Consortium)' e gönderilmiştir. W3C 1.2 versiyonu ile SOAP' ı geliştirmiştir. SOAP XML ile yazılır ve HTTP başta olmak üzere, FTP, SMTP gibi diğer taşıma protokollerini kullanabilir.

SOAP Özellikleri

SOAP özetle aşağıda listelenen yeteneklerden oluşur.

+ İnternet üzerinde haberleşme sağlayan bir iletişim protokolüdür.
+ XML mesajlaşması için HTTP protokolünü genişletebilir.
+ Web servisleri için veri iletişimi sağlar.
+ Ek döküman iletebilir ve uzak prosedür çağrısı yapabilir.
+ Yayın(broadcast) mesajları için kullanılabilir.
+ Platform ve geliştirilen dilden bağımsızdır.
+ Bilginin gönderilmesi ve tanımlanmasında XML dilini kullanır.
+ İstemcilere uzak metot ve servislere kolayca erişmesini sağlar.

Bir SOAP mesajı envelope (zarf) adı verilen 1 adet kök elementten oluşur. SOAP mesajı içerisindeki bir zarf elementi ise aşağıdaki 3 temel elementi barındırır.

Envelope: Zarf anlamına gelen bu element, SOAP mesajının tüm iskeletini oluşturur.

Header: Başlık elementi, mesaj sağlayıcılarının kullanacağı isteğe bağlı niteliklerinin(attributes) ayarlandığı verilerden oluşur. Bu element isteğe bağlı (optional) olarak eklenebilir.
Body: Gövde elementi, XML verinin kendisini barındıran, asıl mesajı içeren veridir. Bu element zorunlu (mandatory) olarak eklenmelidir.
Fault: Hata elementi, mesaj sağlayıcıları tarafından alınan hatalar hakkında bilgi veren bir veridir.

Yukarıda her bir elementi açıklanan SOAP mesaj yapısının iskeleti aşağıda gösterilmektedir.

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>
...
</soap:Header>

<soap:Body>
...
  <soap:Fault>
  ...
  </soap:Fault>
</soap:Body>

</soap:Envelope>

Envelope Elementi

SOAP' ın bütün mesajını sarmalayan kök elementtir. Aşağıda örnek şablonu verilmektedir.

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
  ...
  Message information goes here
  ...
</soap:Envelope>

xmlns:soap niteliği SOAP mesajında kullanılan ad uzayını (namespace) tanımlar. soap:encodingStyle niteliği SOAP mesajında kullanılacak veri tiplerini tanımlar. Yukarıdaki örnekte gösterilen veri tipleri XML dilinde kullanılan W3C' nin tanımladığı XSD veri tipleridir.

Header Elementi

Başlık elementi SOAP mesajlarında isteğe bağlı olarak doldurulan bilgilerden oluşur. Bir başlık elementini örnek olarak şifre korumalı servislere dijital imza sağlamak için kullanabilirsiniz. Veyahut bir servise login olmak için kullanılan kullanıcı adı ve şifre bilgilerinizi bu element altında girebilirsiniz. Header elementleri bir SOAP zarfı içerisinde ilk olarak tanımlanan XML imlerinden oluşur. Örnek bir header imi aşağıda gösterilmektedir.

Örnek Header
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="http://www.example.com/transaction/">100
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

Bir SOAP header elementi mustUnderstand, actor, ve encodingStyle niteliklerini barındırabilir. soap:mustUnderstand niteliği SOAP başlığının alıcı tarafından tanınmasının zorunlu olup olmadığını söyler. Şayet bu değer yukarıdaki örnekte olduğu gibi 1 ise, bu mesajı alan alıcı bu başlığı işlemek zorunda kalır. Aksi halde 0 değeri bu başlığın işlenmek zorunda olmadığını belirtir. Şayet 1 olan değeri alan alıcı başlığı tanımlayamaz ise bir hata döndürür. Örnek kullanımı aşağıda gösterilmektedir.

Örnek mustUnderstand
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="http://www.example.com/transaction/"
  soap:mustUnderstand="1">100
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

soap:actor niteliği, bir göndericinin, alıcıya mesajı iletirken, arada yönlendirme yapan mesaj sağlayıcılarına bu mesajı ileteceğini belirtir. Örnek kullanımı aşağıda gösterilmektedir.

Örnek actor
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="http://www.example.com/transaction/"
  soap:actor="http://www.example.com/appml/">100
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

soap:encodingStyle niteliği yukarıda anlatılan görevi ile aynıdır.

Body Elementi

SOAP mesajının gövdesini oluşturan asıl mesajı temsil eder. Doldurulması zorunlu olan bir bilgidir. Uzak prosedür çağrılarının ve servislerinin kullanıldığı yer burasıdır. Bir SOAP operasyonu burada çağrılarak sunucuya gönderilir. Aşağıdaki örnekte bir müşterinin ID bilgisini alarak Adını döndüren SOAP mesajı aşağıda gösterilmektedir.

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body>
  <m:GetName xmlns:m="http://www.example.com/customers">
    <m:Item>1234</m:Item>
  </m:GetName>
</soap:Body>

</soap:Envelope>

Yukarıdaki örnekte www.example.com/customers web servis sağlayıcısına, 1234 numaralı müşteri sorgusu yapılmaktadır. Sunucunun döndüğü örnek cevap ise aşağıdaki formattadır.

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body>
  <m:GetNameResponse xmlns:m="http://www.example.com/customers">
    <m:Name>Fatih KABAKCI</m:Name>
  </m:GetNameResponse>
</soap:Body>

</soap:Envelope>

Fault Elementi

İsteğe bağlı olarak doldurulan hata elementi, alınan hatalar hakkında bilgi sağlayan imlerden oluşur. Bir hata oluştuğunda, bu mesaj body elementi altında gösterilir. Bir hata elementi aşağıdaki 4 alt elementten oluşur.

<faultcode> hata kodunu gösterir.
<faultstring> hatanın açıklamasını gösterir.
<faultactor> hataya sebep olan actor bilgisini gösterir.
<detail> body elementi ile ilişkili uygulamaya özel hata bilgisini barındır.

Yukarıdaki elementler bir hatanın hangi parçalardan oluştuğunu gösterir. Aşağıda örnek bir hata mesajı gösterilmektedir.

<?xml version='1.0' encoding='UTF-8'?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
   <soap:Body>
      <soap:Fault>
         <faultcode xsi:type="xsd:string">soap:Server</faultcode>    
         <faultstring xsi:type="xsd:string">
           Exception from service object: null
         </faultstring>  
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

Bu elementlerden biri olan <faultcode> elementi ise, aşağıda açıklanan 4 tip hatadan birisi olabilir.

VersionMismatch, SOAP envelope elementi içerisinde uygun olmayan bir ad uzayı bulunduğunda döndürülür.
MustUnderstand, alıcının header elementini tanıyamaması sonucunda döndürülür.
Client , istemcinin yolladığı mesajın bozuk olduğu durumlarda döndürülür.
Server, sunucuda bir problemin oluştuğu durumlarda döndürülür.

SOAP mesajı yukarıda açıklandığı gibi aynı zamanda platform bağımsız bir dil olan XML ile kullanılarak gönderici ve alıcılar arasında paylaştırılır.

SOAP ile HTTP

SOAP belirtimleri bir SOAP mesajının yapısını tanımlar, onların nasıl iletileceğini tanımlamaz. Bu sebeple SOAP mesajları istemci ve sunucular arasında iletilirken bir taşıma protokolü üzerinden gönderilir. İletimde en çok kullanılan protokol HTTP' dir. HTTP protokolü ile bir SOAP mesajı ağ üzerinde taşınabilir. Örnek bir mesaj aşağıda gösterilmektedir.

SOAP HTTP Request
POST /Name HTTP/1.1
Host: www.example.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body>
  <m:GetName xmlns:m="http://www.example.com/customers">
    <m:Item>1234</m:Item>
  </m:GetName>
</soap:Body>

</soap:Envelope>

Yukarıdaki HTTP talebine karşılık sunucun verdiği örnek cevap aşağıdaki gösterilmektedir.

SOAP HTTP Response
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body xmlns:m="http://www.example.com/name">
  <m:GetNameResponse>
    <m:Name>Fatih KABAKCI</m:Name>
  </m:GetNameResponse>
</soap:Body>

</soap:Envelope>

Sunucu verilen isteğe karşılık yukarıdaki 200 OK HTTP cevabını SOAP zarfı içerisine ekleyerek döndürür.

There has been no comment yet

Name:


Question/Comment
   Please verify the image




The Topics in Computer Science

Search this site for





 

Software & Algorithms

icon

In mathematics and computer science, an algorithm is a step-by-step procedure for calculations. Algorithms are used for calculation, data processing, and automated reasoning.

Programming Languages

icon

A programming language is a formal constructed language designed to communicate instructions to a machine, particularly a computer. It can be used to create programs to control the behavior of a machine. Java,C, C++,C#

Database

icon

A database is an organized collection of data. The data are typically organized to model aspects of reality in a way that supports processes requiring information.

Hardware

icon

Computer hardware is the collection of physical elements that constitutes a computer system. Computer hardware refers to the physical parts or components of a computer such as the monitor, memory, cpu.

Web Technologies

icon

Web development is a broad term for the work involved in developing a web site for the Internet or an intranet. Html,Css,JavaScript,ASP.Net,PHP are one of the most popular technologies. J2EE,Servlet, JSP,JSF, ASP

Mobile Technologies

icon

Mobile application development is the process by which application software is developed for low-power handheld devices, such as personal digital assistants, enterprise digital assistants or mobile phones. J2ME

Network

icon

A computer network or data network is a telecommunications network that allows computers to exchange data. In computer networks, networked computing devices pass data to each other along data connections.

Operating Systems

icon

An operating system is software that manages computer hardware and software resources and provides common services for computer programs. The OS is an essential component of the system software in a computer system. Linux,Windows

Computer Science

icon

Computer science is the scientific and practical approach to computation and its applications.A computer scientist specializes in the theory of computation and the design of computational systems.