Материалы для дальнейшего чтения. HTTP веб-сервисы являются программными способами передачи и получения данных от удаленных серверов, не используя ничего кроме операций HTTP
- О модуле pickle:
- PEP 238: Изменение оператора деления
- О формате JSON и модуле json:
- json — JavaScript Object Notation Serializer
- JSON encoding and ecoding with custom objects in Python
HTTP и веб-сервисы
Погружение
HTTP веб-сервисы являются программными способами передачи и получения данных от удаленных серверов, не используя ничего кроме операций HTTP. Если вы хотите получить данные с сервера используйте HTTP GET; если вы хотите отправить данные на сервер, используйте HTTP POST. Более продвинутые функции API HTTP веб-сервиса позволяют создавать, модифицировать, и удалять данные, используя HTTP PUT и HTTP DELETE. Иными словами, «глаголы» встроенные в HTTP протокол (GET, POST, PUT и DELETE) могут отображаться на операции уровня приложения для получения, создания, модифицирования и удаления данных.
HTTP web services are programmatic ways of sending and receiving data from remote servers using nothing but the operations of HTTP. If you want to get data from the server, use HTTP GET; if you want to send new data to the server, use HTTP POST. Some more advanced HTTP web service APIs also allow creating, modifying, and deleting data, using HTTP PUT and HTTP DELETE. In other words, the «verbs» built into the HTTP protocol (GET, POST, PUT, and DELETE) can map directly to application-level operations for retrieving, creating, modifying, and deleting data.
Главное приемущество такого подхода это простота, и эта простота оказалась популярной. Данные — обычно XML или JSON — могут быть построены или сохранены статически, или динамически сгенерированы скриптом на стороне сервера, а все современные языки (включая Python, конечно же!) включают в себя HTTP библиотеку для их загрузки. Отладка также проста; потому что каждый ресурс в HTTP веб-сервесе имеет уникальный адрес (в форме URL), вы можете загрузить его в ваш веб браузер и немедленно увидеть сырые данные.
The main advantage of this approach is simplicity, and its simplicity has proven popular. Data — usually XML or JSON — can be built and stored statically, or generated dynamically by a server-side script, and all major programming languages (including Python, of course!) include an HTTP library for downloading it. Debugging is also easier; because each resource in an HTTP web service has a unique address (in the form of a URL), you can load it in your web browser and immediately see the raw data.
Примеры HTTP веб-сервисов:
Examples of HTTP web services:
Python3 располагает двумя библиотеками для взаимодействия с HTTP веб-сервисами: http.client — это низкоуровневая библиотека, реализующая RFC 2616 — протокол HTTP. urllib.request — это уровень абстракции, построенный поверх http.client. Она предоставляет стандартный API для доступа к HTTP и FTP серверам, автоматически следует HTTP редиректам (перенаправлениям) и умеет работать с некоторыми распространенными формами HTTP аутентификации.
Python 3 comes with two different libraries for interacting with HTTP web services: http.client is a low-level library that implements RFC 2616, the HTTP protocol. urllib.request is an abstraction layer built on top of http.client. It provides a standard API for accessing both HTTP and FTP servers, automatically follows HTTP redirects, and handles some common forms of HTTP authentication.
Итак, какую же из ни следует использовать? Никакую. Вместо них лучше использовать httplib2 — стороннюю библиотеку с открытым кодом. Она более полно по сравнению с http.client реализует HTTP и в то же время предоставляет лучшую чем в urllib.request абстракцию.
So which one should you use? Neither of them. Instead, you should use httplib2, an open source third-party library that implements HTTP more fully than http.client but provides a better abstraction than urllib.request.
Чтобы понять, почему вашим выбором должна стать httplib2, сначала нужно понять протокол HTTP.
To understand why httplib2 is the right choice, you first need to understand HTTP.
Особенности HTTP
14.2 Features of HTTP
Есть пять важных особенностей, которые все HTTP клиенты должны поддерживать.
There are five important features which all HTTP clients should support.
Кэширование
14.2.1 Caching
Самая важная вещь в понимании о любом веб-сервисе это то, что доступ в сеть невероятно дорог. Я не имею в виду «доллары и центы» (хотя ширина канала не является бесплатной). Я говорю о том, что для открытия соединения, отправки запроса, и получения ответа от удаленного сервера требуется очень много времени. Даже на быстром ширококанальном соединении, задержка (время на передачу запроса и началом получения ответных данных) может по прежнему быть выше, чем вы ожидали. Ошибки роутеров, пропажа пакетов, хакерские атаки на промежуточные прокси — в интернет не бывает ни одной спокойной минуты, и с этим ничего нельзя поделать.
The most important thing to understand about any type of web service is that network access is incredibly expensive. I don’t mean «dollars and cents» expensive (although bandwidth ain’t free). I mean that it takes an extraordinary long time to open a connection, send a request, and retrieve a response from a remote server. Even on the fastest broadband connection, latency (the time it takes to send a request and start retrieving data in a response) can still be higher than you anticipated. A router misbehaves, a packet is dropped, an intermediate proxy is under attack — there’s never a dull moment on the public internet, and there may be nothing you can do about it.
HTTP был спроектирован с учетом кэширования. Есть целый класс устройств (т. н. «кэширующие прокси»), единственной задачей которых является находиться между вами и остальным миром и минимизировать сетевой трафик. В вашей компании или у вашего Интернет-провайдера почти наверняка имеются кэширующие прокси, даже если вы об этом не знаете. Их работа основана на кэшировании, встроенном в протокол HTTP.
HTTP is designed with caching in mind. There is an entire class of devices (called «caching proxies») whose only job is to sit between you and the rest of the world and minimize network access. Your company or ISP almost certainly maintains caching proxies, even if you’re unaware of them. They work because caching built into the HTTP protocol.
Вот конкретный пример работы кэширования. С помощью своего браузера вы посетили сайт diveintomark.org. На этом сайте имеется картинка wearehugh.com/m.jpg. Когда ваш браузер загружает эту картинку, сервер включает в свой ответ следующие HTTP заголовки:
Here’s a concrete example of how caching works. You visit diveintomark.org in your browser. That page includes a background image, wearehugh.com/m.jpg. When your browser downloads that image, the server includes the following HTTP headers: