Public api что это
10 интересных открытых REST API для вашего следующего проекта
Давайте посмотрим правде в глаза — мир не нуждается в еще одном калькуляторе или приложении для ведения списка дел. Вместо этого задумайтесь о создании новых и интересных приложений вокруг открытых REST API.
У большинства разработчиков есть побочные или личные проекты. Но как начать делать такое новое приложение? Страшно сидеть перед пустым редактором, задаваясь вопросом, что делать…. Существует тысячи постов в блогах с советами начать программировать калькулятор, список дел или клон социальной сети. Хотя они, безусловно, могут быть полезны для изучения стека технологий, давайте посмотрим правде в глаза — мир не нуждается в еще одном калькуляторе или приложении для ведения списка дел. Вместо этого задумайтесь о создании новых и интересных приложений вокруг открытых REST API.
Что такое REST API?
Representable State Transfer(REST) Application Programming Interface(API) предоставляет набор методов, которые программист может использовать через HTTP для отправки и получения данных. Поскольку эти методы используют HTTP, любой язык программирования может работать с ними.
Сейчас доступны тысячи REST API практически на всех возможных сайтах. Обычно для общедоступных данных, таких как погода или фондовые рынки, вы можете найти десятки разных API, доступных для использования. Многие популярные веб-платформы, такие как Facebook и Twitter, также предоставляют API для разработчиков. Некоторые из проприетарных API имеют ограничения на количество обращений к ним. Многие требуют регистрации и получения закрытого ключа. Наиболее безопасные API требуют настройки OAuth для безопасного входа пользователей.
Вы можете найти огромный список публичных API на Github, а еще больший список существует на RapidAPI.
10 занятных REST API
Этот список, конечно, не является исчерпывающим, но просто некоторые из них я считаю особенно интересными и достойными ваших побочных проектов. Все они абсолютно бесплатны и не требуют ничего, кроме как получить API-ключ — не нужно разбираться, как обращаться с OAuth или платить за их использование.
Что с этим делать
Все эти общедоступные API прекрасны, но наличие списка интересных источников данных по своей сути не помогает решить проблему, связанную с новым проектом.
Лучше всего начать с простого получения и отображения данных. Может быть, показывать покемона дня или определение набранного слова. Для более креативного подхода попробуйте взять данные и добавить им наглядности — например, свяжите температуру с цветом или отобразите движение автобуса.
Самое сложное — это просто начать. После того, как вы преодолеете начальные препятствия в получении и отображении информации, я уверен, что вы придумаете множество возможностей для вашего проекта!
Используете какие-то другие REST API? Напишите нам, и мы добавим их в этот список!
Ресурсы для веб-разработчика: API и UI-элементы
У себя в блоге мы готовили несколько дайджестов с open source бенчмарками Linux-серверов для сисадминов (раз, два). Сегодня расскажем об открытых инструментах для веб-разработчиков.
Под катом — ресурсы с векторными и SVG-иконками и API.
Public APIs
Это — агрегатор открытых API от сервисов, разработанных как крупными ИТ-компаниями вроде Google, TripAdvisor и Mailchimp, так и энтузиастами с GitHub. Автор платформы — front-end-разработчик Мохд Даниш (Mohd Danish), который также представил сервис для поиска вакансий Tweet Jobs.
Что интересно: библиотека насчитывает более 680 API. Все они разбиты на 50 категорий, в которые входят: медицина, погода, новости, информационная безопасность, открытые данные, облачные хранилища, машинное обучение. В списке программных интерфейсов есть инструменты для обработки естественной речи, скрейпинга, автоматизации GitLab и другие. Ориентироваться помогает поиск. API можно искать по ключевикам и по компании-разработчику.
Внимание: База пополняется довольно медленно, но вы можете самостоятельно предложить отсутствующие API. На сайте нет спецификации программных интерфейсов, и чтобы узнать об инструменте подробнее, приходится открывать документацию.
Бонус: Даниш также запустил NoCodeAPI, готовые к использованию без модификаций backend-кода — например, позволяющие конвертировать XML или RSS в JSON или настроить хуки в Slack.
Open UI
Список с библиотеками компонентов (кнопок, чек-боксов, переключателей) для веб-страниц. Курируют ресурс инженеры из WICG (Web Platform Incubator Community Group), которое принадлежит консорциуму W3C и проектирует стандарты для веба. Авторы убеждены, что с Open UI разработчики не будут изобретать велосипед и тратить время на пересоздание компонентов.
Скриншот: Open UI / Страница с кнопками
Что интересно: Представлены основные дизайн-системы: Ant Design, Atlaskit, Carbon Design System, FastDNA, Lightning Design System и многие другие.
Внимание: Для поиска дополнительной информации по каждой дизайн-системе нужно обращаться к исходникам. Соответствующие ссылки размещены в начале страницы, поэтому её приходится регулярно отматывать наверх. Сам ресурс не завершён — авторы дополняют информацию о дизайн-системах для кнопок выбора, слайдеров и таблиц.
Что еще: Желающие могут внести свою лепту и задокументировать любую коллекцию ассетов для проектирования мультиплатформенных UI. Инструкция и требования приведены на сайте.
Flaticon
Библиотека векторных иконок от разработчиков фотостока Freepik. Её пополняет 370 независимых авторов. Сайт предлагает более 500 тыс. изображений в форматах PNG, SVG, EPS и PSD.
Скриншот: Flaticon / Главная страница
Достоинства: Иконки разбиты на 10 тыс. наборов, что упрощает поиск. Из популярных категорий можно выделить: строительство, одежда, питомцы, есть даже коронавирус, карантин и чрезвычайные ситуации. Перед скачиванием изображений можно изменить их цвет в специальном редакторе — у всей коллекции сразу или индивидуально. Также Flaticon предлагает генератор орнаментов — повторяющихся изображений, которые можно использовать в качестве задника на сайте.
Недостатки: Для доступа ко всем функциям площадки необходима регистрация. Не все иконки бесплатные, а за премиальный контент нужно платить 10 евро в месяц. Свободно распространяемые изображения можно использовать только с указанием авторства.
Бонус: Еще один ресурс с бесплатными SVG-изображениями для веб-разработчиков — Sparkk. Чтобы вставить иконки на сайт, достаточно скопировать соответствующий HTML-код.
Мы в 1cloud.ru предлагаем услугу «Облачное хранилище». В нем удобно держать бэкапы, архивы и корпоративные документы.
В основе СХД лежат диски трех типов: HDD SATA, HDD SAS и SSD SAS. Их суммарный объем составляет несколько тысяч терабайт.
Дополнительное чтение у нас на Хабре:
Как сделать Public API, которым будут пользоваться
Во фронтенде практически безраздельно правит OpenSource, а с недавних пор набирает популярность компонентный подход. Вроде бы всё чудесно. Небольшим компаниям компонентный подход помогает переиспользовать код, а крупным компаниям выравнивать UX во всей линейке продуктов, сервисов и прочего. И вот мы все такие замечательные крутые разработчики пилим свои фреймворки, библиотеки и виджеты, радостно полагая, что если они решают наши задачи, то решают и проблемы окружающего мира. Мы выкладываем их в паблик, ожидая благодарных пользователей, звезд на GitHub, скачиваний на NPM-е. Но почему-то одни библиотеки взлетают, а другие остаются незамеченными и позабытыми.
Почему же так происходит. Наверняка бывало, что когда вы искали какую-нибудь библиотеку с необходимой функциональностью или тот же NPM-ный пакет, находили что-то такое:
По сути просто кусок кода. Безо всякого объяснения, что это такое, что оно делает, как этим пользоваться. Если это NPM-ный пакет, то, наверно, можно залезть к нему в кишочки, понять, как он работает, и пользоваться на свой страх и риск. Но если это сервис, то уже ничего не поделаешь — не будешь ведь перебором выяснять, какие у него есть методы и какие данные они ожидают на вход.
Что же мы ожидаем увидеть, когда находим какой-нибудь публичный API? Наверно, что-то такое:
Это NPM от Babel. Здесь рассказывается, что это такое, что оно делает и как этим пользоваться. То есть когда мы выкладываем что-то в публичный доступ, мы должны приложить документацию. Иначе это просто бессмысленно.
Документация
Во фронтенде фреймворки и библиотеки появляются почти каждый день, поэтому сейчас стало очень популярно снабжать их еще и лендинговой страницей.
По сути это реклама, в которой нам рассказывают какую задачу решает этот API, чем он круче конкурентов, почему вы обязательно должны его использовать, даже если вам это не нужно и всё в таком духе. А уже с этой лендинговой страницы есть ссылки на документацию, в которой обычно есть разделы Getting Started и API Reference.
Getting Started — это раздел для пользователей, которые впервые видят ваш API. В этом разделе описано где скачать, как собрать, как запустить и тому подобное. Также здесь принято описывать, как использовать различные функции продукта. Например, мы в APS, в Getting Started берем маленькое приложение и пошагово добавляем в него различную функциональность, доводя до полноценного боевого решения по которому уже можно делать какие-то свои приложения.
API Reference же предназначен для продвинутых пользователей, которые знают, как пользоваться вашим API и просто хотят уточнить название какого-то свойства или параметры какого-то метода.
Может показаться, что документация это сложно и дорого, потому что её нужно поддерживать в актуальном состоянии, но это, к счастью, немножко не так. Я надеюсь, что вы все себя любите и пишете код с комментариями. Скорее всего, вы описываете свои модули и методы в формате JSDoc, ну просто потому, что это стандарт де-факто в индустрии. А если вы используете React, то у вас есть data-props. Существует много утилит, умеющих собрать JSDoc по вашему коду и выдать JSON-словари, которые можно отображать различными вьюверами так как вам удобно, то есть с сортировкой, поиском, подсветкой, разбиением на категории и всем остальным. С TypeScript говорят тоже все хорошо.
В любой документации должны быть примеры. И очень важно следить за тем, чтобы они работали. Ничто так не портит впечатление о проекте, как сразу же неработающие примеры из документации. Удивительно, но это случается не так редко, как можно было бы подумать.
Песочница
Хорошо, у нас есть примеры, нам кажется что мы помогли людям. Но обычно люди хотят сами с этим поиграться, поэкспериментировать, то есть хотят сами понять, можно ли из этих примеров сделать то, что решает их задачи. Причем они хотят делать это быстро, просто, ничего не скачивая и не устанавливая. И это тоже решаемая задача, ведь мы JavaScript-разработчики, мы практически всё можем запустить в браузере, и у нас давным давно есть наши замечательные песочницы: codepen, jsfiddle, jsbin. Вы можете собрать свой небольшой сниппет с использованием вашего API и добавить в документацию ссылку по которой люди будут сразу переходить и экспериментировать.
Вам может стать тесно в рамках публичной песочницы и вы захотите сделать свою. Это тоже не так сложно, потому что у нас есть две замечательные библиотеки редакторов кода в браузере. Первая — CodeMirror, она используется, например, в jsfiddle и Firefox DevTools. Вторая — Ace, она используется в Atom, многими любимом. Мы в APS-е не стали мелочится и сделали собственную публичную песочницу, как раз с использованием CodeMirror.
Изначально мы рассчитывали, что песочницей будут пользоваться новички, поэтому сделали так, что любые примеры из документации можно открыть в песочнице, а также сразу добавили автодополнение кода. И в этом тоже нет никакого рокет сайнса, ведь у нас есть JSON-словари нашего API и их можно просто скормить редактору кода. Причем так можно делать не только с браузерными редакторами. К примеру, мне удалось завести такое автодополнение кода в Sublime. Позже мы добавили выбор версии API, одновременную работу нескольких пользователей с одним фрагментом кода и прочее, но это всё необязательные рюшечки. Главное — совсем не сложно сделать простую песочницу с редактором кода и результатами в Iframe. И опять же, для React-а есть уже готовый генератор таких песочниц.
Взаимодействие с пользователем
Вот мы сделали документацию, сделали песочницу и кажется что на этом можно остановиться. Верно, но только если вы собирается остановится в развитии вашего API. Если вы хотите развивать его дальше, то лучше взаимодействовать со своими пользователями. Причем лицом к лицу, а не бросая им новую функциональность через как можно более высокую стену, чтобы не слышать их «благодарных” криков. Проще всего этого сделать с помощью каких-нибудь issues на GitHub-е или всевозможных чатиков и каналов в месенджерах. Но есть вещи о которых пользователи вам не расскажут. Например, у человека была проблема, он её как-то решил, даже пускай костылем, и он этот костыль любовно переносит ctrl-c/ctrl-v из проекта в проект. Но может оказаться, что такой сценарий вы не предусмотрели и в худшем случае пользователь мог даже залезть в какой-нибудь ваш приватный API. Как же с этим бороться?
Первый способ — это собирать различные метрики, то есть логировать вызовы методов и отсылать их куда-то. Можно отслеживать, какие создавались модули и виджеты, с какими параметрами и тому подобное. Разумеется, нужно ещё отслеживать окружение, в котором выполнялся ваш код (версии браузеров, мобильные устройства), потому что статистика по использованию браузеров в мире — вещь полезная, но ваши пользователи могут оказаться стильными/модными/молодежными, которые используют только современные браузеры, а вы зачем-то тратите время и силы на поддержку IE.
Второй способ взаимодействия больше подходит для крупных компаний, которые заинтересованы в использовании их публичного API — заводить специальные команды по обучению. Помните, как Яндекс нам всем мозг ковырял со своим БЭМом на различных субботниках и митапах? У нас в Odin тоже есть команда тренеров, которые катаются по всему миру и обучают людей APS-у. На занятиях тренеры видят, где у людей возникает больше всего затруднений, где они вставляют костыли, любовно переносимые из проекта в проект, тогда мы аккуратненько асфальтируем эти протоптанные людьми тропиночки и делаем им удобные дороги.
Обратная совместимость
Хорошо, мы наладили взаимодействие с пользователем, меняем API так, как они просят, делаем его лучше, лучше… И тут нас ожидает мина, которая называется обратная совместимость. Представьте, вы тихо мирно спите себе дома или нежитесь на райском острове в отпуске, и тут звонит начальник и кричит, что всё пропало, всё сломалось, сервер лежит, клиенты уходят, гипс снимают, сделай что-нибудь.
Вы начинаете вспоминать и понимаете, что там ничего не менялось уже месяц. Лезете разбираться — оказывается, там какая-то маленькая библиотечка обновила минорную версию, а тот, кто её поддерживает, решил, что метод А делает не то, что надо, и поменял его поведение. Но вы-то ожидали от метода старого поведения. И ваш код ожидал старого поведения. Если вы будете вести себя как владелец этой библиотечки, то очень быстро растеряете всех пользователей.
Как же с этим бороться?
Я не могу предложить здесь ничего оригинального: только тесты, тесты и еще раз тесты. Причем тесты не просто на покрытие кода, а на покрытие публичного API. Мы в Odin, подошли к этому совсем тоталитарно и проверяем на этапе pull-request-а, во-первых, деградацию по line of coverage, а, во-вторых, деградацию по публичному API. Поскольку у нас есть JSON-словари мы можем сопоставить их с отчетом о покрытии и выяснить какие методы не были покрыты тестами. Если такие появились, то проверка считается не пройденной и такой pull-request нельзя объединять с мастер-веткой.
Итого
Что нужно сделать, чтобы публичным API было приятно пользоваться?
Во-первых, писать документацию. Выкладывать что либо в публичный доступ без документации, как минимум глупо, потому что этим никто не будет пользоваться. Причем с документацией есть интересный лайфхак. Попросите коллег-новичков, не знакомых еще с вашим API, что-нибудь с ним сделать по вашей документации. Потому что когда вы читаете документацию, то „накладываете“ её на знания об устройстве API и вам всё понятно. А у нового человека таких знаний нет, он делает строго по документации и, как показывает практика, обязательно находит какие-нибудь косяки. В качестве бонуса он вливается в работу уже имея некоторое представление чем вы тут занимаетесь и зачем все это надо.
Во-вторых, нужно взаимодействовать с пользователями, чтобы не делать сферического коня в вакууме.
Ну и в-третьих, нужно писать тесты. Причем заливая всё трехметровым слоем бетона, полностью контролируя любые изменения, то есть чтобы публичный API менялся только при изменении мажорной версии.
✨ Python и API: превосходное комбо для автоматизации работы с публичными данными
Leo Matyushkin
Многие ежедневно используемые приложения и системы имеют свой API. От очень простых и обыденных вещей, таких как проверка погоды по утрам, до более захватывающих, вроде лент Instagram, TikTok или Twitter. Во всех современных приложениях API-интерфейсы играют центральную роль.
В этом туториале мы детально рассмотрим:
К концу прохождения туториала вы сможете использовать Python для большинства общедоступных API. Если вы разработчик, знание того, как использовать API-интерфейсы с Python, поможет в интеграции вашей работы со сторонними приложениями.
Знакомство с API
Аббревиатура API соответствует английскому application programming interface — программный интерфейс приложения. По сути, API действует как коммуникационный уровень или интерфейс, который позволяет различным системам взаимодействовать друг с другом без необходимости точно понимать, что делает каждая из систем.
API-интерфейсы имеют разные формы. Это может быть API операционной системы, используемый для включения камеры и микрофона для присоединения к звонку Zoom. Или это могут быть веб-API, используемые для действий, ориентированных на веб, таких как лайки фотографий в Instagram или получение последних твитов.
Независимо от типа, все API-интерфейсы работают приблизительно одинаково. Обычно программа-клиент запрашивает информацию или данные, а API возвращает ответ в соответствии с тем, что мы запросили. Каждый раз, когда мы открываем Twitter или прокручиваем ленту Instagram, приложение делает запрос к API и просто отображает ответ с учетом дизайна программы.
В этом руководстве мы подробно остановимся на высокоуровневых веб-API, которые обмениваются информацией между сетями.
SOAP vs REST vs GraphQL
В конце 1990-х и начале 2000-х годов две разные модели дизайна API стали нормой для публичного доступа к данным:
Сегодня распространение также получает GraphQL — созданный Facebook гибкий язык API-запросов. Хотя GraphQL находится на подъеме и внедряется крупными компаниями, включая GitHub и Shopify, большинство общедоступных API-интерфейсов это REST API. Поэтому в рамках руководства мы ограничимся именно REST-подходом и тем, как взаимодействовать с такими API с помощью Python.
requests и API
Установите библиотеку любым удобным вам способом, например, с помощью pip:
Чтобы следовать примерам кода из руководства, убедитесь, что вы используете Python не ниже 3.8 и версию библиотеки requests не ниже 2.22.0.
Обращение к API с помощью Python
Достаточно разговоров — пора сделать первый вызов API! Мы вызовем популярный API для генерации случайных пользовательских данных. Единственное, что нужно знать для начала работы с API — по какому URL-адресу его вызывать. В этом примере это https://randomuser.me/api/, и вот самый простой вызов API, с которого мы и начнем:
Конечные точки и ресурсы
Как мы видели выше, первое, что нужно знать для использования API, — это базовый URL-адрес API. Вот так выглядят базовые URL-адреса нескольких известных провайдеров API:
Попытавшись открыть любую из приведенных ссылок, вы заметите, что большинство из них возвращает ошибку или запрашивает учетные данные. Многие API-интерфейсы требуют аутентификации для определения прав доступа.
Сделаем запрос к интерфейсу TheDogAPI, аналогичный приведенному выше:
При вызове базового URL-адреса мы получаем сообщение, в котором говорится, что мы обратились к Dog API. Базовый URL здесь используется для получения информации об API, а не реальных данных.
Конечная точка (endpoint) — это часть URL-адреса, указывающая, какой ресурс мы хотим получить. Хорошо документированные API-интерфейсы содержат справочник по API, описывающий конечные точки и ресурсы API, а также способы их использования.
Есть такой справочник и у TheDogAPI. Попробуем обратиться к конечной точке, предоставляющей характеристики пород:
Вуаля, мы получили список пород!
Если вы больше любите кошек, аналогичный API есть и для мурлыкающих питомцев:
Request и Response
Все взаимодействия между клиентом (в нашем случае консолью Python) и API разделены на запрос ( request ) и ответ ( response ):
Снова обратившись к TheDogAPI, мы можем немного подробнее рассмотреть, что именно находится внутри объектов request и response :
В приведенном примере показаны некоторые из наиболее важных атрибутов, доступных для объектов запроса и ответа.
Коды состояний HTTP
Код состояния — одна из наиболее важных частей ответа API, которая сообщает, закончился ли запрос успешно, были ли найдены данные, нужна ли информация об учетной записи и т. д.
Со временем вы без посторонней помощи научитесь распознавать различные коды состояний. Но пока приведем список наиболее распространенных:
Код состояния | Описание |
200 OK | Запрос успешно выполнен. |
201 Created | Запрос принят и создан ресурс. |
400 Bad Request | Запрос неверен или отсутствует некоторая информация. |
401 Unauthorized | Запрос требует дополнительных прав. |
404 Not Found | Запрошенный ресурс не существует. |
405 Method Not Allowed | Конечная точка не поддерживает этот метод HTTP. |
500 Internal Server Error | Ошибка на стороне сервера. |
Теперь отправим запрос, содержащий в пути намеренно сделанную ошибку:
Заголовки HTTP
HTTP-заголовки (headers) используются для определения нескольких параметров, управляющих запросами и ответами:
HTTP Header | Описание |
Accept | Какой тип контента может принять клиент |
Content-Type | Какой тип контента в ответе сервера |
User-Agent | Какое программное обеспечение клиент использует для связи с сервером |
Server | Какое программное обеспечение сервер использует для связи с клиентом |
Authentication | Кто вызывает API и с какими учетными данными |
Чтобы проверить заголовки ответа, можно использовать response.headers :
В этом случае мы не определяем какие-либо конкретные заголовки при отправке запроса, поэтому возвращаются заголовки по умолчанию.
Пользовательские заголовки
X-Request-Id находится среди других заголовков, которые по умолчанию идут с любым запросом API.
Content-Type
В наши дни большинство API-интерфейсов используют в качестве типа контента по умолчанию JSON.
Вернувшись к одному из предыдущих примеров использования TheDogAPI, мы заметим, что заголовок Content-Type определен как application/json :
Помимо типа содержимого (в данном случае application/json ), заголовок может возвращать кодировку контента.
Вы можете столкнуться и c API, возвращающими XML или мультимедиа, например, изображения или видео.
Заголовок Content-Type позволяет узнать, как обрабатывать ответ и что делать с содержимым ответа.
Содержание ответа
Как видите, после выполнения response.json() мы получаем словарь, который можно использовать так же, как любой другой словарь в Python.
Методы HTTP
При вызове API существует несколько различных методов, которые мы можем использовать, чтобы указать, какое действие хотим выполнить. Например, если мы хотим получить некоторые данные, мы используем метод GET, а если нужно создать некоторые данные — метод POST.
Вот список наиболее распространенных методов и их типичных вариантов использования:
HTTP-метод | Описание | Метод requests |
POST | Создает новый ресурс. | requests.post() |
GET | Считывает имеющийся ресурс. | requests.get() |
PUT | Обновляет существующий ресурс. | requests.put() |
DELETE | Удаляет ресурс. | requests.delete() |
Эти четыре метода также называют CRUD-операциями, поскольку они позволяют создавать (create), читать (read), обновлять (update) и удалять (delete) ресурсы.
Большинство этих запросов вернут код состояния 405 (Method Not Allowed). Не все конечные точки поддерживают методы POST, PUT или DELETE. Действительно, большинство общедоступных API разрешают только запросы GET и не позволяют создавать или изменять существующие данные без авторизации.
Параметры запроса
Иногда при вызове API можно получить тонну данных, которые в массе своей не нужны. При вызове конечной точки TheDogAPI/breeds мы получаем всю информацию о каждой породе, но вполне вероятно, что нам достаточно лишь небольшой части данных для одного подвида собак. Тут пригождаются параметры запроса!
Наверняка вы уже сталкивались с параметрами запроса при просмотре веб-страниц в Интернете. При просмотре видео на YouTube у вас есть URL-адрес вида https://www.youtube.com/watch?v=aL5GK2LVMWI. Параметр v= в URL-адресе и есть параметр запроса. Обычно он идет после базового URL-адреса и конечной точки.
Тот же URL-адрес YouTube, указанный выше, с несколькими параметрами запроса будет выглядеть следующим образом: https://www.youtube.com/watch?v=aL5GK2LVMWI&t=75.
В мире API параметры запроса используются в качестве фильтров. Они отправляются вместе с запросом API и позволяют сузить поле для поиска.
Возвратимся к API генератора случайных пользователей:
Предположим, что мы хотим привлечь женскую аудиторию из Германии, и в качестве примеров необходимо сгенерировать соответствующих пользователей. Согласно документации, для нашей задачи можно использовать параметры запроса gender= и nat= :
Используя параметры запроса, мы можем получать более конкретные данные от API, адаптируя взаимодействие с API к нашим потребностям.
Чтобы избежать повторного создания URL-адреса, мы можем передавать параметры запроса в виде атрибута-словаря params :
Изучение продвинутых концепций API
Теперь, когда у нас есть представление об основах использования API с Python, есть несколько более сложных тем, которые стоит хотя бы кратко затронуть: аутентификация, пагинация и ограничения по времени.
Аутенфикация
Хотя многие API бесплатны и полностью общедоступны, аутентификация обычно существенно расширяет права доступа. Существует множество API, требующих аутентификации, например:
Подходы к аутентификации варьируются от очень простых, например, использования ключей API или базовой аутентификации, до гораздо более сложных и безопасных методов, таких как OAuth.
Ключи API
Самый распространенный подход к аутентификации — это ключ API (API key). Эти ключи используются для идентификации вас как пользователя или клиента API, а также для отслеживания использования вами интерфейса. Ключи API обычно отправляются как заголовок запроса или как параметр запроса.
Всё идет нормально. Нам удалось сделать аутентифицированный запрос к API NASA и получить ответ 200 OK.
Взглянем поближе на объект Response и попробуем извлечь из него несколько изображений:
OAuth: начало работы
Другой распространенный стандарт аутентификации API — это OAuth. Это очень обширная тема, поэтому мы коснемся только самых основ.
Когда приложение или платформа позволяет зарегистрироваться или войти с помощью другого ресурса, например, Google или Facebook, поток аутенфикации обычно использует OAuth.
Вот пошаговое описание того, что происходит, когда мы нажимаем в приложении Spotify кнопку «Продолжить с Facebook»:
При прохождении четвертого шага Facebook предоставит Spotify специальные учетные данные — токен доступа ( access_token ), который можно многократно использовать для получения информации. Этот токен входа в Facebook действителен в течение шестидесяти дней, но у других приложений могут быть другие сроки действия.
С технической точки зрения вот что нам нужно знать при использовании API с использованием OAuth:
Существуют различные вариации этого процесса, но большинство потоков OAuth содержат шаги, аналогичные описанным. Давайте попробуем OAuth на примере GitHub API.
OAuth: практический пример
Как мы видели выше, первое, с чего стоит начать — создать приложение. В документации GitHub есть отличное пошаговое объяснение, как это сделать. Чтобы не разворачивать отдельный сервер, в качестве адреса для перенаправления можно использовать адрес https://httpbin.org/anything. Эта веб-страница просто выводит все, что получает на входе.
Создадим приложение, скопируем и вставим Client_ID и Client_Secret вместе с указанным URL для переадресации в файл Python, который назовем github.py :
У нас есть все необходимые переменные, теперь нужно создать ссылку для перенаправления пользователя на его учетную запись GitHub, как описано в документации GitHub:
Следующим шагом в процессе авторизации является обмен полученного кода на токен доступа. Опять же, следуя инструкциям в документации GitHub, мы можем создать для этого метод:
Здесь мы делаем POST-запрос для обмена кода на токен доступа. В запросе мы должны отправить CLIENT_SECRET и код, чтобы GitHub проверил, что код сгенерирован нашим приложением. После этого GitHub API генерирует и возвращает токен доступа.
Мы можем добавить в свой файл следующий код и попробовать его запустить:
Мы должны получить действующий токен доступа, который можно использовать для вызовов API GitHub от имени аутентифицированного пользователя.
Попробуем добавить следующий код, чтобы получить свой профиль пользователя с помощью User API и распечатать свое имя, имя пользователя и количество приватных репозиториев:
Осталось только собрать все вместе и попробовать:
В результате запуска скрипта мы получим примерно такой результат:
Большинство API-интерфейсов, использующих OAuth, ведут себя одинаково, поэтому достаточно один раз разобраться во всех процессах.
Пагинация
За пересылку большого массива данных между клиентами и сервером приходится платить пропускной способностью. Для снижения нагрузки на сервер API-интерфейсы обычно используют пагинацию — разбиение выдаваемой информации на страницы.
Например, всякий раз, когда мы переходим на страницу вопросов в Stack Overflow, внизу страницы есть ряд чисел, соответствующих страницам пагинации:
В API пагинация обычно обрабатывается с помощью двух параметров запроса:
Конкретные имена параметров запроса могут сильно различаться в зависимости от выбора разработчиков API. Некоторые провайдеры API могут также использовать HTTP-заголовки или JSON для возврата текущих фильтров разбивки на страницы.
Снова воспользуемся GitHub API. Параметр per_page= определяет количество возвращаемых элементов, а page= позволяет разбивать результат на отдельные страницы. Пример использования параметров:
Ограничение скорости
Учитывая, что рассматриваемые API-интерфейсы являются общедоступными и могут использоваться кем угодно, ими пытаются злоупотреблять люди с плохими намерениями. Чтобы предотвратить такие атаки, используется метод, называемый ограничением скорости ( rate limit ). API ограничивает количество запросов, которые пользователи могут сделать за определенный период. В случае превышения лимита API-интерфейсы временно блокируют IP-адрес или API-ключ.
Некоторые API, такие как GitHub, даже включают в заголовки дополнительную информацию о текущем ограничении скорости и количестве оставшихся запросов. Это очень помогает избежать превышения установленного лимита.
Использование API с помощью Python: практические примеры
Теперь, когда мы поэкспериментировали с несколькими API, можно объединить полученные знания с помощью еще нескольких практических примеров.
Запрос наиболее популярных сейчас гифок
Как насчет создания небольшого скрипта, который извлекает три самых популярных сейчас GIF-файла с веб-сайта GIPHY? Начните с получения API-ключа:
Ключ API используем в GIPHY API:
Запуск этого кода выведет структурированный список со ссылками на гифки:
Получение подтвержденных случаев COVID-19 в каждой стране
API сайта, отслеживающего случаи заболевания COVID-19, не требует аутентификации. В следующем примере мы получим общее количество подтвержденных случаев до предыдущего дня:
В этом примере мы получаем общее количество подтвержденных случаев для всей страны. Однако вы также можете просмотреть документацию и получить данные для конкретного города.
Поиск в Google Книгах
Воспользуемся API Google Книг для поиска информации об интересующей нас книге. Вот простой фрагмент кода для поиска названия книги Моби Дик во всем каталоге с выдачей трех первых записей:
Вы можете использовать свои знания OAuth и создать приложение, хранящее записи о книгах, которые читаете или хотите прочитать.
Заключение
Есть множество других вещей, которые вы ещё узнаете об API: другие заголовки, типы контента, методы аутентификации и так далее. Однако концепции и методы, которые мы рассмотрели в этом руководстве, позволят достаточно быстро разобраться и провзаимодействовать с помощью Python с любыми API.
Напоследок приведем список агрегаторов ссылок на публичные API, которые вы можете использовать в собственных проектах:
На Python создают прикладные приложения, пишут тесты и бэкенд веб-приложений, автоматизируют задачи в системном администрировании, его используют в нейронных сетях и анализе больших данных. Язык можно изучить самостоятельно, но на это придется потратить немало времени. Если вы хотите быстро понять основы программирования на Python, обратите внимание на онлайн-курс «Библиотеки программиста». За 30 уроков (15 теоретических и 15 практических занятий) под руководством практикующих экспертов вы не только изучите основы синтаксиса, но и освоите две интегрированные среды разработки (PyCharm и Jupyter Notebook), работу со словарями, парсинг веб-страниц, создание ботов для Telegram и Instagram, тестирование кода и даже анализ данных. Чтобы процесс обучения стал более интересным и комфортным, студенты получат от нас обратную связь. Кураторы и преподаватели курса ответят на все вопросы по теме лекций и практических занятий.