世界上最伟大的投资就是投资自己的教育
Ruby 的 http request 库介绍
1. 介绍
使用 linux 的curl工具,或者是 ruby 的 net/http 库都可以发起 http 请求,然而 curl 只是一个命令行工具,ruby 的 net/http 库的功能不够强大,抽象能力不足,所以有很多开发者基于这两者之上实现了功能更为丰富和强大的库。
curl 工具是用 c 语言写的开源工具,它有提供 c 语言头文件的接口 libcurl,只要我们的 ruby 库实现这个 libcurl 的扩展,也是可以实现高性能的库的。
2. http request 库
下面我们来介绍几个比较实用且有各种特色的 http request 库。
2.1 curb
curb是一个纯 c 实现 libcurl 的库。它性能比较高,毕竟是纯 c 实现,拥有 http request 的基本功能,例如 GET 请求,POST 请求,DELETE 等请求,设置头信息,基本认证,上传文件,https,代理,除此之外,它还支持同时处理多个请求,还支持回调,设置请求的超时时间。总体而言,它的功能并不算多强大,但性能好。
2.2 typhoeus
typhoeus是一个功能超级强大的库。它是基于ethon实现的,而 ethon 是实现 libcurl 的库,所以,最终而言,typhoeus 也是纯 c 实现 libcurl 的库。ethon 对 libcurl 的实现只有很简单的功能,所以 typhoeus 对 ethon 进行了更高层次的抽象包装。
typhoeus 除了拥有基本的 http 请求的功能,还支持对下载文件的流式处理,同时发起多个请求。它表现出色的地方在于发起多个请求的并发处理,且能够把请求的结果缓存起来,这点可以结合 rails,redis 等来实现更为复杂有用的功能。除此之外,typhoeus 还能对请求的结果进行 gzip 压缩,而且它能够从文件中读取 cookie 信息。
总体而言,typhoeus 是一个性能比较高,功能比较强大的库,但需要查询很多数据的时候可以考虑用它。例如可以用它来查询 elasticsearch 的数据。
2.3 httparty
httparty是基于 net/http 库实现的。它还依赖于json和multi_xml。它的功能比较简单,响光点在于处理 json 或 xml 数据,比如由服务器返回的 json 或 xml 数据,它就可以直接解析并读取处理,它也能方便地 post json 或 xml 数据到服务器。
2.4 em-http-request
em-http-request是一个基于eventmachine的库。这个库的主要特点在于异步,性能好。它的功能也比较强大,除了基本功能,它还支持 Keep-Alive 持久性链接,和 HTTP Pipelining 链接,而能与中间件的形式存在。如果追求性能,可以考虑这个库。
2.5 excon
excon是一个基于 ruby 的标准库 socket 实现的库。它的功能强大,支持持久链接,时间超时,retry 机制,Chunked Requests,Pipelining Requests,Streaming Responses 等,由于它是基于 socket 实现的,它还支持 Unix Socket 链接,还可以在 socket 编程基础上修改请求。很特别的是,它还能和 ActiveSupport::Notifications结合。
2.6 faraday
faraday是对以下几个库的统一封装:
- Net::HTTP (default)
- Net::HTTP::Persistent
- Excon
- Typhoeus
- Patron
- EventMachine
- HTTPClient
这几个库就是相当于 faraday 的适配器或引擎,好处就是可以随意的换适配器,坏处就是,既然是统一封装,就不能照顾到每个库的特性。
2.7 rest-client
rest-client是基于 net/http 实现的高度抽象的库。它使用起来比较简单,但性能较为低下。
完结。
本站文章均为原创内容,如需转载请注明出处,谢谢。
© 汕尾市求知科技有限公司 | Rails365 Gitlab | 知乎 | b 站 | csdn
粤公网安备 44152102000088号 | 粤ICP备19038915号
Top