要用 Faraday 還是 Net HTTP 呢?
喜歡作者的文章嗎?馬上按「關注」,當作者發佈新文章時,思書™就會 email 通知您。
思書是公開的寫作平台,創新的多筆名寫作方式,能用不同的筆名探索不同的寫作內容,無限寫作創意,如果您喜歡寫作分享,一定要來試試! 《 加入思書》
思書™是自由寫作平台,本文為作者之個人意見。
給本文個喜歡
或不
關於作者
很久以前就是個「寫程式的」,其實,什麼程式都不熟⋯⋯
就,這會一點點,那會一點點⋯⋯
看看作者的其他文章
看看思書的其他文章
在 Rails 或是 Ruby 中,少不了要讀寫網路資料,大家最熟悉的應該就是 Net::HTTP,下面就是一段很典型的 Net:HTTP code
使用 Net:HTTP 沒什麼不對,但是久了,你就會看到有人用 Faraday,問題來了,為什麼「他們」要用 Faraday? Faraday 又是什麼呢?
原來有這麼多種 HTTP clients
在 Ruby Toolbox 中,有列出了最少 25 個 HTTP clients,這些 HTTP clients 基本上都有不同的使用理由,排名前幾名的,大概可以先分成以下這幾種:
net.use_ssl = true
,不然就出現 exception error。所以各有優缺點,那我要用那個呢?
我覺得初學的人,還是要用 Net:HTTP, 原生的 Ruby library,好處是網路上有很多的參考資料,容易找到問題,對學習者是很重要的,用 Net:HTTP 會要處理很多細節,但是這也是重要的學習過程。
lostisland/faraday — Simple, but flexible HTTP client library, with support for multiple backends. - lostisland/faraday
GitHub
實務上選擇,我覺得 Net:HTTP 還是一個首選,畢竟,以後找人維護比較方便,但是如果考量到未來改變的可能性,Faraday 就是一個很好的選擇,它也是 Ruby toolbox 列表中排第一名的,畢竟,如果將來需要改用其他的 client,Faraday 只要用以下一行指令就好:
這樣,你的程式就是用 typhoeus 變成多執行緒了,Farady 也可以省下很多碼,少打些字,對熟悉的工程師,會省些開發時間更 debug。還有一個好處是,換其他的 HTTP clients 後,連 exceptions 都不用改,Faraday 會作轉換。
Faraday 的文件還真是很長,有空是一定要好好看看啦,但是我是很健忘的人,還好,網路上總是有很多好心人,以下就是我找到由 mislav 在 GitHubGist、及、「我的跟我找到的其他人寫的」作弊單:
Faraday SSL example — Faraday SSL example. GitHub Gist: instantly share code, notes, and snippets.
Gist
其他還有一些可以考慮的 HTTP clients:
httparty
jnunemaker/httparty — :tada: Makes http fun again! Contribute to jnunemaker/httparty development by creating an account on GitHub.
GitHub
目前 Ruby toolbox 星星最多的,4,697 星,比 faraday 都高,好處就是簡單方便好用,就像他的名稱一樣,好用到像是開 party,如果只是使用簡單的 HTTP 功能,這個真的是很方便,強烈建議.
http.rb
httprb/http — HTTP (The Gem! a.k.a. http.rb) - a fast Ruby HTTP client with a chainable API, streaming support, and timeouts - httprb/http
GitHub
這個 client 非常的吸引我,我幾乎就要改用它了,最主要就是他所說的效能:
上面這個表是我從它的 Gem 說明中 copy 下來的,效能竟然比原生的 Net:HTTP 好,很接近以 libcurl 為基礎的 client,再加上,他有非常好的 streaming 能力,要不是它不能跟 Faraday 連接,幾乎完美,如果對上傳下載有需求的開發,我一定會考慮用這個的,有一篇 Http.rb is Great - By Janko Marohnić HTTP.rb 有很詳細的說明,有興趣的讀者可以參考。
rest-client
目前 Ruby toolbox 星星第二多,4,520 星,跟 HTTParty 一樣算簡單好用的,但是要另外處理 JSON,我覺得要用這個不如用 httparty,又加上效能好像不好,除非你跟 Sinatra 很熟,用這個的理由好像不高了。
Ruby 的社群真是很大,拜大家的貢獻,很幸運的有很多選擇,到底那個最合你的愛,還是要自己試用才對,有選擇真好!