2009-04-09 99 views
3

我参与了几个与Facebook和Netflix等外部服务连接的项目。在这个时候,我用来访问这些API的大多数库(包括我自己编写的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 
    } 
} 

所以我的问题是有没有更好的模式或OO主要用在这里所以每个奇异的API调用方法我没有显式调用每次基本方法是什么?

就是我正在寻找某种调用拦截模式,如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图设施!