"Начиная"

Краткое руководство по API в Python

Прямое руководство по веб-общению

Эти первые шаги по взаимодействию с Интернетом с помощью Python могут показаться сложными, но это не обязательно. Это удивительно простой процесс с четко установленными правилами и инструкциями.

Мы рассмотрим самое необходимое для начала работы, в том числе:

- Application Program Interfaces (APIs)
- Javascript Object Notation (JSON)
- Requests with Python
- Real world use-cases

Прикладные программные интерфейсы

Мы можем рассматривать API как эти маленькие волшебные коробочки, куда мы отправляем данные, а затем получаем данные обратно.

Эта маленькая коробочка - не что иное, как скрипт где-то на сервере. Он действует как посредник между нами - клиентом - и ими - сервером. Мы можем сказать нашему посреднику, что мы хотели бы что-то узнать, что-то изменить или что-то удалить - и, если наши инструкции будут получены правильно, посредник с радостью отступит.

Существуют четко установленные рекомендации по созданию API, все они следуют одним и тем же шаблонам использования. Подавляющее большинство этих API (в Интернете) используют так называемую архитектуру REST.

ОТДЫХАТЬ

Архитектура API передачи репрезентативного состояния (REST) ​​применяет шесть правил:

  • Все запросы должны обрабатываться с использованием единого внешнего интерфейса.
  • Существует независимость клиент-сервер - это означает, что изменения на стороне клиента (нас) не повлияют на функциональность на стороне сервера и наоборот.
  • Каждый новый запрос обрабатывается отдельно от других запросов - API не сохраняет никакой информации о нашем сеансе, и поэтому он без сохранения состояния.
  • Кэширование - API должен указывать, могут ли ответы кэшироваться пользователем.
  • API состоит из многоуровневых систем, образующих модульную структуру.
  • Если это применимо к использованию API, он должен предоставлять пользователям исполняемый код по запросу.

Все это создает единый шлюз с предсказуемым поведением, с которым можно общаться без слишком многих сюрпризов.

Типы запросов

Когда мы общаемся с API, мы, как правило, делаем один из следующих запросов:

  • GET - получить информацию из API.
  • POST - создайте новый ресурс (например, добавьте новую запись данных).
  • PUT - обновить существующий ресурс (например, изменить конкретное значение в существующей записи).
  • УДАЛИТЬ - удалить существующий ресурс (например, удалить запись данных).

Чаще всего используется протокол GET, который позволяет нам загружать данные.

Мы могли бы использовать API Карт Google, чтобы ПОЛУЧИТЬ координаты широты и долготы для определенного адреса.

POST, PUT и DELETE отличаются тем, что они используются только при изменении информации. Используя GitHub API, мы можем создать репо с помощью POST, обновить его с помощью PUT и удалить с помощью DELETE.

Также есть PATCH - он похож на PUT, но используется для «частичного обновления». Я никогда не использовал этот метод и никогда не видел его в документации по API, но он существует.

HTTP-коды

Когда мы используем GET, POST, PUT или DELETE - API отправляет нам ответ, что является частью этот ответ будет включать HTTP-код, который сообщает нам результат нашего запроса. Обычно это одно из следующих:

Success Codes
200 OK - success (common response to GET)
201 Created - new resource created (POST/PUT)
204 No Content - success but not content returned (not an issue)
Client Error Codes
400 Bad Request - request not understood due to bad syntax (fix your JSON)
401 Unauthorized - not allowed, you need authentication
403 Forbidden - secret place, you're not allowed here
404 Not Found - you're lost, this place doesn't exist (or does it...)
Server Error Codes
500 Internal Server Error - there's something wrong with the server
OP Codes
418 I'm a teapot - teapot cannot brew coffee
420 Embrace Your Calm - sending too many requests to Twitter

Обозначение объекта Javascript

При взаимодействии с API мы используем стандартизированный шаблон для отправки и получения данных, чтобы и клиент (мы), и API могли правильно обрабатывать данные - этот формат представляет собой нотацию объектов Javascript (JSON).

JSON реализует ту же иерархическую структуру с парами ключ-значение, которую мы видим в словарях Python. Используя эту структуру, мы можем встраивать списки, строки или даже другие словари.

Давайте попробуем пример: щелчок здесь отправит запрос в PokéAPI с использованием нашего браузера, возвращая текстовую версию ответа JSON от API:

Мы видим формат ответа JSON, подобный словарю. С точки зрения структуры, нет реальной разницы между словарями Python и JSON, однако мы не можем использовать словари Python напрямую при взаимодействии с API.

Запросы Python

Мы изучили основы API-интерфейсов, но как мы можем начать с ними взаимодействовать в Python?

Мы можем использовать чрезвычайно популярную библиотеку requests. Если мы хотим отправить GET-запросы - все, что мы пишем:

import requests
requests.get('https://api_address.com')

Все, что нам нужно сделать, это ввести URL-адрес API, на который мы отправляем запрос, и альт - мы получим ответ JSON от API!

Используя ту же «конечную точку» (конкретную точку входа в API), которую мы использовали ранее для PokéAPI, мы могли бы вернуть ту же информацию в Python следующим образом:

Здесь следует обратить внимание на три ключевых момента:

  • объект ответа, возвращаемый нашими запросами, показывает нам, что запросы были успешными - <Response [200]>, что означает 200 ОК (см. Предыдущие коды).
  • Мы получаем доступ к возвращенным данным с помощью метода response json(), который выводит версию ответа JSON в виде словаря Python.
  • Вывод словаря точно такой же, как тот, который мы видели при доступе к конечной точке API через наш браузер.

Поскольку мы вернули словарь с помощью метода json(), мы можем получить доступ к определенным частям ответа, используя те же методы, которые мы обычно используем в словарях Python. Если мы хотим вернуть имена способностей Чаризард:

Для всех вас, поклонников покемонов, я полагаю, что это конец статьи - для тех, кто менее заинтересован в возвращении исчерпывающего списка каждого покемона и их способностей, давайте перейдем к некоторым, возможно, более полезным API ...

Google Maps API

Google (конечно же) предоставляет огромный спектр API-интерфейсов, одним из которых, в частности, является их API-интерфейс геокодирования, он позволяет вам возвращать координаты широты и долготы для любого адреса. И это также было большой частью моего самого первого профессионального опыта с Python.

С тех пор он сильно изменился, но когда я думаю об «API», этот опыт - одна из первых вещей, которые приходят на ум. Он также служит прекрасным введением в типичное использование API.

1. Авторизация - большинству API-интерфейсов требуется, чтобы мы включали ключ авторизации в наши вызовы. Если мы это пропустим, мы обычно возвращаем код 4xx, говорящий нам, что нам нужна авторизация.

Шаги по получению ключа API включены в Документацию по API геокодирования, она проста, поэтому я не буду повторять здесь документацию.

2. Параметры API - мы попытаемся вернуть координаты Колизея в Риме. Адрес для этого - Piazza del Colosseo, мы включим его в URL нашего запроса в качестве параметра.

Мы можем использовать тот же подход и для аутентификации.

И прямо здесь, в нашем ответе JSON, мы видим lat и lng - мы можем получить доступ к обоим этим значениям, как и раньше, с PokéAPI.

А есть координаты широты и долготы Колизея - легко!

GitHub API

Мы видели запросы GET, но ничего о POST, PUT или DELETE. Эти запросы, как правило, немного отличаются, поскольку мы обычно включаем объект payload, в котором подробно описывается информация, которую мы POST ing, PUT или DELET ing с помощью API.

В этом примере мы будем использовать GitHub API для POST нового репозитория в нашей учетной записи GitHub. Опять же, нам снова нужен ключ авторизации - вы можете найти пошаговое руководство по доступу здесь.

Однако при выборе разрешений для вашего личного токена доступа единственное разрешение, необходимое для этого руководства, - репо. Я также рекомендую держаться подальше от разрешения delete_repo.

Как только у вас будет ключ авторизации, мы будем использовать его для аутентификации всех наших запросов к GitHub API следующим образом:

Все, что мы здесь сделали, это наш типичный запрос API, но с нашим ключом авторизации (или токеном), включенным в наш API headers. Мы можем думать о headers как о метаданных, которые мы включаем вместе с нашим запросом.

Последний шаг - это описание того, что мы хотели бы сделать. Сделаем это с помощью параметра data нашего запроса. Здесь мы включаем наш payload, который представляет собой словарь Python, преобразованный в строку формата JSON с использованием json.dumps:

После этого мы вернем код ответа 201 Created, который сообщает нам, что запрос был успешным и мы создали новый ресурс.

Чтобы проверить, мы можем перейти на Github.

И, конечно же, есть наше новое api_test репозиторий - мы многое можем сделать с помощью GitHub API, посмотрите документацию, если вам интересно.

Здесь у нас есть введение в мир API и то, как мы можем взаимодействовать с ними в Python. Отсюда еще есть чему поучиться.

Также стоит отметить, что это всего лишь одна сторона экосистемы API, конечно же, есть и другая сторона создания и обслуживания этих API - это совершенно другая игра.

Тем не менее, понимание концепций, которые мы рассмотрели в этой статье, является основой для продвижения вперед и вверх по другим направлениям взаимодействия и / или разработки API.

Надеюсь, вам понравилась эта статья! Если у вас есть вопросы, дайте мне знать через Twitter или в комментариях ниже. Если вы хотите больше подобного контента, я тоже публикую на YouTube.

Спасибо за прочтение!

Если вы хотите сразу перейти к разработке API на Python, ознакомьтесь с моей статьей о разработке API с помощью FastAPI:



Прохождение Jupyter Notebook

🤖 Скидка 70% на курс НЛП с трансформаторами