SOAP チュートリアル

SOAP チュートリアルを参照してください

1 はじめに

SOAP は中国語で「Simple Object Access Protocol」と解釈されます。
SOAP は、アプリケーションが HTTP 経由で情報を交換できるようにする単純な XML ベースのプロトコルです。
SOAP は、アプリケーションが HTTP 経由で情報を交換できるようにする単純な XML ベースのプロトコルです。もっと簡単に言えば、SOAP は Web サービスにアクセスするためのプロトコルです。

なぜ石鹸を使用するのでしょうか?
アプリケーション開発では、プログラム間のインターネット通信を可能にすることが重要です。現在のアプリケーションは、リモート プロシージャ コール (RPC) を使用して DCOM や CORBA などのオブジェクト間で通信しますが、HTTP はこのために設計されていません。RPC> は互換性だけでなくセキュリティの問題も引き起こし、ファイアウォールやプロキシ サーバーがそのようなトラフィックをブロックすることがよくあります。HTTP> はすべてのインターネット ブラウザとサーバーでサポートされているため、HTTP 経由でアプリケーション間で通信する方が良い方法です。SOAP は、このタスクを実行するために作成されました。SOAP> は、異なるオペレーティング システム上で実行され、異なるテクノロジとプログラミング言語を使用してアプリケーションが相互に通信できるようにする標準的な方法を提供します。

2. SOAP の構成要素

SOAP メッセージは、次の要素を含む通常の XML ドキュメントです。

  • この XML ドキュメントを SOAP メッセージとして識別する必須の Envelope 要素
  • ヘッダー情報を含むオプションの Header 要素
  • 必須の Body 要素。すべての呼び出しと応答の情報が含まれます。
  • このメッセージの処理中に発生したエラーに関する情報を提供するオプションの Fault 要素

上記の要素はすべて、SOAP カプセル化のデフォルトの名前空間:
http://www.w3.org/2001/12/soap-envelope
、および SOAP エンコーディングとデータ型のデフォルトの名前空間:
http://www.w3で宣言されています。 .org/2001/12/soap-encoding

2.1. 文法規則

以下に重要な文法規則をいくつか示します。

  • SOAP メッセージは XML でエンコードする必要がある
  • SOAP メッセージは SOAP Envelope 名前空間を使用する必要があります
  • SOAP メッセージは SOAP Encoding 名前空間を使用する必要があります
  • SOAP メッセージには DTD 参照を含めることはできません
  • SOAP メッセージには XML 処理命令を含めることはできません

2.2. SOAPメッセージの基本構造

 <?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> 

2.3. エンベロープ要素

SOAP メッセージのルート要素。XML ドキュメントを SOAP メッセージとして定義します。

 <?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> 

1. xmlns:soap 名前空間

SOAP メッセージには、名前空間「http://www.w3.org/2001/12/soap-envelope」に関連付けられた Envelope 要素が必要です。
別の名前空間が使用されている場合、アプリケーションはエラーを出し、このメッセージを破棄します。

2.encodingStyle 属性

SOAP の encodingStyle 属性は、ドキュメントで使用されるデータ型を定義するために使用されます。この属性は任意の SOAP 要素に表示でき、要素のコンテンツと要素のすべての子要素に適用されます。
SOAP メッセージにはデフォルトのエンコーディングがありません。

2.4. ヘッダー要素

SOAP ヘッダーは、SOAP メッセージに関するアプリケーション固有の情報 (認証、支払いなど) を含めることができる XML 言語タグです。
Header 要素が指定される場合、それはEnvelope 要素の最初の子要素である必要があります。
注: 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="//www.w3cschool.cn/transaction/"        
  soap:mustUnderstand="1">234        
  </m:Trans>        
</soap:Header>        
...        
...        
</soap:Envelope>

上の例には、値 234 の「Trans」要素と値「1」の「mustUnderstand」属性を持つヘッダーが含まれています。
SOAP は、デフォルトの名前空間 (「http://www.w3.org/2001/12/soap-envelope」) で 3 つのプロパティを定義します。
3 つのプロパティは、actor、mustUnderstand、encodingStyle です。SOAP ヘッダーで定義されたこれらの属性は、コンテナーが SOAP メッセージを処理する方法を定義します。

1.mustUnderstand属性

SOAP のMustUnderstand 属性を使用すると、ヘッダー項目が受信者による処理に必須であるかオプションであるかを識別できます。
Header 要素のサブ要素に "mustUnderstand="1" を追加すると、このヘッダーを処理する受信者がこの要素を認識する必要があることを示すことができます。受信者がこの要素を認識できない場合、このヘッダーの処理は失敗する必要があります。

文法:soap:mustUnderstand="0|1"

2. アクターの属性

SOAP メッセージは、メッセージ パスに沿ってさまざまなエンドポイントを経由して、送信者から受信者に送信されます。SOAP メッセージのすべての部分が、SOAP メッセージの最終エンドポイントに配信されることを目的としているわけではありませんが、一方で、メッセージのパスに沿った 1 つ以上のエンドポイントに配信されることが意図されている場合もあります。

SOAP の Actor 属性を使用して、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="//www.w3cschool.cn/transaction/"        
  soap:actor="//www.w3cschool.cn/appml/">234        
  </m:Trans>        
</soap:Header>        
...        
...        
</soap:Envelope>

3.encodingStyle 属性

SOAP の encodingStyle 属性は、ドキュメントで使用されるデータ型を定義するために使用されます。この属性は任意の SOAP 要素に表示でき、要素のコンテンツと要素のすべての子要素に適用されます。

SOAP メッセージにはデフォルトのエンコーディングがありません。

2.5. 本体要素

必須の SOAP Body 要素には、メッセージの最終エンドポイントに配信される実際の SOAP メッセージを含めることができます。
SOAP Body 要素の直接の子要素は、名前空間で修飾できます。

聞く

<?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:GetPrice xmlns:m="//www.w3cschool.cn/prices">
     <m:Item>Apples</m:Item>
   </m:GetPrice>
 </soap:Body>

 </soap:Envelope>

上の例では、リンゴの価格をリクエストしています。上記の m:GetPrice 要素と Items 要素はアプリケーション固有の要素であることに注意してください。これらは SOAP 標準の一部ではありません。

SOAP 応答は次のようになります。

 <?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:GetPriceResponse xmlns:m="//www.w3cschool.cn/prices">
     <m:Price>1.90</m:Price>
   </m:GetPriceResponse>
 </soap:Body>

 </soap:Envelope> 

2.6、障害要素

SOAP メッセージのエラーおよびステータス情報を保持するために使用されます。
Fault 要素が提供される場合、それは Body 要素の子である必要があります。SOAP メッセージでは、Fault 要素は 1 回だけ出現できます。
ここに画像の説明を挿入

2.7、HTTPバインディング

SOAP HTTP バインディング
SOAP メソッドは、SOAP エンコード ルールに従う HTTP 要求/応答を指します。

HTTP + XML = SOAP
SOAP リクエストは、HTTP POST リクエストまたは HTTP GET リクエストの場合があります。

HTTP POST リクエストでは、少なくとも 2 つの HTTP ヘッダー、Content-Type と Content-Length を指定します。

1、コンテンツタイプ

SOAP の要求と応答の Content-Type ヘッダーは、メッセージの MIME タイプを定義し、オプションで要求または応答の XML 本文の文字エンコーディングを定義します。

 POST /item HTTP/1.1
 Content-Type: application/soap+xml; charset=utf-8

2、コンテンツの長さ

SOAP 要求および応答の Content-Length ヘッダーは、要求または応答本文のバイト数を指定します。

 POST /item HTTP/1.1
 Content-Type: application/soap+xml; charset=utf-8
 Content-Length: 250 

3. 例

SOAP インスタンス
以下の例では、GetStockPrice リクエストがサーバーに送信されます。このリクエストには StockName パラメータがあり、応答では Price パラメータが返されます。この機能の名前空間は、次のアドレスで定義されます: "http://www.example.org/stock"

聞く

 POST /InStock HTTP/1.1
 Host: www.example.org
 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.org/stock">
   <m:GetStockPrice>
     <m:StockName>IBM</m:StockName>
   </m:GetStockPrice>
 </soap:Body>

 </soap:Envelope>

応答

 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.org/stock">
   <m:GetStockPriceResponse>
     <m:Price>34.5</m:Price>
   </m:GetStockPriceResponse>
 </soap:Body>

 </soap:Envelope> 

おすすめ

転載: blog.csdn.net/weixin_41544662/article/details/131374200