2010-06-24 47 views
1

每當看着用於Python API庫,那裏似乎是他們簡單地用大約一半:以下哪一種是請求API的好方法?

response = urllib2.urlopen('https://www.example.com/api', data) 

,並使用約一半:

connection = httplib.HTTPSConnection('www.example.com/api') 
# ... rest omitted for simplicity 

我傾向於認爲第二個版本是「涼「(我偏向於大多數事物的OO方法)。

是否有利用或理由相互使用一個。或者,我錯過了一些東西。我懷疑urllib2.urlopen在其實現中使用HTTPSConnection,所以也許我只是代表我編寫較少的代碼。無論如何,我都會喜歡一些反饋。謝謝。

回答

4

是的,urllib2使用HTTPSConnection(或任何類型的連接適用於協議)在其實施。這基本上只是一種快捷方式,可以讓人們用httplib做的最常見的事情。

urllib2也有一些代碼來處理像重定向和身份驗證請求的東西,所有的東西,你可能必須手動編碼,如果你是用純httplib

編輯:迴應Michael的評論,如果您對物體與數據感到疑惑......那麼這取決於您將如何處理它。如果你需要連接對象(比如做一些特殊的事情,也許是一個存活連接),那麼一定要繼續,使用httplib的方法並返回連接對象。但是,如果您只是想獲取數據,只需獲取數據並將其返回即可。如果你喜歡OOP,那麼從技術上講,Python中的所有東西都是一個對象;你從urllib2.urlopen得到的是一個類似文件的對象,它有方法將其值作爲字符串對象或行列表(也包括字符串對象)檢索。我認爲大多數Python程序員會認爲在後一種情況下使用httplib是一種浪費。

+2

確實如此,但並沒有真正回答他的問題。他想知道從API調用返回對象是否有優勢,而不僅僅是返回數據(我認爲) – 2010-06-24 17:43:17

+0

@Michael:如果是這種情況,我想我誤解了這個問題。 – 2010-06-24 17:45:00

+0

'urllib2.urlopen'返回一個類似文件的對象,而不是一個字符串。 – orokusaki 2010-06-24 19:26:59