2009-04-09 19 views
3

私は、FacebookやNetflixのような外部サービスに接続する2つのプロジェクトに取り組んでいます。現時点では、私がこれらのAPIにアクセスするために使っているほとんどのライブラリ(私が書いたものを含む)は単一のメソッドを持っているので、特定のAPI関数を呼び出すことができます。このような何か:外部REST APIの最適なアクセスパターン

public class ExternalApi 
{ 
    public string SendMessage(criteria) 
    { 
     //do something unique to this method with criteria like 
     //like generating an xml statement or fql query 

     return SendRestRequest(modifiedCriteria); 
    } 

    public string GetData(criteria) 
    { 
     //do something unique to this method with criteria like 
     //like generating an xml statement or fql query 

     return SendRestRequest(modifiedCriteria); 
    } 

    public string SendRestRequest(modifiedCriteria) 
    { 
     //add global things to modifiedCriteria like authentication bits 
     //or wrapping the criteria in some xml or json shell 

     var request = new HttpRequest(); 
     //make the request, return data 
    } 
} 

だから私の質問は、私は明示的に基本メソッドを毎回呼び出すことないよ各特異APIの呼び出し方法におけるように、ここで使用するためのより良いパターンやOOプリンシパルありますか?

ASP.NET MVCフレームワークやActionResultsのような、ある種の呼び出し傍受パターンを探していますか?

編集1:私はWcfのような他のサービスやライブラリの機能を使うつもりはありません。これらのプロジェクトでは、これらのAPIの機能の1〜5%しか使用していません。ここで

答えて

0

私は、私の学位論文の一つにRESTクライアントを組み込む必要がありました。私は段階的なアプローチを行って、抽象的にファサードパターンを適用しようとしました

interface HTTPRequest{ 
    public void get(); 
    public void post(); 
    public void put(); 
    public void delete(); 
} 

HTTPRequestの詳細は、基本的なHTTP機能を提供し、私はその後RestClient

interface RestClient{ 
    public void create(); 
    public void read(); 
    public void update(); 
    public void delete(); 
} 

これは私のインターフェースのようなより多くのCRUDを与え作成しました。私がしたのは、カスタム機能を追加するためにサブクラス化できる基本的なRestClientクラスを構築することでした。各関数には、呼び出し元にデータを返す前に呼び出したそれぞれのコールバック関数があります。これは "createResultProcessor"のような名前で、これはRestClientのサブクラスでカスタム結果の解析などを行うために書かれている可能性があります。

生涯、十分なUML図を作ったので、いくつかのUMLダイアグラムの機能を実際に使うことができます!

関連する問題