Lequel de ces est une bonne façon de demander une API?
Question
Chaque fois que la recherche dans les bibliothèques d'API pour Python, il semble y avoir environ la moitié d'entre eux en utilisant simplement:
response = urllib2.urlopen('https://www.example.com/api', data)
et environ la moitié en utilisant:
connection = httplib.HTTPSConnection('www.example.com/api')
# ... rest omitted for simplicity
Je tends à penser la deuxième version est « plus froide » (je suis biaisé vers une approche plus orientée objet pour la plupart des choses).
Y at-il un avantage ou raison d'utiliser l'un sur l'autre. Ou, suis-je manque quelque chose le long du chemin. Je suppose que les utilisations de urllib2.urlopen
HTTPSConnection
dans sa mise en œuvre, alors peut-être l'un est tout simplement moins de codage en mon nom. Quelle que soit la façon, j'aimerais quelques commentaires. Merci.
La solution
Oui, urllib2
utilise HTTPSConnection
(ou tout autre type de connexion est appropriée pour le protocole) dans sa mise en œuvre. Il est fondamentalement juste un raccourci pour faire la chose que les gens les plus dénominateurs communs avec httplib
.
urllib2
a aussi un code pour gérer les choses comme les redirections et les demandes d'authentification, toutes les choses que vous pourriez avoir à coder manuellement si vous le faisiez avec httplib
ordinaire.
EDIT : En réponse au commentaire de Michael, si vous vous poseriez sur les données objet vs ... ce genre de dépend de ce que vous allez faire. Si vous avez besoin de l'objet de connexion (par exemple pour faire quelque chose de spécial avec lui, peut-être une connexion keepalive), alors que, aller de l'avant et utiliser la voie httplib
et retourner l'objet de connexion. Mais si vous essayez juste d'obtenir les données, juste obtenir les données et le retourner. Si vous aimez POO, sachez que tout en Python est techniquement un objet; ce que vous obtenez de urllib2.urlopen
est semblable à un fichier objet qui a des méthodes pour récupérer sa valeur en tant qu'objet de chaîne ou une liste de lignes (aussi objets à cordes). Je pense que la plupart des programmeurs Python envisageraient un gaspillage d'efforts à l'utilisation httplib
dans ce dernier cas.