3

我参与了几个与 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%,并且更喜欢为这些东西滚动我自己的代码。

4

2 回答 2

4

这是一个很好的示例:

MSDN 上的REST 和 POX

还可以查看 CodePlex 的WCF REST Starter Kit Preview 2,应该有与 REST 客户端相关的编码示例

在这里:Windows Communication Foundation (WCF) 中的 REST

这一个也可能有帮助:REST API 的示例客户端库

于 2009-04-09T15:40:45.277 回答
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 图工具!

于 2009-04-09T22:55:35.793 回答