Ajaxを使ってユニバーサルWebサービスのアーキテクチャを実装するこの記事は、aWebサービスアーキテクチャの構築に焦点を当て。前回の記事では、どのようにどのようにし、その適切なURLをaWebサービスを構築するための基礎を含む全体的なアーキテクチャを作成することを学んだ。しかし、それが何aWebサービスの詳細を説明していないとしない理由aWebサービスは、何をすれば、この資料では、具象状態転送(RESTの)ベースのWebサービスを開発するためのガイドラインについて説明します。具体的には、次の点をカバー: •構造aWebサービスは、特定のタスクを解決するために •結合のWebサービスへのフィルタや、データを修正 •結合のWebサービスのマッシュアップを作成する問題在庫の中で問題を見てみましょうベースのWebサービスを構築する問題の例として取引アプリケーションです。問題は、クライアントの数を、リアルタイムと注文情報が歴史的にアクセスする必要があります。あなたがそれに変更を加えずに、ミドルウェアソケットサーバを活用することができますaWebサービスのフロントエンドを追加します。一方、資源の無駄のようなサービスへの全体的なWebサービスのコンテキストでは、フロントエンドを追加するように見えるかもしれませんが、ここに意味があります。この記事は、理由を探る。
ソリューションパート1 ソリューションの実装の1つは、すでに既存のソケット技術の撮影を含み、aWebサービスを構築するために技術を使って。イラスト目的のためには、この資料では、1つのテクノロジは、Javaを使用します。を選択することができます。NETやC + +は、実際の技術は重要ではありませんので、公開されたWebサービスは、技術によって消費されることができるWebサービスに対応しています。 Webサービスを構築する最初のアプローチしてthegeneral操作を定義するためにこれらの一般的な操作をいくつかの技術を使って実装されます。 取引のアーキテクチャは、クラスの型TradeServletは、Javaサーブレットの実装と呼ばれる高レベルのビューでは、Webサービスを提供します。これらのJavaサーブレットは、HTTPハンドラの実装方法はJava技術に精通してください。 TradeServletリアルタイムのデータを要求し、注文要求インターフェイスITraderの名前を使用して。プログラミングの観点から、インターフェイスを使用して適切なアプローチのためには、Bridgeパターンを使用することができますされている歴史的な要求を実行します。 Bridgeパターンは、トレーディングの実装から取引の意思を切り離すことができます。 Webサービスアーキテクチャの高レベルのビューでは、タイプProviderTrader1ソケット層を介して適切な機能の呼び出しを実装します。 Bridgeパターンの理論今日はその場しのぎの解決策としてのソケット呼び出しを使用することができますが、明日ProviderTrader1新しい実装(などと同様に、Webサービスとミドルウェアを置き換える置き換えてください)TradeServletまたはインターフェイスITraderの実装を変更することなく。 クラスProviderTrader1 ITraderインターフェイスを実装し、取引システムは、トレーダーから橋をソケットに中立的なサブシステムを提供します。別のプロバイダは、従来のデータベースへのアクセスに使用することができる。プロバイダーの数に関係なく、Webサービスは、トレーダーは中立的なサブシステムと対話します。そして、ソケットを使用してトレーダーは中立的なサブシステムの相互作用に基づくトレーディングシステムの理論的には、この方法は音が、あまりにも複雑であることに苦しんでいる。アプローチの問題は、フォーカスの問題です。トレーダーは、サブシステムの例では、フォーカスは、サブシステム、およびされているWebサービス層アドオントレーダーサブシステムです。理論的には、Webサービスを追加、これは、トレーダーは、サブシステムのすべてを管理する上でも、必要に応じていません。 AjaxベースのWebサービスアプリケーションのコンテキストでは、これは間違ったアプローチのための焦点は、Webサービスがあり、そしてそれは、アドインしてはならない。 ソリューション第2部 トレーダーサブシステムへの解決策も定義するためにも、特定の技術を使用してトレーダーは中立的なサブシステムの実装です。トレーダーサブシステムのWebサービスのシリーズには、サブシステムに組み立てることができる変換されます。 AWebサービスベースのトレーダーは、サブシステムは、まだインターフェイスを必要とするインターフェイスは、HTTP Webサービスレベルで定義されています。建築用語では、ITrader実装のWebサービスに変換されます。アーキテクチャに直接クラスTradeServletからProviderTrader1とProviderTrader2のは、すでに既存の実装を再利用することに依存します。それぞれの実装では、とトレーダーは中立的なサブシステムが定義され、結果セットのメソッド、プロパティのセットを提供します。セットは、Webサービスに互換性のあるものに変換されます。aWebサービスは、メソッド、プロパティ、およびその結果を使用する。より高いレベルの後で、別の技術のトレーダーサブシステムには、Webサービスをアセンブルします。 の実装では、TraderユニバーサルWebサービス取引Webサービスが何時に完全なWebサービスソリューションの実装を期待するの例です。この記事は、これらの残りの部分をカバー: •URLを定義する •には、送信することができますおよび受信のフォーマットを識別する どのように相対URLをサポートするために• トレーダーアプリケーションのURLを定義するのトレーダーは、Webサービスの進化を続けるとアウトラインの重要な部分、すなわちみようのURLおよびサポートされるデータのフォーマット。トレーダーのアプリケーションは、次のベースURLの公開:
/サービス/コントローラのベースURLは、サーバー側では、エンジンを管理するために使用されます。コントローラのURLを手動でWebサービスの背後にあるコードをリセットすることができます。例えば、トレーダーは、アプリケーションの場合には、/サービス/コントローラには、取引のインターフェイスを提供するソケットには、Webサービスの実装を接続します。あなたのURL /サービス/コントローラ/を使用することは、サーバーコードを起動する起動し、あなたが/コントローラ/停止は、サーバーコードを停止するためのURL /サービスを利用する。ただし、この方法は使用できません。なぜなら、それは、識別子を開始思われると停止にはない資源です。電灯のスイッチと比較する。光スイッチは、2つの状態:オンとオフにして、単一のリソースです。それはない 〜でない 2つのリソースごとに1つの状態を持っている。を起動すると、サーバーコードを停止するクエリパラメータを使用します。サーバーのコードを起動するには、/サービス/コントローラは、コンピュータグラフィックスインターフェイス(CGI)のパラメータを操作=開始URLには、動詞のPOSTを実行します。サーバーコードを停止するには、URLが同じままとしては、CGIパラメータを変更するための行動=停止動詞はありません。ので、いくつかのサーバサイドのプロセスを実行しているプロセスが何をすべきか動詞のPOSTは、適切なされているデータに依存送信されます。動詞のURLのGET /サービス/コントローラの呼び出しは、サーバーコードのステータスを返します。 もしあなたのアプリケーション内のサーバーのコードを複数の部分の場合、次のような子供のURLを作成する:/ services/controller/code1および/ services/controller/code2を制御したいのですが起動するためのガイドラインについては、停止、およびステータスを取得個々のサーバーのコード部分は同じままです。多くの場合、サーバー側のコード部分は、ベースディレクトリの場所など、どのように多くのスレッドを開始する設定ディレクティブを必要とする、などなど。これらの設定ディレクティブは、通常、構成ファイルに格納されています。これらのディレクティブを指定することができる必要がありますときに、サーバーのコードを開始または停止します。たとえば、もしあなたが、スレッド数を指定する場合=開始&スレッドカウント= 12は、サーバーのコードを起動するためのCGIパラメータのアクションを使用することします。 場合は、それらを照会することができますし、取得したときに、サーバーの状態情報が要求されている機能の設定ディレクティブを定義する必要があります。場合は、可能性のフィルタを/サービス/コントローラ?ステータス=スレッドカウント+稼働率などのクエリパラメータを使用して、サーバー変数の個々の値は、クエリにしたい場合は、ベースURL /サービス/リアルタイムの株価を管理するためのリアルタイム使用ティッカーデータです。場合は、ティッカーでのGM興味のある方の例については、場合は、/リアルタイム/ GMは、リアルタイムの情報を取得するためのURL /サービスを利用すると思います。これは、URLは簡単です、この基本が、簡単に誤解を招くようです。たとえば、ユーザーが実行してURLに/サービス/リアルタイムで、何が返されるのGETよう希望ですか?なぜなら、ソフトウェアのピースの限界に近づいているなら、これは厄介な問題です。理論的な観点は、すべてのティッカーをリアルタイムでデータが返される結果のGET呼び出しから。これは理論的にはいいですね、それは完全に非現実的だ。文字通り、複数の取引所に株式の何千ものです。をリアルタイムで1つのリクエストのGETリクエストを使用して、すべてのテロップをはじめ実質的に不可能です。 これは、URLのどこに理論と実践競合している例です。このソリューションは、リアルタイムデータへの参照としては、ルートのURLをサポートしていません。ルートURLが使用可能なすべて、リアルタイムのリンクのリストを返すために使用されます。ルートURLになるので、テロップの数千人以下を必要とするリアルタイムの情報が何であるかを示すために使用されていません。ルートURLをここで、リアルタイムのデータを取得することができますへのリンクが返されます。この株式のティッカー数千人へのリンクを返すという意味だ。また、ティッカーの両方のリンクを省略企業の説明を返すには、root URLを使用することができます。ほとんどの人が相場知っているのではなく、会社の名前を知っていますか、この検索エンジンの建物で、役立つだろう。個別のURLへのルートURLを委任するには、Webサービスをリアルタイムで管理することはできませんで問題を作成のためのフィードすべての取引上のすべての株価ティッカー。 単純に言えば、単一のコンピュータ上のすべての株式を追跡できません。追跡するすべての株式は、この記事に取得されません馬力の膨大な量の必要があります。唯一の解決策のトラックの場合、ソリューションを要請することです。トラックではない株式は当初、リアルタイムデータのために追跡されている場合を要求したソリューションです。リアルタイムデータのみの場合は、HTTP GETは、特定の株式上で実行され追跡される時間。これは、リアルタイムのフィードは、サーバーからクライアントになるデータの構成は、HTTP POSTまたはDELETEまたはPUT、リアルタイムのフィードには意味がありません。サーバーは、クライアントに比べても相場のリアルタイムデータを生成するために、他からの情報に興味がない。の場合よりも実行されるのGET、他の動詞は、サーバーは、HTTP 500エラーが生成されます。 /サービス/受注ルートURLを指定するための処理です。株式のコンテキストでは、注文の処理はすべてのHTTP動詞を使用することができます。現在では、HTTPのPUTを提出する、およびHTTP DELETEのHTTPのためのステータスを取得するGET順序を変更する順序を削除するには、HTTP POSTを使用します。 各注文の例の一意の識別子として表現される、/ services/orders/1232445。一意識別子は数値である必要はありませんが、それは英数字を使用することができます、あるいは世界的に複雑なアモーレ一意識別子(GUID)です。ルートURLをすることができます多くの受注は、文字通りの注文数百万人ということが、ホストがあります。注文URLの場合は、それはあなたの能力をフィルタ処理命令は、特定の状態に応じておくことが重要だ。現在の日付によると、受注を整理するに誘惑されるかもしれませんが、私は反対に助言する。するたびに、その自然な形でアクセスできる必要がルートのURLは、コレクション内のデータを作成しています。ブログのアプリケーションでは、日付順を整理するのは当然だ。ただし、在庫アプリケーションの自然な順序で、日付順ではなく、むしろ順序IDです。したがって、ルート受注のURLは文字通りの注文に関連付けられ、数百万になります。もしアプリケーションが起こるすべての注文の場合、サーバーはすべてのこれらの命令を与えることが必要になりますお願いします。 SQLデータベースの場合では、もしテーブルのレコード数百万人に百万人おり、誰かがテーブルを選択*からのクエリは、データベース要求しないが実行される、"あなたは?"データベースを先に行くし、選択についての確認すべてのレコードにもかかわらず、効率的ではないかもしれません。 あなたの命令へのアクセスを最適化するためのフィルタを作成します。たとえば、もし2006年には注文をすべて検索したい場合は、/サービス/注文/ URLを実行するだろうか?年= 2006。また、表示のURLに/ services/orders/2006などのクエリパラメータを変換することができます。かどうかは、クエリパラメータ、またはビューのURLのアプローチを使用するあなたの好みに依存しますがその問題を証明する1つのフィルタであり、そのユーザーに関連します。任意の順序のシステムでは、複数のユーザーがいる。株式取引アプリケーションは異なっている。どのような在庫になります取引注文アプリケーションがより複雑には、注文は自動的に達成されていません。これは今までとは満たされないかもしれないので、中止の可能性があります。もし注文システムトレーダーごとにフィルタリング機能がない場合は、潜在的な状況にはあるトレーダーは、別のトレーダーはポジションを開く可能性を実行する可能性のある位置を閉じます。 理論的には購入することが、同じ時間では、将来の株式を売却する(と呼ばれる 洗濯取引)を購入し、同じ時間で販売することで、どちらも得ても失うことは、少なくともあなたの売買委託手数料以外の。ので、それのようにある位置にアクションが実際にはされていませんようになります購入して2つの別のブローカーを通じて同じ時間での販売このテクニックは、違法です。したがって、トレーダーらに自分たちの命令には、結び付いており、受注のトレーダーに結びついています。URLは受注/サービスの論理的な洗練された/受注/ [トレーダー]。この洗練されたURLがある場合のURLは、のように、この例では、他のニーズを満たすを作成する必要が示すように、法務部門の必要があります。 このURLの改良により、ルートのURLは/サービス/注文時代遅れになるんじゃないかと、クエリのパラメータとビューのURLなどは、まだ適用されます。違いは、URLは、トレーダーの一意の識別子が含まれる注文情報にアクセスすることです。その場合は、URLには、個々の動詞は、別のURLのレベルで何をするかを介して行こう洗練を使用するつもりだと仮定する。ルートURLのレベル(/サービス/命令)でのみ、HTTP GETを適用されます。このレベルでは表示したい命令をすることができますのみをフィルタです。これは、ルートURLコレクションのURLがすることはできませんPOSTのため、ルートのURLは、トレーダーが欠けていると、することはできませんPUTのIDです。最後に、あなたは、これは、すべての命令やトレーダーの削除の原因とDELETEのことはできません。 1つ下のレベルには、個々のトレーダー(/サービス/注文/トレーダーabc)をルートURLだろう。個々のトレーダーのためのルートのURLでのみ、HTTPのGETやPOSTを適用します。あなたと可能性のあるフィルタは、すべての取引は、トレーダーした取得するためにGETを使用します。取引は、特定の月に、年、または1日行わたとえば、あなたがフィルタです。あなたのURL / services/orders/trader-abc/2006または/サービス/注文/トレーダーABCの?年= 2006を使用することができます。これは、ユーザーの命令なしに注文を送信することができますは、HTTP POST動詞、適用されるIDです。注文の提出場所に注文のステータスを取得することができるURLを返します。場合は、HTTP POSTトレーダーABCの場合、URL /サービス/注文/ trader-abc/123456返される可能性が送信されているURLに/サービス/注文/。 は、すべてのルートのURLで注文を削除すると、ルートのURLで動詞DELETEのを適用するかは、動詞を意味しますので、少しトリッキーです。の場合は、DELETE動詞を適用している。実質的に言えば、この非常に病気であると助言した。選択クエリパラメータを介してアイテムを削除することができるには、DELETE動詞をサポートする理由の1つとされているフィルタとして機能します。たとえば、あなたのURL /サービス/命令を使用することは1年ですべての注文を削除するには/トレーダーABCの?年= 2006。通知は、URLを選択して削除するために使用するように、URLを選択を選択するために使用と同じです。違いは、動詞(DELETEの対のGET)です。それは共通の問題の発生はURLにマッチしますが、展覧会では動詞に応じて異なる動作です。取引システムのコンテキストでは、削除命令の制限があるだろう。の場合で実行している場合は、順序を削除することはできません。残りの動詞PUTのルートURLレベルでの大部分が適用されないためです。場合は、サーバーには、リソースの完全な表現を送信するには、動詞のPUTを使用します。ルートのURLの場合は、このサーバーへのすべての注文を送信するということです。サーバーには、完全な命令を送信することはできません命令を送信すると問題。注文が完了されている順序識別子(注文掲載されている時)にはない計算されます。したがって、サーバーに新しい注文を送信するためのPUTを使用することはできません。 PUTの既存の順序を変更することが使用するもう一つの理由。一般的に、これは合法的な使用ですが、それは取引システムのコンテキストでは間違っています。場合は、現在実行されて順序を変更しようとするとどうなりますか?がない単純な遡及し、そのためのシステムのコンテキストでは、注文のソリューションよりも多くの問題を引き起こす可能性が変更されます。適切な取引ソリューションは、順序を削除し、新しいものを作成することです。/ services/orders/trader123/order345を表すURLを参照するためのリソースです。一般に、すべてのHTTP動詞を適用することができますが、あなたのビジネスプロセスを反映するように制限を設ける必要があります。これは、注文アプリケーションでは、順序を決定することはできませんトレーダーは、アプリケーションの場合は、新しい順序では、PUT動詞を使用することができませんでした前の時間のIDです。また、そのための順序を変更する、ことを意味するとは、取引システムのコンテキストでは、順序のいずれか、または実行することができますがキャンセルされる既存の秩序のPUTすることはできません。あなたが適用できるし、注文のキャンセルを定義するには、DELETE動詞を使用します。場合は、POSTがキャンセルされている順序を表しますPOSTのためにのみ意味をするか。のGET命令の実行ステータスを取得するために使用される。 /サービス/歴史的なルートのURLは、ミドルウェアからの歴史的なデータを取得するために使用を表します。歴史的なフィードのユニークなガイドその中には1つだけ適用される動詞、すなわち、GETです。単語 歴史 すでに起こったことを意味し、あなたの歴史を書き換えることはできません。場合は、PUTやDELETE動詞を使用しようとする歴史の書き換えが発生します。場合は、洗練されたクエリを作成するためのPOSTを使用するPOSTの適用される。たとえば、およびフィルタの履歴データの基準の設定に応じてスキャンするようにPOSTを使用することができます。できるだけ効果的歴史的なWebサービスを確認するには、機能を洗練されたクエリを定義する必要があります。 RESTを行うに装備していないされているので、RESTは、HTTPプロトコルに依存します。これは、データのクエリにはRESTを使用することができないと言うことではないが、その場合は、配管を記述する必要があります。たとえば、すべての株式は、特定の範囲内で5日間の10のうち取引を見つけたいと言う。かかわらず、必要なしたい場合は、REST呼び出しは、リレーショナルクエリの代議員は、データをリレーショナルデータベースに格納されると仮定。もう一つのアプローチは、データベース、XMLベースを使用することの形式で、クエリのこの種のコードには、必要があるこの先の時間を決定する。 XML形式でデータを格納する利点は、ベースのデータベースを簡単にXMLの階層へのクエリは、HTTPマップすることができます。 XMLデータベース上のXMLクエリ言語(XQLは)とXPathを使用して、簡単に配管を記述することなく、洗練されたクエリを実行することができます。あなたは、歴史的なWebサービスのパワーをどのようにクエリを実装するにある覚えておく必要があります。 データの書式設定は何を送るか?これまでのところ、すべての例では、WebサービスのURLの面ではなく、書が受理され、生成されたコンテンツの用語で説明されている。ブログアプリケーション第4条で導入された場合には、Webサービスのアトムのデータは、MIMEタイプのアプリケーションを使って生成/原子+ xmlです。ビルドするとき、REST Webサービスは、MIMEタイプは重要ですが、これはどのようにデータが受信され、送信さが決まります。ブログのアプリケーションの場合において、AtomのURLと呼ばれ、それをXMLストリームを生成します。理論的には、RESTの開発戦略は、technologyneutralですaWebサービスを作成するとされている右のクエリに対して、適切なコンテンツを生成します。 記事は、ソニアLandeを提出 免責事項:弊社のウェブサイトは、この資料の内容については責任を負いません。 Webarticles無料の情報リソースです。 重要: この記事は、実装"ユニバーサルWebサービスのアーキテクチャ"の自動ソフトウェアによって翻訳されたAjaxを利用した。大変申し訳ございませんが発生した可能性があります任意のスペルミスを感じている。お客様のご理解いただき、ありがとうございます。
|
|||||
| Online: 326 users browsing the articles directory |
|
|