Взаимодействие через rest api: Что такое REST API и чем оно отличается от другого API?

Содержание

Отказоустойчивое взаимодействие с внешними сервисами / Хабр

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

О чем статья:

  • Синхронное и асинхронное взаимодействие; 

  • Зависимость доступности от использования синхронного взаимодействия;

  • Способы избавления от синхронного взаимодействия;

  • Избавление от синхронного взаимодействия с внешними сервисами в PHP.

Рассмотрим пример синхронного взаимодействия на примере REST API.

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

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

Предположим, у нас есть сервис Order, который использует REST API для создания заказов. Он взаимодействует с сервисами Consumer и Restaurant, которые также используют синхронный REST API.  Пользователь для создания заказа посылает запрос сервису Order, сервис Order получает информацию о заказчике в сервисе Consumer, получает информацию о ресторане в сервисе Restaurant, валидирует данные, создает заказ, возвращает ответ клиенту. В данном случае система будет доступна, если будут доступны все компоненты. Если какой-то из компонентов окажется недоступен, то операция успешно завершиться не сможет. Клиент получит сообщение об ошибке. 

С математической точки зрения доступность операции создания заказа равна произведению доступности компонентов в ней участвующих.  И не может превышать доступность каждого из её компонентов, то есть в данном случае, если доступность сервиса Restaurant 50%, то доступность сценария, в котором участвует сервис Restaurant не может быть более 50%. Даже, если доступность одного компонента 99,5%, что довольно высоко, то доступность операции будет ниже, а именно 98,5%.

99,5%*99,5%*99,5%=98,5%

С ростом числа компонентов, доступность будет снижаться.

99,5%*99,5%*99,5%*99,5%*99,5%=97,5%

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

Синхронное взаимодействие популярно из-за:

Однако в нем есть и минусы:

  • снижение отказоустойчивости приложения

  • увеличение времени ответа клиенту

  • высокая связанность. 

Существуют способы уменьшения синхронного взаимодействия в системе. Один из вариантов — использование асинхронного API.

Клиент делает запрос сервису Order, сервис Order асинхронно обменивается данными с другими сервисами и возвращает асинхронный ответ клиенту.

При такой схеме клиент с сервисом общаются в асинхронном стиле через канал передачи данных и ни один из участников взаимодействия не блокируется в ожидании ответа от другого сервиса. Такая система получается очень устойчивой, потому что, если какой-то из сервисов откажет, то каналы будут буферизировать сообщения. Рано или поздно сервис восстановится и обработает запросы. 

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

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

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

Альтернативным способом снижения количества синхронного взаимодействия является репликация данных. Сервис может хранить копии данных, которые ему нужны для обработки запроса. Например, сервис Order может хранить проекцию данных сервиса Consumer и Restaurant. Сервис Consumer и Restaurant публикуют события, когда их локальные данные меняются, а сервис Order на них подписывается и обновляет локальную реплику данных. При таком подходе, когда клиент посылает запрос на создание заказа, сервис Order не делает никаких синхронных вызовов другим клиентам, он берет все данные из своей локальной базы. 

Система получается достаточно устойчивой, потому что если один из сервисов окажется недоступным, сервис Order все равно сможет создать заказ, так как данные у него хранятся локально.

У данного подхода тоже есть минусы, он обеспечивает итоговую согласованность данных (eventual consistency). Так как для того чтобы синхронизировать данные, используются асинхронные события, то в сервисе Order данные по пользователям из сервиса Consumer могут отставать. Может получиться такая ситуация, что пришел запрос, заказчик уже есть в сервисе Consumer, но данные еще не пришли в сервис Order и запрос валидацию не проходит.

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

Минусы:

Существует и другой способ повысить отказоустойчивость системы. Например, сервис Order может создать заказ синхронно, вернуть ответ клиенту, а валидацию провести асинхронно. Посмотрим, как это может работать.

Клиент посылает запрос на создание заказа, сервис order создает заказ в статусе “в ожидании” и возвращает идентификатор заказа клиенту. Все это он делает синхронно, а затем посылает асинхронное сообщение сервису Consumer и сервису Restaurant. Когда сообщение обрабатывается в сервисе Consumer, сервис Consumer валидирует данные и возвращает ответ сервису Order. Далее обрабатывается событие в сервисе Restaurant, он так же валидирует данные и возвращает ответ сервису Order. Сервис Order меняет статус заказа на “проверен”. Такой подход также обеспечивает слабую связанность компонентов и высокую отказоустойчивость. При создании заказа не посылается никакие синхронные запросы. В случае если один из компонентов окажется недоступным, то канал также буферизирует сообщения. Когда получатель будет доступен, все сообщения обработаются, заказ будет создан. 

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

Сложности подхода “Ответ клиенту до полной обработки”:

Получается клиенту дается обещание, что заказ будет создан. Заказ получает статус “в ожидании”, при этом клиент должен периодически спрашивать сервис Order для того, чтобы понять, создан ли заказ успешно. Или сервис Order должен как-то уведомить клиента, что создание заказа завершено. 

Может возникнуть вопрос “А где же внешние сервисы?”

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

  1. У внешнего сервиса может отсутствовать асинхронное API

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

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

Предположим, нам в сервисе заказов нужно сохранять информацию по созданию заказов для аналитики.

Можно создать заказ синхронно, а затем синхронно послать данные на сервис Analytics. 

Здесь может быть несколько проблем.

Сервис Analytics может оказаться недоступным, тогда непонятно, что делать с заказом: нам либо нужно отменить создание заказа и вернуть ошибку, либо же мы игнорируем недоступность сервиса Analytics, тогда в этом случае теряется часть данных.  

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

Следует также учесть, что запросы должны обрабатываться быстро, если они будут обрабатывать медленно, то у нашего сервиса на PHP могут возникнуть проблемы. Например, можно упереться в ограничение очереди запросов PHP-FPM. Либо часть запросов в очереди просто отваливается по тайм-ауту, потому что они не дождались обработки, так как PHP-FPM долго обрабатывает запросы. Либо может закончиться пул соединений с базой данных. 

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

По умолчанию HTTP клиент (например Guzzle) никак не ограничивает по времени свои запросы. Очевидно, что нужно время запроса ограничить тайм-аутом. Какой тайм-аут выбрать лучше? Если выберем слишком маленький, то часть данных мы можем потерять. Если большой, то ситуация может не измениться. Если мы выберем в секунду, то проблемы с отказоустойчивостью у нас могут все равно остаться, если у нас высоконагруженное приложение. Какие же здесь есть варианты? Можно заменить синхронное взаимодействие, на асинхронное. Например, можно изолировать синхронный вызов к внешнему сервису с помощью асинхронной очереди команд или запросов.

В данном случае команда — это действие по сохранению данных сервиса Analytics.

Можно сделать по-другому. На каждую команду сделать свой Worker и их запускать параллельно. Получится так, что каждый Worker будет занимать соединение с базой данных и на N клиентских запросов, будет создано N воркеров. Таким образом соединения с базой данных будут расходоваться еще быстрее, что может быть критично. 

В случае с очередью команд, такой проблемы не возникает.

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

Рассмотрим, как можно реализовать асинхронное взаимодействие.

Клиент присылает запрос на создание заказа. Создаётся заказ и вместе с ним создаётся команда по логированию данных в сервис аналитики. При публикации команды в базу данных она сохраняется в одной транзакции с заказом. Далее команда ретранслируется в брокер сообщений и возвращается ответ клиенту. Сохранять команду в базу нужно, если необходимо гарантировать доставку данных в сервис аналитики. Этот подход называется transactional outbox.

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

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

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

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

Подведем итог.

Способы повышения отказоустойчивости:

  • Репликация данных, например, на основе асинхронных событий

  • Асинхронное взаимодействие или саги

  • Изолировать внешний сервис. Например, можно изолировать в асинхронном обработчике синхронный вызов, если во внешнем сервисе нет асинхронного API

  • Transactional outbox. Используется для гарантии доставки данных во внешний сервис

  • Не забываем про тайм-ауты. HTTP-клиент по умолчанию не выставляет никакой тайм-аут, про это часто забывают и часто это является более распространенной ошибкой, которая приводит к проблемам

Напомню достоинства и недостатки синхронного и асинхронного подхода.

И напоследок хочу посоветовать книгу “Микросервисы. Паттерны разработки и рефакторинга” Крис Ричардсон. В ней хорошо расписаны теоретические вопросы, касающиеся синхронного и асинхронного взаимодействия, команд, очередей, саг и многое другое.

что это простыми словами и примеры использования

Данная статья является переводом. Ссылка на оригинальную статью.

1. Как работают API и зачем они нужны?

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

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

API выступает в роли посредника между пользователями (клиентами) и ресурсами (серверами).

Когда пользователи делают запросы к API или посещают интернет-магазин, они ожидают быстрого ответа. Поэтому необходимо оптимизировать Magento TTFB (Time To First Byte) или использовать другие стратегии повышения производительности, которые лучше работают для выбранной CMS.

Причины для интеграции API:

  • оптимизация обмена ресурсами и информацией;
  • контроль доступа с помощью аутентификации и определения прав;
  • безопасность;
  • отсутствие необходимости разбираться в специфике ПО;
  • согласованное взаимодействие между сервисами, даже если сервисы используют разные технологии.

2. Обзор REST API

REST API

RESTful относится к программной архитектуре, которая расшифровывается как Representational State Transfer (Передача репрезентативного состояния). Эта архитектура известна в контексте стандартизации использования систем обмена информацией (веб-сервисов).

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

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

Цели REST API

2.1. Использование интернета

Для REST нет специальной клиентской технологии, поскольку REST подходит для различных проектов, таких как:

  1. Веб-разработка.
  2. iOS-приложения.
  3. IoT-устройства.
  4. Windows Phone приложения.

Поскольку не требуется придерживаться конкретного клиентского стека, допустимо построить любую инфраструктуру для своей компании.

2.2. Приложения в облаке

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

2.3. Облачные вычисления

Соединение API с сервисом требует управления декодированием URL-адреса. Поэтому REST стал полезным в облачных сервисах. Архитектура RESTful API станет стандартом в будущем благодаря облачным вычислениям и микросервисам.

Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека программиста»

Интересно, перейти к каналу

3. Как работают REST API?

Данные (такие как изображения, видео и текст) воплощают ресурсы в REST. Клиент посещает URL-адрес и отправляет серверу запрос, чтобы получить ответ.

Принцип работы REST API

4. Концепции REST API

Запрос (URL, к которому обращаетесь) содержит четыре компонента:

  1. Конечная точка, являющаяся URL-адресом со структурой root-endpoint/?.
  2. Метод с типом (GET, POST, PUT, PATCH, DELETE).
  3. Заголовки, выполняющие функции аутентификации, предоставление информации о содержимом тела (допустимо использовать параметр -H или --header для отправки заголовков HTTP) и т. д.
  4. Данные (или тело) – это то, что отправляется на сервер с помощью опции -d или --data при запросах POST, PUT, PATCH или DELETE.

HTTP-запросы разрешают работать с базой данных, например:

  1. POST-запрос для создания записей.
  2. GET-запрос на чтение или получение ресурса (документа или изображения, набора других ресурсов) с сервера.
  3. PUT и PATCH-запросы для обновления записей.
  4. DELETE-запрос на удаление ресурса с сервера.

Эти операции обозначают четыре возможных действия CRUD: создание, чтение, обновление и удаление.

CRUD

Сервер отправляет данные клиенту в формате:

  1. HTML.
  2. JSON (распространённый формат благодаря независимости от компьютерных языков и доступности для людей и машин).
  3. XLT.
  4. PHP.
  5. Python.
  6. Текст.

5. Зачем использовать REST API?

Преимущество REST над другими API, такими как SOAP в масштабируемости, гибкости, переносимости и независимости.

Преимущества REST API над другими API

5.1. Не полагаться на структуру проекта

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

5.2. Портативность и адаптивность

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

5.3. Масштабирование проекта в будущем

Поскольку клиент и сервер действуют независимо, программисты могут быстро разработать продукт.

6. Особенности стиля архитектуры RESTful

Разработчикам приходится учитывать жёсткую структуру некоторых API, таких как SOAP или XML-RPC. Но REST API — это другое. REST API поддерживают широкий спектр типов данных и могут быть написаны практически на любом языке программирования.

Шесть архитектурных ограничений REST являются принципами разработки решения и заключаются в следующем:

Архитектурные ограничение REST API

6.1. Унифицированный интерфейс (последовательный пользовательский интерфейс)

Эта концепция диктует, что запросы API к одному и тому же ресурсу, независимо от происхождения, должны быть идентичными, то есть на одном конкретном языке. Один универсальный идентификатор ресурса (URI) ассоциируется с одними и теми же данными, такими как имя пользователя или адрес электронной почты.

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

6.2. Разделение клиента и сервера

Архитектурный стиль REST использует особый подход к реализации клиента и сервера. Дело в том, что клиент и сервер могут работать независимо и не обязаны знать друг о друге.

Например, у клиента только универсальный идентификатор запрошенного ресурса (URI) и не может общаться с серверной программой другим способом. Однако, сервер не должен влиять на клиентское ПО. Поэтому сервер отправляет данные по HTTP. Это означает что, если клиентский код изменится, это не повлияет на работу сервера.

Серверный код в той же лодке: изменение серверной части не повлияет на работу клиента.

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

Кроме того, каждый компонент выигрывает от разделения, поскольку может развиваться независимо. Интерфейс REST помогает клиентам:

  1. Иметь доступ к одним и тем же конечным точкам REST.
  2. Выполнять одинаковые действия.
  3. Получать одинаковые ответы.

6.3. Нестационарная связь между клиентами и серверами

Системы на основе REST не имеют состояния, то есть состояние клиента остаётся неизвестным для сервера и наоборот. Это ограничение разрешает серверу и клиенту понимать отправленное сообщение, даже если они не видели предыдущие.

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

Допустимо контролировать, изменять и повторно использовать компоненты, затрагивая систему частично, поэтому преимущества этого ограничения включают достижение:

  • стабильности;
  • скорости;
  • масштабируемости RESTful-приложений.

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

6.4. Кэшируемые данные

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

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

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

6.5. Архитектура многоуровневой системы

Архитектура многоуровневой системы

Следующее обсуждаемое ограничение — это многоуровневая структура RESTful. Этот принцип включает в себя группировку слоёв с определёнными функциями.

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

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

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

6.6. Кодирование по требованию (необязательно)

Предоставление статических представлений ресурсов в формате XML или JSON — популярный сценарий использования REST API.

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

7. Проблемы, которые следует ожидать при использовании REST API

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

Проблемы с REST API

7.1. Соглашение по конечным точкам REST

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

7.2. Версионность как свойство REST API

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

7.

3. Множество методов аутентификации

Допустимо определить, какие ресурсы доступны тем или иным типам пользователей. Например, определить, какие сторонние службы получают доступ к адресам электронной почты клиентов или другой конфиденциальной информации, и что эти службы делают с этими переменными.

Но 20 методов авторизации могут затруднить первоначальный вызов API. Поэтому разработчики не продолжают проект из-за первоначальных трудностей.

7.4. Уязвимости безопасности REST API

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

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

7.5. Чрезмерный сбор данных и запросы

Сервер может вернуть запрос с данными, которые могут быть ненужными. Или может понадобиться выполнить несколько запросов, чтобы получить необходимую информацию.

***

Подведение итогов

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

Материалы по теме

  • Как превратить базу данных в RESTful API
  • 🛠 Хватит использовать REST для API!
  • Разбираем по косточкам компьютерные сети: HTTP, TCP, REST
  • 😎✔️ 15 лучших практик разработки и проектирования REST API

Как они работают и что вам нужно знать

В наш век интеграций обмен данными между системами важен как никогда.

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

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

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

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

Что такое REST API?

Чтобы понять REST, нам нужно сначала рассмотреть некоторые ключевые термины:

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

Теперь о нашем определении. REST — это набор рекомендаций, которые программное обеспечение может использовать для связи через Интернет, чтобы сделать интеграцию простой и масштабируемой. REST API (также называемый «RESTful» API) — это особый тип API, который следует этим рекомендациям.

REST означает Передача репрезентативного состояния . Это означает, что когда клиент запрашивает ресурс с помощью REST API, сервер передает обратно текущее состояние ресурса в стандартизированном представлении .

Избранный ресурс

Бесплатная электронная книга: Как использовать API

Заполните форму, чтобы узнать, как использовать API.

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

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

Теперь, когда мы знаем о преимуществах REST API, давайте подробно рассмотрим, что отличает REST API от других типов API.

Шесть правил REST API

Чтобы в полной мере использовать функциональные возможности REST, API должны соответствовать шести требованиям. (Ну, технически пять обязательных и один необязательный. ) Каждое требование закладывает основу для быстрого и универсального API.

1. Разделение клиент-сервер

В архитектуре REST клиент и сервер могут взаимодействовать только одним способом: клиент отправляет запрос на сервер, затем сервер отправляет ответ обратно клиенту. Серверы не могут делать запросы, а клиенты не могут отвечать — все взаимодействия инициируются клиентом.

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

2. Единый интерфейс

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

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

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

Чтобы использовать HTTP с REST API, клиент отправляет запрос в определенном формате, который может показаться вам знакомым. Например, запрос к API YouTube для видеоданных выглядит так:

 

ПОЛУЧИТЬ https://www.googleapis.com/youtube/v3/channels?part=contentDetails

Как и все запросы к REST API, этот запрос содержит две части информации:

  • GET — метод HTTP. Это указывает действие, которое клиент хочет выполнить с ресурсом. Клиент может сделать четыре основных HTTP-запроса:
    • GET: получить ресурс.
    • POST: для создания нового ресурса.
    • PUT: для редактирования или обновления существующего ресурса.
    • УДАЛИТЬ: удалить ресурс.
  • https://… — это URL-адрес. URL-адрес содержит универсальный идентификатор ресурса или URI, который указывает целевой ресурс.

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

После получения и проверки запроса хост возвращает информацию о целевом ресурсе. Обычно информация возвращается в формате JSON, что означает нотация объектов JavaScript. JSON представляет все содержимое ресурса в легком формате, который люди могут легко прочитать.

На этой странице документации API YouTube показан формат видеоресурса Youtube в формате JSON. Можете ли вы назвать некоторые из различных предоставленных ресурсов?

3. Без сохранения состояния

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

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

4. Многоуровневая система

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

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

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

5. Кэшируемый

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

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

6. Код по запросу (необязательно)

Последний принцип REST не является обязательным. При желании API может отправлять компьютерный код клиентам в своем ответе. Это позволяет клиенту запускать код в своем собственном бэкэнде.

Пока API соответствует этому набору правил, он считается RESTful. Однако эти правила оставляют разработчикам достаточно возможностей для настройки функциональности своего API. Эта гибкость отличает REST API от другого распространенного метода веб-API, простого протокола доступа к объектам (SOAP).

REST API и SOAP API

REST обычно сравнивают с SOAP, еще одним способом создания приложений, работающих через HTTP. Основное различие между REST и SOAP заключается в том, что REST — это набор рекомендаций, а SOAP — это протокол. REST позволяет создавать API любым методом, включая HTTP, URL-адреса и JSON. SOAP использует только XML для отправки данных.

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

Зачем использовать REST API?

Платформа REST была представлена ​​ученым-компьютерщиком Роем Филдингом в 2000 году, и сегодня она определяет, как мы просматриваем, модифицируем и передаем контент в Интернете. Многие из самых популярных веб- и облачных компаний используют REST API для своих приложений, включая Facebook, YouTube, Twitter и Google.

Но почему ОТДЫХ? По сути, это отличная система для веб-приложений. Вот основные преимущества этого типа API:

  • REST API являются гибкими. Они могут обрабатывать многие типы запросов и отправлять данные в различных форматах.
  • REST API являются масштабируемыми. Они предназначены для связи между любыми двумя частями программного обеспечения, независимо от размера или возможностей. По мере того, как веб-приложение растет и добавляет больше ресурсов, его REST API сможет быстро обрабатывать увеличивающееся количество и разнообразие запросов.
  • REST API включают существующие веб-технологии , что делает их относительно простыми в создании и использовании. Чтобы запросить ресурс через REST API, вам просто нужно указать его URL.

Как использовать REST API

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

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

Чтобы протестировать общедоступный API, используйте инструмент, который может структурировать HTTP-запросы, например Postman. Попробуйте различные HTTP-методы и URL-адреса и посмотрите, что получится.

Примеры API REST

Вы можете найти API REST по всему Интернету — вы, вероятно, использовали некоторые из них сегодня, даже не подозревая об этом. Вот несколько примеров:

Twitter

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

Instagram

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

Spotify

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

HubSpot

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

Дополнительные примеры API REST, которые вы можете использовать для своего бизнеса, см. в нашем списке наших любимых бесплатных и открытых API для маркетологов.

Не засыпать в REST

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

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

REST API: рекомендации, концепции, структура и преимущества

Время чтения: 12 минут

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

Поймите суть API.

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

Что такое REST API и как он работает

REST — это сокращение от Representational State Transfer, архитектурный стиль для создания веб-сервисов, взаимодействующих по протоколу HTTP. Его принципы были сформулированы в 2000 году ученым-компьютерщиком Роем Филдингом и завоевали популярность как масштабируемая и гибкая альтернатива старым методам межмашинного взаимодействия. Он по-прежнему остается золотым стандартом для общедоступных API.

Клиент REST может взаимодействовать с каждым ресурсом, отправив HTTP-запрос.

Концепции REST API

Ключевыми элементами парадигмы REST API являются

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

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

Методы REST API и структура запроса

Любой запрос REST включает четыре основных части: метод HTTP, конечную точку, заголовки и тело.

HTTP-метод описывает, что нужно сделать с ресурсом . Существует четыре основных метода, также называемых операциями CRUD:

,

    ,

  • , POST для создания ресурса,
  • .

  • GET для получения ресурса,
  • PUT для обновления ресурса и
  • DELETE для удаления ресурса.

Конечная точка содержит универсальный идентификатор ресурса (URI) , указывающий, где и как найти ресурс в Интернете. Самый распространенный тип URI — 9.0039 Уникальное местоположение ресурса (URL), служащее полным веб-адресом.

Заголовки хранят информацию, относящуюся как к клиенту, так и к серверу. В основном заголовки предоставляют данные аутентификации, такие как ключ API, имя или IP-адрес компьютера, на котором установлен сервер, и информацию о формате ответа.

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

REST-запрос на создание нового пользователя, в ответ на который будет возвращен идентификатор созданного ресурса. Источник: Tableau API

Структура ответа REST

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

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

Пример самоописательного ответа сервера с гипермедиа. Источник: Лорен Лонг

Передовой опыт REST: что делает API RESTful

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

Автономность клиент-сервер

Полученные свойства: модифицируемость, повышенная надежность системы

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

Единый интерфейс

Полученные свойства: простота использования, общее понимание

Единый интерфейс — это ключевой атрибут, который отличает REST APIS от не-REST API. Он диктует стандартизированный способ связи с данным сервером, независимо от клиентского приложения или устройства, на котором он запущен. Мы уже упоминали некоторые основы, поддерживающие эту практику, а именно:

  • уникальный идентификатор (URI), назначаемый каждому ресурсу,
  • описательных сообщений, объясняющих, как их интерпретировать и что делать дальше,
  • возможность манипулировать ресурсом через его представление в формате JSON или XML и
  • гипермедиа со ссылками на связанные ресурсы.

Сервер использует один и тот же интерфейс независимо от клиента.

Единый интерфейс помогает разработчикам легко понять логику API. Тодд Мейн, директор по разработке программного обеспечения в Envysion, признается, что испытывает облегчение, если компания-партнер выбирает подход REST: « Я знаю, что могу просто просмотреть список объектов, с которыми я обычно уже знаком, и посмотреть, какие свойства я могу получить или поставить». Тодд добавляет, что реализация кода с помощью RESTful API также проста : «Объекты, которые передаются, транслируются непосредственно в структуры данных на моем языке программирования».

Многоуровневая архитектура

Полученные свойства: улучшенная масштабируемость и безопасность системы

Система RESTful имеет многоуровневую структуру, в которой каждый уровень работает независимо и взаимодействует только с уровнями, непосредственно связанными с ним. При обращении к серверу клиент не знает, есть ли на пути какие-либо посредники.

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

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

Кэширование

Полученные свойства: низкая задержка сервера, увеличение скорости и отклика приложения

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

Взаимодействия без сохранения состояния

Полученные свойства: повышенная производительность, надежность приложений

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

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

«Отказ от гражданства означает меньше побочных эффектов», — Пал Варади Надь, разработчик Hanna Instruments. «Например, в FTP у нас есть текущий сеанс с командами, которые изменяют состояние сеанса. Это состояние может и иногда будет утрачено. Итак, для REST было принято решение сделать его максимально чистым. Это означает, что он основан на функциях PURE, которые всегда возвращают один и тот же результат при одинаковых входных данных и не влияют ни на что другое».

Код по запросу (CoD)

Полученные свойства: настройка функций, расширенная функциональность

Вместо отправки обратно JSON-представлений сервер может вернуть часть исполняемого кода по запросу клиента. Практика CoD дает клиенту больший контроль над функциями и позволяет расширить функциональность.

Принципы REST API: приоритет потребностей бизнеса

Полученное свойство: гибкость

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

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

«Для меня некоторые ограничения (например, архитектура клиент-сервер или отсутствие состояния) — это просто хороший, но довольно стандартный дизайн приложения, а других я бы избегал как чумы!» говорит Гарри Тейлор, старший разработчик программного обеспечения и технический консультант. В частности, Гарри отзывается о кодировании по запросу как о плохой идее: « Последствия для безопасности ужасны, плюс сервер должен делать предположения о природе клиента и его способности выполнять любой переданный код.

Примеры REST API

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

API Trello

Широко используемый инструмент управления проектами предоставляет простой API, позволяющий быстро понять ресурсы REST и применяемые к ним методы HTTP.

Первое, что предлагает введение API Trello, — это сделать GET-запрос к их самому основному ресурсу — доскам.

ПОЛУЧИТЬ сообщение Board с помощью cURL — клиентской программы для выполнения HTTP-запроса по заданному URL-адресу.

Это поможет вам лучше понять, как манипулировать другими базовыми ресурсами, такими как списки, карточки и действия, используя методы, применимые к ним. Например, для Карт доступны два типа POST-запросов:

POST /1/cards/[id карточки или короткая ссылка]/actions/comments означает «Добавить комментарий к карточке

POST /1/cards/[id карточки или короткая ссылка]/actions/idMembers означает « Добавить участника в Карту»

Полный список ресурсов содержит 18 объектов, доступных через API. Каждый из них имеет подробное описание, включающее параметры для всех типов запросов и примеры запросов.

Stripe API

Одно из самых популярных решений для онлайн-платежей может похвастаться, возможно, лучшей документацией по API, которую вы можете найти в Интернете. В Stripe есть специальная команда, которая пишет исчерпывающие руководства с фрагментами кода и примерами запросов и ответов API для каждого отдельного ресурса. «Наша философия заключается в том, чтобы ориентировать документацию на то, как использовать API, а не на то, как он устроен», — объяснила Кристина Кордова, бывший руководитель отдела платежей и партнерских отношений с платформами в Stripe.

Запрос и ответ Stripe Rest API для транзакции баланса.

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

Twilio API

Twilio — это управляемая API платформа для интеграции голосовых и видеовызовов, а также SMS, MMS и других сообщений в веб-приложения и мобильные приложения. Чтобы побудить разработчиков любого уровня создавать средства связи с помощью Twilio, компания предлагает комплексные передовые методы REST API. Кроме того, перед началом работы новички могут прочитать краткое объяснение «Что вообще такое REST API?»

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

Текстовое объяснение того, как отправлять SMS, проиллюстрировано примерами запроса API и ответа JSON API.

Jira REST API

Jira — один из самых популярных инструментов среди менеджеров проектов, которым пользуются более 65 000 команд по всему миру. Его REST API позволяет компаниям программно взаимодействовать с инструментом, интегрируя его функции в корпоративное программное обеспечение или другие приложения, создавая надстройки или автоматизируя взаимодействие с Jira. Существует подробное руководство по доступным ресурсам и способам доступа к ним через API.

Ответ API Jira REST для создания новой доски схватки.

Power BI REST API

По данным Gartner, Microsoft Power BI уже пять лет подряд лидирует в области аналитики и бизнес-аналитики. Эта платформа самообслуживания — лучший выбор для аналитиков данных, разработчиков бизнес-аналитики и лиц, принимающих решения, во всех отраслях. Набор API REST Power BI позволяет клиентам всех типов добавлять интерактивные визуализации данных, информационные панели и отчеты непосредственно в свои существующие приложения.

Прежде чем идти дальше, Microsoft предлагает клиентам изучить функции, доступные через API. Он также предоставляет песочницу разработчика с редактором кода и образцами данных. Вы можете найти документацию по использованию Power BI REST API здесь. А если вы не уверены, соответствует ли этот инструмент вашим требованиям, прочитайте нашу статью о плюсах и минусах Power BI.

REST по сравнению с другими парадигмами API

Прямое сравнение подходов к созданию API спорно. Вот почему мы решили рассмотреть ключевые функции, которые отличают REST от командно-ориентированных вызовов удаленных процедур (RPC), стандартизированного SOAP и основанного на схеме GraphQL.

Сравнение четырех основных парадигм API.

REST против RPC

RPC существует уже давно и по праву может считаться ядром REST. Пал Варади Надь рассматривает REST как « ограниченную семантику подмножества того, что уже происходит в целом — удаленные вызовы процедур ».

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

Последняя версия RPC — gRPC. Используя двоичные данные вместо текста, его передача более компактна и эффективна, чем с REST. gRPC также является типобезопасным, что означает, что он будет отправлять только ожидаемый тип данных.

Однако gRPC требует настройки клиента — включения сгенерированного gRPC кода в клиентские процессы. Это неудобно для динамических языков (например, JavaScript, Python), где процесс сборки может отсутствовать. REST в этом не нуждается. Вызовы API можно выполнять даже путем простого ввода URL-адресов в браузере. Это очень удобно для тестирования API, так как его базовую функциональность можно протестировать только в браузере.

Кроме того, REST обеспечивает лучшую абстракцию, чем RPC. Следуя ограничениям RESTful, вы максимально отделяете клиента от сервера. Соединение RESTful не зависит от ранее существовавшего состояния, в то время как в RPC такого требования нет. Когда REST говорит «Сделай это, а потом забудем друг о друге, », RPC может сказать «Сделай это, затем сделай это», , что будет зависеть от результата предыдущего действия.

Прочтите нашу статью о Что такое gRPC , чтобы узнать больше.

REST и SOAP

Согласно отчету Cloud Elements о состоянии интеграции API за 2017 год, количество API, использующих REST, составляет 83% по сравнению с 15% тех, которые используют SOAP. И это только доказывает, что SOAP еще жив.

Роб Джеймс, занимающийся разработкой программного обеспечения с 80-х годов, отмечает, что, несмотря на свои недостатки, SOAP имеет несколько важных преимуществ: « Инкапсуляция проще, чем более распространенные решения REST/JSON. Язык описания веб-сервиса (или сокращенно WSDL, в котором написана логика SOAP API) дает больше информации, чем предоставляет типичный объект JSON».

Интегрированный с протоколами WS-Security, SOAP API передает сообщения с высоким уровнем конфиденциальности и целостности. Вот почему он остается лучшим вариантом для финансовых услуг, платежных шлюзов (общедоступный API PayPal), программного обеспечения CRM, управления идентификацией и телекоммуникационных услуг.

Тем не менее, Роб Джеймс признает, что его goto — это REST, потому что SOAP нелегко изменить, и его почти невозможно обойти: « Я сталкивался со случаями, когда WSDL не мог быть разрешен с помощью универсальных инструментов, потому что он был создан с помощью определенного инструмента и тегов, специфичных для конкретного поставщика. »

SOAP во многом основывался на первой версии RPC — XML. Таким образом, самым большим плюсом REST по сравнению с SOAP, связанным с XML, является поддержка нескольких форматов.

Прочтите нашу статью о том, что такое SOAP, чтобы узнать больше.

REST vs GraphQL

Чтобы получить информацию для своего запроса, клиенты REST API должны смешивать и сопоставлять несколько конечных точек. Это приводит к другой проблеме — избыточной выборке данных, что означает, что ответ содержит ненужную информацию. Это может замедлить обработку запроса.

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

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

Прочтите нашу статью о GraphQL, чтобы узнать больше.

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

Сравнение типов веб-API

RESTful или RESTish, вот в чем вопрос

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

« Что сделало службы REST важными, так это то, что они были попыткой стандартизировать интерфейсы», — говорит Тодд Мейн. Он подчеркивает, что ни простые, старые вызовы RPC, ни SOAP не имели такой структуры: «Это буквально удаленно доступные вызовы функций. Вместо этого REST предлагает более стандартный способ программного просмотра системы или, по крайней мере, взаимодействия с ней без обращения к руководству на каждом этапе».

В RPC URL-адрес указывает на действие, поскольку его основная цель — обслуживать запросы. Идея REST шире — организовать взаимодействие между независимыми системами.

REST означает немного больше, чем использование HTTP. « Вам даже не нужно использовать HTTP для реализации архитектуры REST, хотя это упрощает задачу», — говорит Клод Уилбур, за плечами которого более 30 лет программирования.

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

This entry was posted in Популярное