Ext JS

新しいSencha SOAP Data Proxyを見てみよう

こんにちは、ゼノフィkotsutsumiです。

この記事は、US Sencha社ブログ “Taking a look at the new Sencha SOAP Data Proxy”を翻訳したものです。

イントロダクション

Sencha データパッケージは、アプリケーションのあらゆる種類のデータに接続するプロキシをSencha Complete: TeamのExt JS 4.1.2で提供しています。 開発者は、SOAPウェブサービスを利用することができるようになりました。 最も人気のあるWEBサービスプロトコルの1つであるSOAPを、開発者はアプリケーションデータ接続の1つとして選択できるようになりました。

SOAPプロキシは、他のプロキシと同様に、ストアと連動して動作します。データモデルの構成に組み込まれるので、詳細な動作の違いなどを心配する必要はありません。


SOAPとは

SOAP (Simple Object Access Protocol)は、アプリケーションがリモートウェブサービスと通信するためのXMLベースのプロトコルです。 SOAP にはいくつかの利点があります。 それは、プロトコルに依存せず、HTTP、SMTP、またはJMS上でSOAPメッセージをやりとりすることができます。 どのようなクライアントでも、オブジェクトやメソッドの厳密なやりとりを提供します。 しかし、厳密なやりとりのため、他の通信プロトコルと比べて少し遅いです。 SOAP サービスは、Web サービス記述言語 (WSDL) ファイルで定義されます。 クライアントは、メソッドとデータ型を表示します。 あなたは、そのやりとりを開発することができます。

SOAP クライアントは特別な形式のXMLドキュメントで、 SOAP エンベロープの周りを渡すことによって、サービスと対話します。 エンベロープは、要求と、要求固有の必要な情報を含むボディを持つアプリケーション固有の情報を 渡すためのオプションのヘッダーで構成されます。 以下のサンプルは、要求と応答の getPeople と Person オブジェクトを返すという単純なサービスの 使用別のエンベロープはを見せています。


サンプルリクエスト:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
 <soap:Body>
  <getPeople xmlns="http://samples/xsd"></getPeople>
 </soap:Body>
</soap:Envelope>

サンプルレスポンス:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
 <soapenv:Body>
  <ns:getPeopleResponse xmlns:ax219="http://rpc.xml.coldfusion/xsd" xmlns:ns="http://samples/xsd">
   <ns:return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns:Person">
    <ns:firstName>Kevin</ns:firstName>
    <ns:id>1</ns:id>
    <ns:lastName>Kazmierczak</ns:lastName>
   </ns:return>
   </ns:getPeopleResponse>
 </soapenv:Body>
</soapenv:Envelope>

サンプルアプリケーション

新しい SOAP プロキシを試すには、ColdFusion コンポーネント (CFC) を使用して作成した ColdFusion ウェブサービスと通信するサンプル CRUD アプリケーションを構築します。 ColdFusion SOAP WSDL ファイルをちょうど CFC のメソッドとしてアクセス「リモート」 マークすることによって生成する本当に簡単な方法を提供します。

アプリケーションは、SOAP プロキシ経由で提供されるデータの単純なグリッドを示しています。 レコードを編集または削除するをダブルクリックします。 右上のプラスボタンを押すと新しいレコードを挿入します。 すべてこれらの相互作用の中には、Chrome デベロッパー ツールのようなツールまたは Firebug はネットワーク要求を表示できるようになります実行している、だから裏で起っていることも見ることをお勧めします。


サーバーセットアップ

ColdFusion 10 と Apache Tomcat 7 をサーバー上にセットアップします。 ColdFusionアプリケーションコンテナの中に、CFCと4つのリモートメソッドを作成しました。 create, read, update, delete で、シンプルに‘Person’というオブジェクトです。 このサービスは、ただ次のデモンストレーションで使用するために、モックデータを取得、リセットするだけの動きをします。


データセットアップ

モデルオブジェクトは、いくつかの基本的なプロパティからなる非常に単純なPersonオブジェクトです。

Ext.define('SampleApp.model.Person', {
 extend: 'Ext.data.Model',
 fields: [
  {
   name: 'id',
   type: 'int'
  },
  {
   name: 'firstName',
   type: 'string'
  },
  {
   name: 'lastName',
   type: 'string'
  }
 ]
});

SOAPプロキシは、どこで詳細を取得するか内部のストアオブジェクトに設定します。

Ext.define('SampleApp.store.People', {
 extend:'Ext.data.Store',
 model:'SampleApp.model.Person',
 autoLoad:true,
 proxy: {
  type: 'soap',
  url: '/cfusion/samples/People.cfc',
  api: {
   create: 'createPerson',
   read: 'getPeople',
   update: 'updatePerson',
   destroy: 'deletePerson'
  },
  soapAction: {
   create: 'http://localhost:8080/cfusion/samples/People.cfc',
   read: 'http://localhost:8080/cfusion/samples/People.cfc',
   update: 'http://localhost:8080/cfusion/samples/People.cfc',
   destroy: 'http://localhost:8080/cfusion/samples/People.cfc'
  },
  operationParam: 'operation',
  targetNamespace: 'http://samples/xsd'
  reader: {
   type: 'soap',
   record: 'ns|return',
   namespace: 'ns'
  }
 }
});

多くのオプションがここにあります。詳細を見てみましょう。

  • type: ‘soap’
    • 新しい SOAP プロキシを使用するプロキシを設定します。
  • url: ‘/cfusion/People.cfc’
    • 定義用の api メソッドを使用する基本の URL を提供します。 ブラウザーのセキュリティ ポリシーにより、この URL はアプリケーションと同じドメインになければなりません。 リモート SOAP サービスにアクセスする必要がある場合は、サーバー側のプロキシ サービスのようなカスタム セットアップを行う必要があります。
  • api
    • 作成に対応する、読み取り、更新で構築されたを破壊する SOAP 操作を定義するアクションを格納します。のみを使用する計画しているメソッドを定義する必要があります。
  • soapAction
    • 各 CRUD メソッドで使用される Url を定義します。SOAP 仕様では要求ヘッダーで渡されるには、この情報が必要です。
  • operationParam: ‘operation’
    • CRUD 要求に使用される操作を指す、SOAP サービスで、パラメーターの名前を定義します。
  • targetNamespace: ‘http://samples/xsd’
    • SOAP エンベロープを構築に使用される XML 名前空間。あなたはこの WSDL コントラクトで定義されていると一致するようにします。
  • reader
    • SOAP リーダーこのプロキシ設定し、言う SOAP 応答を解析するときのレコードのオブジェクトを使用します。また必要なときに使用する名前空間の応答を解析です。

一度、ストアとモデルのセットアップを持って、すべてを行う必要がお客様データをポイントするビューを作成します。以下は、ストアと、モデルからデータを表示するサンプル グリッド ビューです。

Ext.define('SampleApp.view.ListView', {
 extend:'Ext.grid.Panel',
 title: 'Person List',
 alias: 'widget.listView',
 store: 'People',
 columns: [
  {
   text: 'Id',
   flex: 1,
   dataIndex: 'id'
  },
  {
   text: 'First Name',
   flex: 1,
   dataIndex: 'firstName'
  },
  {
   text: 'Last Name',
   flex: 1,
   dataIndex: 'lastName'
  }
 ],
 tools: [{
  type: 'plus'
 }]
});

すべてを一緒に引っ張るするときは、次のようなグリッドを取得します。


コンフィグオプション

この例で使用されていないが、非常に有用である他のいくつかのオプションが SOAP プロキシにはあります。 プロキシを自動的に生成されていない特定の形式のエンベロープ オブジェクトが通信して SOAP サービスが必要な場合は、それが XTemplate の文字列を使用してそれらを作成する方法をオーバーライドできます。 プロキシは CRUD のメッセージ エンベロープを上書きする機能を公開します。以下は基本の封筒をオーバーライドして、オブジェクトのテンプレートを読む方法の 2 つの例です。

proxy: {
  ...
  envelopeTpl: [
    '&lt;?xml version="1.0" encoding="utf-8" ?&gt;',
    '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">',
      '{[values.bodyTpl.apply(values)]}',
    '</s:Envelope>'
  ],
  readBodyTpl: [
    '<s:Body>',
      '<{operation} xmlns="{targetNamespace}">',
        '<tpl foreach="params">',
          '<{$}>{.}</{$}>',
        '</tpl>',
      '</{operation}>',
    '</s:Body>'
  ]
}

おわりに

SOAP プロキシの追加をデータ ストアがデータの全く新しいセットに接続を簡単になります。 すべてのオプションは、既存の SOAP サービスに接続できるようにまたは建設中の新しいものです。 開発者についての詳細を心配する必要はありません、 彼らがする必要がある、プロキシを構成およびフレームワーク) の残りの世話をします。

リソース サンプルコード

PAGE TOP

Copyright © 2006-2014 Xenophy.CO.,LTD All rights Reserved.