我参与了几个与Facebook和Netflix等外部服务相关的项目。此时我用来访问这些API的大多数库(包括我自己编写的那些)都有单一的方法,所以调用特定的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 :(得分:4)
这是一个很好的样本:
MSDN另请参阅CodePlex上的WCF REST Starter Kit Preview 2,应该有与REST客户端相关的编码示例
答案 1 :(得分: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图设施来说真的可以做到!