最佳外部REST API访问模式?

时间:2009-04-09 15:33:30

标签: c# rest design-patterns decorator

我参与了几个与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%的功能,并且更愿意为这些事情推出自己的代码。

2 个答案:

答案 0 :(得分:4)

这是一个很好的样本:

MSDN

REST and POX

另请参阅CodePlex上的WCF REST Starter Kit Preview 2,应该有与REST客户端相关的编码示例

在这里:REST in Windows Communication Foundation (WCF)

这个也可能有用:Sample Client Libraries for REST APIs

答案 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图设施来说真的可以做到!