Bazı kurumlar bana Belge stili ile RPC stili web hizmetleri arasındaki farkları açıklayabilir mi?
Bir WSDL bağlamasını bir SOAP mesaj gövdesine çevirmek için kullanılan iki iletişim stili modeli vardır. Bunlar:
Belge ve RPC
Bir Belge tarzı modeli kullanmanın avantajı SOAP vücudu sürece SABUN ileti gövdesinin içeriği herhangi bir keyfi XML örneği olduğu gibi, istediğiniz şekilde yapılandırabilirsiniz olmasıdır. Belge stili aynı zamanda Mesaj Odaklı stil olarak da adlandırılır .
Bununla birlikte, bir RPC stili modelde , SOAP istek gövdesinin yapısı hem işlem adını hem de yöntem parametreleri kümesini içermelidir. RPC stil modeli , mesaj gövdesinde bulunan XML örneğinin belirli bir yapısını varsayar .
Ayrıca, bir WSDL bağlamasını bir SOAP mesajına çevirmek için kullanılan iki kodlama kullanım modeli vardır. Bunlar: değişmez ve kodlanmış
Bir kullanırken değişmez kullanım modeli , gövde içeriği kullanıcı tanımlı uygun olmalıdır XML şema (XSD) yapısı . Avantaj iki yönlüdür. Birincisi, mesaj gövdesini kullanıcı tanımlı XML şemasıyla doğrulayabilir, ayrıca XSLT gibi bir dönüştürme dili kullanarak mesajı dönüştürebilirsiniz.
(SOAP) kodlu kullanım modeliyle , mesajın XSD veri türlerini kullanması gerekir, ancak mesajın yapısının herhangi bir kullanıcı tanımlı XML şemasına uyması gerekmez. Bu, mesaj gövdesini doğrulamayı veya mesaj gövdesinde XSLT tabanlı dönüşümleri kullanmayı zorlaştırır.
Farklı stil ve kullanım modellerinin kombinasyonu, WSDL bağlamasını bir SOAP mesajına çevirmek için bize dört farklı yol sunar.
Document/literal
Document/encoded
RPC/literal
RPC/encoded
Hangi WSDL stilini kullanmalıyım? Başlıklı bu makaleyi okumanızı tavsiye ederim. Russell Butek, farklı tarzlar hakkında güzel bir tartışmaya sahip olan ve bir SOAP mesajına WSDL bağlanmasını ve bunların göreceli güçlü ve zayıf yönlerini çevirmek için modelleri kullanan.
Eserler alındıktan sonra, her iki iletişim tarzında da, bağlantı noktasındaki yöntemi çağırıyorum. Şimdi, bu RPC stilinde ve Belge stilinde farklılık göstermez. Öyleyse fark nedir ve bu fark nerede görünür?
Farkı bulabileceğiniz yer "YANIT" dır!
RPC Stili:
package com.sample;
import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style=Style.RPC)
public interface StockPrice {
public String getStockPrice(String stockName);
public ArrayList getStockPriceList(ArrayList stockNameList);
}
İkinci işlem için SOAP mesajının çıkışı boş olacak ve şöyle görünecektir:
RPC Stil Yanıtı:
<ns2:getStockPriceListResponse
xmlns:ns2="http://sample.com/">
<return/>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>
Belge Stili:
package com.sample;
import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style=Style.DOCUMENT)
public interface StockPrice {
public String getStockPrice(String stockName);
public ArrayList getStockPriceList(ArrayList stockNameList);
}
İstemciyi yukarıdaki SEI için çalıştırırsak, çıktı:
123 [123, 456]
Bu çıktı, ArrayList öğelerinin web hizmeti ve istemci arasında değiş tokuş edildiğini gösterir. Bu değişiklik, yalnızca SOAPBinding ek açıklamasının stil özniteliği değiştirilerek yapılmıştır. Daha zengin veri tipine sahip ikinci yöntem için SOAP mesajı referans için aşağıda gösterilmiştir:
Belge Stili Yanıtı:
<ns2:getStockPriceListResponse
xmlns:ns2="http://sample.com/">
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:type="xs:string">123</return>
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:type="xs:string">456</return>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>
Sonuç
- İki SOAP yanıt mesajında fark edeceğiniz gibi, SOAP yanıt mesajını BELGE stilinde doğrulamanın mümkün olduğunu, ancak RPC stili web hizmetlerinde geçerli olmadığını fark etmişsinizdir.
- RPC stilini kullanmanın temel dezavantajı, daha zengin veri türlerini desteklememesi ve Belge stilini kullanmanın, daha zengin veri türlerini tanımlamak için XSD biçiminde biraz karmaşıklık getirmesidir.
- Bunlardan birini kullanma seçimi, işlem / yöntem gereksinimlerine ve beklenen müşterilere bağlıdır.
Benzer şekilde, SOAP over HTTP'den HTTP üzerinden XML'den ne şekilde farklıdır? Sonuçta SOAP, SOAP ad alanına sahip bir XML belgesidir. Öyleyse buradaki fark nedir?
SABUN gibi bir standarda neden ihtiyacımız var? XML belgelerini HTTP üzerinden değiş tokuş ederek, iki program, bir mesaj zarfı biçimini ve yapılandırılmış içeriği kodlamanın bir yolunu açıkça tanımlamak için SOAP gibi ek bir standart getirmeden zengin, yapılandırılmış bilgileri değiş tokuş edebilir.
SOAP, geliştiricilerin kullanılabilir hale getirmek istedikleri her hizmet için özel bir XML mesaj formatı icat etmelerine gerek kalmaması için bir standart sağlar. Çağrılacak hizmet yönteminin imzası göz önüne alındığında, SOAP belirtimi kesin bir XML mesaj formatı belirler. Herhangi bir programlama dilinde çalışan, SOAP belirtimine aşina olan herhangi bir geliştirici, belirli bir hizmet için doğru bir SOAP XML talebini formüle edebilir ve aşağıdaki hizmet ayrıntılarını alarak hizmetten alınan yanıtı anlayabilir.
- Hizmet adı
- Hizmet tarafından uygulanan yöntem adları
- Her yöntemin yöntem imzası
- Hizmet uygulamasının adresi (URI olarak ifade edilir)
SOAP kullanımı, mevcut bir yazılım bileşenini bir Web hizmeti olarak ortaya çıkarma sürecini kolaylaştırır çünkü hizmetin yöntem imzası hem istek hem de yanıt için kullanılan XML belge yapısını tanımlar.