Что такое «API» и как его использовать?
«API» — это промежуточное программное обеспечение, которое находится между двумя приложениями и позволяет им взаимодействовать с использованием предопределенных правил. На практике API обычно используются для предоставления клиентским приложениям доступа к защищенной базе данных.
Что делают API?
На высоком уровне API просто устанавливают связь между двумя приложениями. Они не могут общаться напрямую, так как не имеют доступа к коду друг друга, поэтому им приходится прокладывать между собой провод и посылать сигналы по линии. API определяет, как эти сигналы должны быть отправлены. Почти каждое приложение, работающее на вашем компьютере, использует тот или иной API для взаимодействия с тысячами других вещей.
На практике термин «API» обычно используется для обозначения веб-API, которые образуют связь между сервером и клиентом или между сервером и серверной службой. Эти API действуют как точка доступа для любой службы, которая за ними стоит.
Например, представьте, что у вас есть клиентское приложение, которому необходимо взаимодействовать с сервером через базу данных. Очевидно, что вы не можете предоставить клиенту полный доступ к базе данных, так как это создает ряд проблем. Во-первых, это, вероятно, самая серьезная ошибка безопасности, которую вы можете совершить, но кроме того, она также разрушает всю модель клиент-сервер. Клиенту не нужно беспокоиться о взаимодействии с базой данных или хранении данных; он должен связываться с сервером и позволить серверу выполнять тяжелую работу.
Вместо предоставления клиенту полного доступа вы можете создать другую службу, которая будет обращаться к базе данных от имени клиента. Это приложение API, и оно находится непосредственно перед базой данных (или любой другой службой, стоящей за ней).
Клиент отправляет запросы в приложение API, как правило, по протоколу HTTP с использованием запросов GET
и POST
. Это может быть URL-адрес вашего сервера, например «api.yoursite.com
». Если клиент хотел выполнить поиск в базе данных с помощью определенного запроса, API попросит базу данных выполнить поиск, а затем вернет результаты. Обычно API взаимодействуют через JSON, который возвращает результаты в виде объекта со строго определенными типами, например:
{ "name": "MyAPI", "search_results": [...] }
Это еще одно преимущество API — стандартизация структуры данных. Ваш API должен каждый раз возвращать один и тот же формат и тип данных, что упрощает его использование в разных приложениях. Большинство крупных технологических компаний имеют общедоступные API и обширную документацию по структуре API и способам его использования.
Как использовать API?
API довольно стандартизированы. Они почти всегда будут доступны через HTTP и обычно возвращают данные JSON, что означает, что любой язык программирования, который может делать HTTP-запросы и декодировать JSON, может взаимодействовать с API и получать от него данные. Даже такие простые вещи, как curl
или wget
, которые могут загружать веб-контент, могут получить доступ к API.
Вы можете использовать общедоступные API-интерфейсы в любом приложении, хотя иногда их скорость ограничена для предотвращения злоупотреблений. Например, KeyCDN запускает API для получения информации о местоположении с адреса API, но вы ограничены тремя запросами в секунду. Вы можете использовать это в любом приложении, отправив HTTP-запрос GET
к конечной точке API с IP-адресом, переданным в качестве параметра URL. Например:
https://tools.keycdn.com/geo.json?host={IP_ADDRESS}
Вернет что-то вроде:
{ "status": "success", "description": "Data successfully received.", "data": { "geo": { "host": "173.79.254.254", "ip": "173.79.254.254", "rdns": "pool-173-79-254-254.washdc.fios.verizon.net", "asn": 701, "isp": "MCI Communications Services, Inc. d/b/a Verizon Business", "country_name": "United States", "country_code": "US", "region_name": "Virginia", "region_code": "VA", "city": "Alexandria", "postal_code": "22309", "continent_name": "North America", "continent_code": "NA", "latitude": 38.719, "longitude": -77.1067, "metro_code": 511, "timezone": "America/New_York", "datetime": "2019-08-22 17:30:48" } } }
Вы можете сохранить этот результат в переменной с именем response
. Затем, если вы хотите узнать почтовый индекс адреса, вы можете получить к нему доступ, используя response.data.geo.postal_code
.
Для большинства языков существуют библиотеки, упрощающие этот процесс, и многие языки также имеют встроенные инструменты. Мы покажем несколько распространенных, но быстрый поиск «___ HTTP-запрос» должен отобразить результаты для языка, с которым вы работаете.
JavaScript
JavaScript может делать HTTP-запросы по умолчанию, используя объект XMLHttpRequest()
:
const Http = new XMLHttpRequest(); const url='https://api.github.com/'; Http.open("GET", url); Http.send(); Http.onreadystatechange = (e) => { console.log(Http.responseText) }
Однако этот синтаксис довольно громоздкий, поэтому он обычно обрабатывается с использованием других библиотек, если только вам не нужен ванильный JS. Например, в jQuery есть метод ajax
, который позаботится об этом:
$.ajax('https://api.github.com/', { dataType: 'json', success: function (data, status, xhr) { ... } });
И есть библиотека axios
, которая обрабатывает это с помощью промисов:
axios.get('https://api.github.com/') .then((data) => { console.log(data); } )
В любом случае объекты JSON можно десериализовать непосредственно в объекты JavaScript с помощью JSON.parse()
, что позволит вам сохранить результаты для использования в другом месте.
PHP
PHP может делать запросы GET изначально, используя функцию file_get_contents
, которую можно использовать вместе с json_decode
для считывания результата API в переменную:
$json = file_get_contents('https://api.github.com/'); $obj = json_decode($json);
Если вы хотите сделать запрос POST
или вам нужна дополнительная настройка, вы можете создать специальный контекст для file_get_contents
с помощью stream_context_create
:
$url ='https://api.github.com/'; $data = 'something'; $options = array( 'http' => array( 'header' => "Content-type: application/x-www-form-urlencodedrn", 'method' => 'POST', 'content' => http_build_query($data) ) ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); if ($result === FALSE) { //error }
Питон
В Python нет отличного способа сделать это изначально, поэтому вам придется установить библиотеку запросов из pip
. После этого вы можете делать такие запросы:
import requests r = requests.get("https://api.github.com/")
Это возвращает объект, представляющий всю HTTP-транзакцию, поэтому для получения фактического содержимого вам придется использовать r.content
. Вероятно, вам также понадобится библиотека JSON для декодирования ответа в объект, читаемый Python.
import json import requests r = requests.get("https://api.github.com/") decoded = json.loads(r.content)
Как создать собственный веб-API?
Если у вас есть какие-то данные, которые вы хотели бы сделать доступными, вы можете разместить перед ними API для доступа к ним через Интернет.
Для этого вам нужно создать сервер API. Единственное требование состоит в том, что он может прослушивать HTTP и отвечать на запросы, поэтому вы можете использовать любой язык программирования, который вам нравится. Скорее всего, вам также понадобится библиотека для подключения к выбранной вами базе данных на этом языке, и вы также можете реализовать какую-либо аутентификацию, например OAuth 2.0, чтобы вы могли отслеживать пользователей и их разрешения.
Express – это библиотека Node.JS, которая обычно используется для создания простых веб-API с использованием JavaScript. Сервер Express прослушивает HTTP и может пересылать различные маршруты функциям-обработчикам. Вы можете использовать его вместе с клиентом Node MySQL (или любой другой базой данных) для создания API с большим объемом данных. Для Python вам также понадобится веб-фреймворк, такой как Flask, который может прослушивать запросы и отвечать на них.