你如何使用Restful API?

时间:2010-11-01 12:28:39

标签: http web-applications rest

当您使用其他Web应用程序Restful API时,您通常使用包装器库还是直接使用Restful API和HTTP客户端?

2 个答案:

答案 0 :(得分:2)

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

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

话虽如此,使用帮助类来解析媒体类型以生成强类型版本没有任何问题。像这样的东西,

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

不幸的是,绝大多数自称为RESTful的api都不是。它们不尊重自我描述和超媒体约束,因此它们很难以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

答案 1 :(得分:1)

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

如果您使用的API没有现有的库,那么您应该考虑编写自己的API。