2010-11-01 30 views

回答

2

这是一个很难回答的问题,主要是因为在目前的行业状况下,正确的答案是非常不切实际的。

在我看来,正确的答案是你不应该使用包装API。统一的接口是HTTP,并且应该是客户端针对的编程模型。

话虽如此,让解析媒体类型来生成强类型版本的助手类没有什么问题。就像这样,

var response = HttpClient.Get(linkTofoo); 
if (response.ContentType =='application/foo') { 
    var strongFoo = FooHelper.Parse(fooResponse); 
    HandleFoo(strongFoo); 
} 

不幸的是,绝大多数声称是RESTful的apis都不是。他们不尊重自我描述和超媒体约束,因此他们很难以RESTful的方式与他们交互。它们要求您执行客户端URI构造,并且事先知道将从端点返回的类型。

令人遗憾的事实是,在许多API中,您别无选择,只能使用提供的客户端代理库。这不应该是这样。

如果您正在寻找评估客户端库,请确保它是无状态的。客户端库不应该开始管理返回对象的生命周期。 Http缓存就是这样做的,所以除非它是一个超级智能库,当缓存表示过期时可以使对象引用失效,否则应避免使用任何有状态的客户端库。

e.g. 

var foo = remotelibrary.GetFoo(233); 
var bar = foo.bar; // If this causes an HTTP request 
var barcopy2 = foo.bar // and this doesn't because it already has a reference to bar 
         // I would be very leary of using this library 
+0

我会说可以编写/使用为特定超文本应用程序编写的库,例如AtomPub – Mike 2010-11-01 14:04:25

+0

@Mike是的,如果这个库是为HTTP上的特定协议编写的,那么很可能它会在封面下正确使用HTTP,所以你应该是安全的。 – 2010-11-01 14:38:57

1

从长远来看,使用库几乎肯定会更好。这使您可以抽象出设计的宁静,并忽略整个HTTP业务。

如果您使用的任何API都不存在现有的库,那么您应该考虑编写自己的API。

相关问题