2011-01-18 11 views
2

私は外部RESTサービス(Vimeo REST API)を呼び出しています。サービスの応答はJSONオブジェクトです。アプリケーションの1つのビューで複数のビデオを呼び出すと、サービスに複数の呼び出しが行われる可能性があります。Ajaxが非同期コントローラ経由でブラウザから呼び出します

私は、各ビデオは、そのIDを持っているとして、(ブラウザからRESTサービスに作らを呼び出す個々の動画をロードするためのjQueryのAJAX呼び出しを使用して、このような状況

  1. で、次のアーキテクチャを使用しての長所と短所を評価したかったですコントローラーにREST呼び出しを行うためにansynchronousコントローラのアクションを使用して、vedios

ノートを表示

  • )の詳細を取得するために必要な唯一のものされている:私は必要としないシンプルなAPIサービスを使用しています認証。

  • 答えて

    3

    AsyncControllerは、HTTP要求を非同期で処理する目的ではなく、長時間実行されるサーバー側プロセスを実行する目的で設計されています。 RESTサービスへの単一リクエストの作成は、長時間実行されているサーバー側プロセスである場合とそうでない場合があります。

    したがって、サーバー側またはクライアント(ブラウザ)から直接RESTリクエストを行うかどうかにかかわらず、必ずしもAsyncControllerを使用する必要はありません。通常のControllerがその仕事をする可能性があります。

    ビデオリクエストの処理方法は、ビジネスレイヤの構造によって異なります。ビジネス層での処理のためにVimeoのビデオに関する知識がある場合は、Webサービスコールをサービス側にすることをお勧めします。それ以外の場合は、クライアント上にビジネスロジックがあるため、保守が困難になる可能性があります。

    一方、あなたのVimeoビデオは自己完結型のUIウィジェットの一部でしかない場合、予期せぬ結果を招くことなくクライアント上で完全に要求を処理することは安全です。

    私は、VimeoへのWebサービスコールがFlashファイルなどを受け取っていると仮定しています。サーバーからVimeoサービスコールを発信するには、より多くの帯域幅とより多くのメモリが必要になります。データがサーバーに送られなければならないためです。あなたはそれをサーバ側をすれば

    、これは起こる:

    1 - Browser sends HTTP-Request to YourApplication 
    2 - YourApplication sends HTTP-Request to Vimeo's WebService 
    3 - Vimeo's WebService sends big HTTP Response with the Video data to YourApplication 
    4 - YourApplication sends big HTTP Response with the Video data to Browser 
    
    * If you choose to do it this way, this might be the point at which it makes sense to use an AsyncController 
    

    あなたはそれをクライアント側を実行すると、この問題が発生した:これは、すべてのクライアント側はそれをやってのように見える

    1 - Browser sends HTTP-Request to Vimeo's WebService 
    2 - Vimeo's WebService sends big HTTP Response with the Video data to the Browser 
    

    は、より良い。しかし、ビジネスロジック全体の問題があります。これは、Ajaxリクエストを同期コントローラ・アクションに送信してビジネス・ロジック処理を行い、RESTサービスへのコールのURLをブラウザに戻すことで解決できます。したがって:

    1 - Browser sends AJAX request to YourApplication 
    2 - YourApplication handles business logic and sends the URL of the REST request to Browser 
    3 - Browser sends AJAX request to Vimeo's WebService 
    4 - Vimeo's WebService sends big HTTP response with the video data to the browser. 
    

    これはおそらくあなたの最善の策だと思います。

    0

    クロスドメインのajax呼び出し(開かれたページはyoursite.comドメインからで、vimeo.comから呼び出しを行ったページ)はブラウザで禁止されているため、最初の方法で問題が発生することがあります。 、あなたはVimeoのAPIによって提供さJSONPを使用することができますは、第二の方法に加えて

    http://vimeo.com/api/docs/response-formats

    0

    あなたは、単一のアクションメソッドのVimeoののRESTサービスへの複数の呼び出しを行っている場合は、それが使用するための良い候補のように思われます非同期コントローラ。これには2つの利点があります:Vimeoサービスへの複数の呼び出しを並行して実行できるようになり、サーバーがVimeoからの応答を待っている間に要求を処理しているスレッドを解放し、他の要求を処理できるようになります。

    ここでのトレードオフは、クライアントコードまたはコントローラコードに複雑さを加えることだと思います。サーバー側でリクエストを行うもう1つの利点(非同期であるかどうかに関わらず)は、データを潜在的にキャッシュし、将来要求を処理するために必要な高価なWebサービス呼び出しの数を最小限に抑えることができます。これは、実際にデータをキャッシュすることが現実的な選択肢であるかどうかによって異なります。

    関連する問題