Что такое API? Объяснение интерфейсов прикладного программирования

API означает интерфейс прикладного программирования, концепция, которая применяется везде, от инструментов командной строки до корпоративного кода Java и веб-приложений Ruby on Rails. API - это способ программного взаимодействия с отдельным программным компонентом или ресурсом.

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

Что такое API?

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

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

Следует иметь в виду, что имена некоторых API-интерфейсов часто используются для обозначения как спецификации взаимодействий, так и фактического программного компонента, с которым вы взаимодействуете. Например, фраза «Twitter API» не только относится к набору правил для программного взаимодействия с Twitter, но и обычно понимается как то, с чем вы взаимодействуете, например, «Мы проводим анализ твитов, которые мы получили от API Twitter ».

API как уровень абстракции

Когда дело доходит до программного обеспечения, API можно найти буквально повсюду. API идут рука об руку с одной из самых фундаментальных концепций информатики: абстракцией. Абстракция - это просто способ упорядочить сложность системы, чтобы сложные действия можно было обрабатывать простым способом. Думайте об этой абстракции, как об этих кнопках Amazon Dash Buttons, кнопочных платах с батарейным питанием, которые вы можете использовать для заказа скоб на Amazon. Вот как они выглядят:

Вы заказываете кнопку Dash на Amazon и используете приложение на своем смартфоне, чтобы связать ее с вашей сетью Wi-Fi, учетной записью Amazon и продуктом, например, вашим любимым брендом бумажных полотенец. Затем, когда вы захотите заказать больше бумажных полотенец, просто нажмите кнопку. Кнопка Dash подключается к Интернету и отправляет сообщение для размещения заказа в вашей учетной записи. Через несколько дней к вашему порогу прибудут бумажные полотенца.

Как и API, Dash Button - это блаженно простой интерфейс, скрывающий за кулисами все виды сложности. Идентификатор заказанного вами продукта должен быть получен из некоторой базы данных. Ваш адрес доставки должен быть получен из вашей учетной записи. Необходимо определить ближайший центр выполнения заказов, в котором хранятся ваши бумажные полотенца, а затем уведомить об этом, чтобы удалить товар из имеющегося запаса и упаковать его. Наконец, посылка должна быть направлена ​​через определенную комбинацию самолетов, грузовиков и фургонов вместе с другими посылками таким образом, чтобы гарантировать, что все посылки будут эффективно достигать места назначения.

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

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

Публичные API и интеграция API

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

Эти виды гибридных приложений кода позволяют пользователям смешивать и сопоставлять функциональные возможности разных поставщиков в своих собственных системах. Например, если вы используете программное обеспечение для автоматизации маркетинга Marketo, вы можете синхронизировать свои данные с функциями Salesforce CRM.

«Открытый» или «публичный» не следует толковать как «бесплатно» в этом контексте. Чтобы это работало, вам все равно нужно быть клиентом Marketo и Salesforce. Но доступность этих API делает интеграцию намного более простым процессом, чем это было бы в противном случае. ( есть отличный список общедоступных API, о которых вам следует знать.)

Веб-сервисы и API

Вы можете вспомнить термин « веб-службы» из начала нулевых и подумать, что идея открытого API звучит очень похоже. Фактически, веб-сервис - это особый вид открытого API, отвечающий довольно жесткому набору спецификаций, включая то, что они должны быть указаны на языке описания веб-сервисов (WSDL), вариант XML.

Веб-сервисы должны были использоваться как часть сервис-ориентированной архитектуры (SOA). Как объясняется в блоге Nordic APIs, это дало веб-сервисам плохую репутацию, поскольку SOA никогда полностью не раскрывали свой потенциал. Достижения в методах, используемых для связи между сервисами, особенно в более легком и гибком REST, также несколько отстали от веб-сервисов в мире общедоступных API.

REST API

Первоначально веб-службы были разработаны для связи с использованием SOAP (Simple Object Access Protocol), протокола обмена сообщениями, который отправляет XML-документы через HTTP. Однако сегодня большинство веб-интерфейсов API используют REST - передачу репрезентативного состояния - в качестве архитектурного стиля.

REST был официально представлен Роем Филдингом в его докторской диссертации в 2000 году. Это набор архитектурных компонентов, принципов проектирования и взаимодействий, используемых для построения распределенных систем, в которых задействованы средства массовой информации любого типа (текст, видео и т. Д.). По своей сути REST - это стиль построения систем, который обеспечивает гибкую связь и отображение информации в сети, обеспечивая при этом структуру, необходимую для простого создания компонентов общего назначения.

В REST API ресурс может быть чем угодно, но примеры включают пользователя, список твитов и текущие результаты поиска твитов. Каждый из этих ресурсов адресуется по идентификатору ресурса , который в случае веб-API REST обычно является URL-адресом, например //api.twitter.com/1.1/users/show?screen_name=twitterdev. Когда приложение запрашивает ресурс с использованием идентификатора, API доставляет текущее представление этого ресурса в приложение в формате, который приложение может использовать, например, изображение JPEG, страница HTML или JSON.

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

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

Примеры API

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

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

Чтобы по-настоящему понять, как работают API, давайте углубимся в два: API Java, который Java-разработчики используют для взаимодействия с платформой Java, и API Twitter, общедоступный API, который вы будете использовать для взаимодействия с социальными сетями. сетевой сервис.

API Java

Java API - это библиотека программных компонентов, доступная «из коробки» всем, кто установил Java Development Kit. Эти компоненты реализуют общие задачи и в целом повышают производительность, поскольку программистам не нужно каждый раз начинать с нуля. Одним из основных компонентов, используемых в программном обеспечении, является так называемый список, который, как и следовало ожидать, отслеживает список элементов. Java API определяет, что вы можете делать со списком: добавлять элементы, сортировать список, определять, есть ли элемент в списке и т. Д. Он также определяет, как выполнять эти действия. Чтобы отсортировать список, вам необходимо указать, как вы хотите отсортировать список: в алфавитном порядке, по убыванию числа, от самого яркого до самого тусклого цвета и т. Д.

API Twitter

Twitter API - это веб-интерфейс JSON API, который позволяет разработчикам программно взаимодействовать с данными Twitter. В отличие от Java API, который включен в Java Development Kit, Twitter API представляет собой веб-API. Доступ к нему должен осуществляться путем отправки запросов через Интернет к службам, размещенным в Twitter.

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

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

Дизайн API

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

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

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

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