Что такое API? По-русски, пожалуйста

Что такое API? По-русски, пожалуйста

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

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

Реакция бармена заключалась в том, чтобы выбросить 404: ресурс не найден.

Я встречаю много людей, как работающих в сфере технологий, так и в других местах, которые имеют довольно расплывчатое или неправильное представление о том, что означает этот довольно распространенный термин.

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

Но как вы объясните API на простом языке? И есть ли более широкий смысл, чем тот, который используется в развитии и бизнесе? Во-первых, давайте вернемся назад и посмотрим, как работает сама сеть.

WWW и удаленные серверы

Когда думаю о интернете, я представляю себе большую сеть подключенных серверов.

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

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

При вводе www.facebook.com в браузере запрос отправляется на удаленный сервер Facebook. После получения ответа браузер интерпретирует код и отображает страницу.

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

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

API как способ обслуживания клиентов

Вероятно, вы слышали о компаниях, заворачивающие API как продукт. Например, Weather Underground продает доступ к своему погодному API с метеорологическими данными.

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

Использование API: идея состоит в том, чтобы сервер вашего сайта говорил непосредственно с сервером Google с просьбой создать событие с заданными деталями. Затем ваш сервер получит ответ от Google, обработает его и отправит соответствующую информацию браузеру, например, подтверждающее сообщение пользователю.

Кроме того, Ваш браузер часто может отправить запрос API непосредственно на сервер Google, минуя ваш сервер.

Чем API этого календаря Google отличается от API любого другого удаленного сервера?

С технической стороны разница в формате запроса и ответа.

Чтобы отобразить всю веб-страницу, ваш браузер ожидает ответа с HTML, содержащий презентационный код, в то время как вызов API Google Calendar будет просто возвращать данные — вероятно, в формате вроде JSON.

Если сервер вашего сайта делает запрос API, то сервер становится клиентом (подобно тому, как ваш браузер является клиентом, когда вы используете его для перехода на веб-сайт).

Со стороны пользователя, API позволяет завершить действие не покидая ваш сайт.

Большинство современных сайтов используют по крайней мере несколько сторонних API.

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

Нередко команды разработчиков разбивают свои приложения на несколько серверов, которые взаимодействуют друг с другом через API. Серверы, выполняющие вспомогательные функции для основного сервера приложений обычно называют microservices (микрослужбы).

Подводя итог: когда компания предлагает API своим клиентам, это просто означает, что они создали некий набор URL адресов, которые на запрос возвращают чистые информацию, то есть ответы не будут содержать разные презентационные издержки, какие можно ожидать в таком графическом пользовательском интерфейсе, как сайт.

Можете ли вы сделать эти запросы с помощью браузера? Зачастую, да. Поскольку передача запроса HTTP происходит в текстовом виде, браузер будет делать все возможное, чтобы отобразить ответ.

Например, вы можете получить доступ к API GitHub напрямую через браузер, без разных ключей доступа. Вот ответ JSON, который вы получаете при посещении маршрута API пользователя GitHub в вашем браузере (https://api.github.com/users/petrgazarov):

{
  "login": "petrgazarov",
  "id": 5581195,
  "node_id": "MDQ6VXNlcjU1ODExOTU=",
  "avatar_url": "https://avatars3.githubusercontent.com/u/5581195?v=4",
  "gravatar_id": "",
  "url": "https://api.github.com/users/petrgazarov",
  "html_url": "https://github.com/petrgazarov",
  "followers_url": "https://api.github.com/users/petrgazarov/followers",
  "following_url": "https://api.github.com/users/petrgazarov/following{/other_user}",
  "gists_url": "https://api.github.com/users/petrgazarov/gists{/gist_id}",
  "starred_url": "https://api.github.com/users/petrgazarov/starred{/owner}{/repo}",
  "subscriptions_url": "https://api.github.com/users/petrgazarov/subscriptions",
  "organizations_url": "https://api.github.com/users/petrgazarov/orgs",
  "repos_url": "https://api.github.com/users/petrgazarov/repos",
  "events_url": "https://api.github.com/users/petrgazarov/events{/privacy}",
  "received_events_url": "https://api.github.com/users/petrgazarov/received_events",
  "type": "User",
  "site_admin": false,
  "name": "Petr Gazarov",
  "company": "@clauseHQ ",
  "blog": "https://twitter.com/PetrGazarov",
  "location": "NYC",
  "email": null,
  "hireable": null,
  "bio": null,
  "public_repos": 26,
  "public_gists": 1,
  "followers": 83,
  "following": 61,
  "created_at": "2013-10-01T00:33:23Z",
  "updated_at": "2018-09-10T04:10:46Z"
}

Кажется, что браузер отлично отобразил ответ JSON. Подобный этому ответ, готов к использованию в вашем коде. Из этого текста легко извлечь все данные. Затем вы можете делать с ними все, что хотите.

А означает «Application», приложение

для полноты, давайте добавим еще пару примеров API.

«Приложение» может быть разным. Вот некоторые из них в контексте API:

  • Часть программного обеспечения с определенной функцией.
  • Весь сервер, всё приложение или только небольшая его приложения.

В принципе, любая часть программного обеспечения, которая может быть четко отделена от своей среды, может быть «A» в API и, вероятно, также будет иметь какой-то API.

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

Вот еще один пример: в объектно-ориентированном дизайне код организован в объекты. В приложении могут быть определены сотни объектов, которые могут взаимодействовать друг с другом.

Каждый объект имеет API - набор открытых методов и свойств, которые он использует для взаимодействия с другими объектами в приложении.

Объект также может иметь внутреннюю логику, которая является частной, что означает, что они скрыт от внешней области (и не являются API).

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