Поиск по сайту:

Что такое «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, который может прослушивать запросы и отвечать на них.