Какой из них является хорошим способом запроса API? - PullRequest
1 голос
/ 24 июня 2010

Когда бы вы ни смотрели на API-библиотеки для Python, кажется, что примерно половина из них просто использует:

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

и примерно половину использует:

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

Я склонен думать, чтовторая версия - «круче» (я склонен к большему количеству ОО-подходов к большинству вещей).

Есть ли преимущество или причина для использования одного над другим.Или я что-то упустил по пути.Я подозреваю, что urllib2.urlopen использует HTTPSConnection в своей реализации, так что, возможно, кто-то просто меньше кодирует от моего имени.В любом случае, я бы хотел получить обратную связь.Спасибо.

1 Ответ

4 голосов
/ 24 июня 2010

Да, urllib2 использует HTTPSConnection (или любой тип соединения, подходящий для протокола) в своей реализации. По сути, это всего лишь быстрый способ сделать самое обычное, что люди делают с httplib.

urllib2 также имеет некоторый код для обработки таких вещей, как перенаправления и запросы аутентификации, все, что вам может понадобиться кодировать вручную, если вы делаете это с простым httplib.

РЕДАКТИРОВАТЬ : В ответ на комментарий Майкла, если вы задаетесь вопросом об объекте и данных ... это зависит от того, что вы собираетесь с ним делать. Если вам нужен объект соединения (например, чтобы сделать с ним что-то особенное, может быть, соединение keepalive), тогда, конечно же, используйте способ httplib и верните объект соединения. Но если вы просто пытаетесь получить данные, просто получите данные и верните их. Если вам нравится ООП, знайте, что все в Python технически является объектом; то, что вы получаете от urllib2.urlopen, является файловым объектом, который имеет методы для извлечения его значения в виде строкового объекта или списка строк (также строковых объектов). Я думаю, что большинство программистов на Python сочли бы бесполезным использование httplib в последнем случае.

...