REST API — это прикладной программный интерфейс (API), который использует HTTP-запросы для получения, извлечения, размещения и удаления данных. Аббревиатура REST в контексте API расшифровывается как «передача состояния представления» (Representational State Transfer). Что это значит? Объясним простыми словами.
Начнем с того, что такое API. Для веб-сайта это код, который позволяет двум программам взаимодействовать друг с другом. API предлагает разработчикам правильный способ написания программы, запрашивающей услуги у операционной системы или другого приложения. Проще говоря, это своего рода стандарт, который позволяет программам и приложениям понимать друг друга; это язык интернета, который необходим для работы практически всех сайтов и приложений.
Еще одна распространенная сфера применения — облачные технологии, где REST API нужен для предоставления и организации доступа к веб-службам. Технология позволяет пользователям гибко подключаться к облачным сервисам, управлять ими и взаимодействовать в распределенной среде.
API REST (или RESTful) основан на передаче состояния представлений, архитектурном стиле и подходе к коммуникациям, часто используемым при разработке веб-служб. Некоторые веб-мастера рекомендуют использовать вместо этой технологии SOAP, которая считается более надежной. Но она проигрывает REST API по скорости (последняя использует меньшую пропускную способность, что делает ее более подходящей для эффективного использования интернета).
ПРИНЦИПЫ REST API
Принципы REST API определены в диссертации его создателя Роя Филдинга. Основные из них:
- единый интерфейс;
- разграничение клиента и сервера;
- нет сохранения состояния;
- кэширование всегда разрешено;
- многоуровневая система;
- код предоставляется по запросу.
Единый интерфейс
Ресурсы должны быть однозначно идентифицированы посредством одного URL-адреса и только с помощью базовых методов сетевого протокола (DELETE, PUT, GET, HTTP).
Клиент-сервер
Должно быть четкое разграничение между клиентом и сервером:
- пользовательский интерфейс и вопросы сбора запросов — на стороне клиента.
- доступ к данным, управление рабочей нагрузкой и безопасность — на стороне сервера.
Сохранение состояния
Все клиент-серверные операции должны быть без сохранения состояния. Любое необходимое управление состоянием должно осуществляться на клиенте, а не на сервере.
Кэширование
Все ресурсы должны разрешать кэширование, если явно не указано, что оно невозможно.
Многоуровневая система
REST API допускает архитектуру, которая состоит из нескольких уровней серверов.
Запрос кода
В большинстве случаев сервер отправляет обратно статические представления ресурсов в формате XML или JSON. Однако при необходимости серверы могут отправлять исполняемый код непосредственно клиенту.
СТАНДАРТЫ
До REST API разработчики использовали SOAP. Им приходилось вручную писать документ XML с удаленным вызовов процедур (RPC) в теле.
В 2000 году Рой Филдинг и группа разработчиков решили создать такой стандарт, чтобы один сервер мог общаться с любым другим, независимо от его типа. Он определил REST и архитектурные ограничения для API, которые описал в своей докторской диссертации 2000 года в Калифорнийском университете в Ирвине. Эти универсальные правила облегчают разработчикам интеграцию программного обеспечения.
Разработчики используют API-интерфейсы RESTful для добавления функциональности на свои веб-сайты и приложения. Сегодня такие интерфейсы считаются «основой интернета».
Аутентификация REST API зависит от контекста использования. В некоторых случаях стороннее приложение считается другим зарегистрированным пользователем с определенными правами и разрешениями. Например, при создании направлений из API-карты. В других случаях стороннее приложение используется зарегистрированным пользователем и может получить доступ только к его данным, например, при получении электронной почты.
Важный недостаток REST API — слабая устойчивость к взлому. Чтобы обезопасить ресурсы, нужно выполнять следующие рекомендации:
- использовать HTTPS;
- применять надежный метод аутентификации;
- пользоваться CORS для ограничения вызовов на стороне клиента конкретными доменами;
- обеспечить минимальную функциональность — не создавать опции DELETE, которые не требуются;
- проверить все URL конечной точки и данные тела (body);
- избегать выставления токенов API в клиентском JavaScript;
- заблокировать доступ с неизвестных доменов или IP-адресов;
- блокировать неожиданно большие полезные нагрузки;
- ограничивать скорость для запросов, использующих один и тот же токен REST API или IP-адрес;
- настраивать ответы в соответствии с кодом состояния HTTP и кэшированием заголовка;
- регистрировать запросы и мониторить сбои.
АРХИТЕКТУРА REST API
Лучше всего архитектура REST API видна в запросе веб-службы. Из чего она состоит:
- URL-адрес конечной точки;
- метод HTTP;
- заголовки HTTP;
- данные тела (body).
URL-адрес конечной точки
Приложение с REST API будет определять один или несколько URL-адресов конечных точек с доменом, порт, путь, строки запроса.
Метод HTTP
Различные методы HTTP можно использовать на любой конечной точке, которая сопоставляется с операциями создания, чтения, обновления и удаления (CRUD) приложения.
Методы HTTP состоят из запросов:
- GET;
- POST;
- PUT;
- DELETE.
Заголовки HTTP
Такая информация, как токены аутентификации или файлы cookie, может содержаться в заголовке HTTP-запроса.
Данные тела (body)
Данные обычно передаются в теле HTTP идентично HTML-представлению или путем отправки одной строки данных в кодировке JSON.
КАК ЭТО РАБОТАЕТ?
REST API разбивает последовательность обмена информацией, создавая серию небольших модулей. Каждый модуль, в свою очередь, обращается к определенной базовой части транзакции (последовательности). Такая система дает разработчикам огромные возможности, но с одной оговоркой: специалист должен уметь разрабатывать собственный REST API с нуля.
Что делать тем, у кого не хватает квалификации? Можно воспользоваться базовыми моделями от Amazon S3, интерфейсом управления облачными данными CDMI или OpenStack Swift.
Какие подсистемы использует REST API:
- методологии HTTP, определенные протоколом RFC 2616;
- POST — создает ресурс;
- DELETE — удаляет ресурс;
- GET — применяется, чтобы получить ресурс;
- PUT в виде объекта, блока или файла — нужен, чтобы изменить состояние или обновить ресурс.
Где используется
Чаще всего REST API используют в облачных приложениях. Благодаря тому, что в этой системе у компонентов нет состояния, они свободно перераспределяются в случае сбоя, масштабируются с учетом изменений рабочей нагрузки. Такая особенность одинаково полезна как для WEB, так и для облачных сервисов.
REST API также применяют для облачных вычислений и микросервисов.
ПРИМЕР
Существует множество инструментов, помогающих в разработке REST API на всех языках. Известные варианты включают в себя:
- Swagger — множество инструментов, помогающих проектировать, документировать, макетировать, тестировать и контролировать REST API;
- Get Postman — приложение для тестирования;
- Postwoman — альтернатива Get Postman с открытым исходным кодом.
Создадим стандартный код для Hello world с помощью REST API. В этом примере мы будем использовать инфраструктуру Node.js Express. Одна конечная точка (/hello/) будет отвечать на запросы GET.
Установите Node.js, затем создайте новую папку с именем restapi. Создайте в папке package.json новый файл со следующим содержимым:
Запустите npm install из командной строки, чтобы получить зависимости, затем создайте файл index.js со следующим кодом:
Запустите приложение из командной строки с помощью npm start и откройте http://localhost:8888/hello/ в браузере. В ответ на запрос GET отобразится следующий JSON:
Еще с помощью REST API можно настроить имя, поэтому http://localhost:8888/hello/everyone/ возвращает: