Термин REST появился в 2000 году благодаря Рою Филдингу, одному из создателей протокола HTTP. Сегодня REST API используется повсеместно для обмена данными между клиентом и сервером.
REST API - это сборное из двух сокращений понятие:
Что такое API? Это Application Programming Interface; используется для работы одних программ с другими.
Что такое REST? Это Representational State Transfer (передача состояния представления), или способ построения API архитектуры с помощью HTTP.
REST API отвечает за взаимодействия между сервером и приложением-клиентом. Проще говоря, REST API - это технология, используемая везде, где пользователю сайта или приложения нужно предоставить данные с сервера.
HTTP является основой REST сервисов, поскольку данный протокол реализован во всевозможных языках программирования, всех ОС и является универсальным. С помощью HTTP появляется возможность предоставить юзеру определенный ресурс по его URI.
Ресурс - то, что необходимо показать клиенту. Например, мы создали приложение со списками и описаниями кафе в стране. Ресурсом может быть список всех городов в приложении.
Представления ресурсов состоят из данных; метаданных, описывающих данные; и гипермедийных ссылок для перехода к следующему желаемому состоянию.
URI - универсальный идентификатор ресурса. Например, http://allcafes.com/cities, где первая часть (http://allcafes.com) является адресом сайта или сервера, а вторая (/cities) - адресом ресурса на удаленном сервере.
Не существует определенного стандарта REST API, однако в работе, а именно в написании кода интерфейса, слеудет выделять следующие Restful API принципы:
Преимущества REST API и популярность ее использования заложены в принципах и особенностях работы.
Работая с REST API, вы получаете возможность масштабирования. Это возможно благодаря принципу разделения клиента и сервера.
Гибкость REST API обеспечивается из-за использования HTTP и возможности работы с любыми языками программирования, в любых операционных системах. Созданная архитектура Rest API дает возможность обрабатывать любые типы запросов и форматы данных.
За счет использования кэша можно повысить производительность клиента и сервера, поскольку это уменьшит количество обрабатываемых новых запросов.
Надежность и безопасность в REST API вытекает из принципа многоуровневой системы, поскольку она позволяет останавливать атаки на разных уровнях, предотвращая их проникновение во всю серверную архитектуру. Так, критически важные или наиболее уязвимые элементы API архитектуры могут храниться за брандмауэром, предотвращая прямое взаимодействие с ними со стороны клиента.
Несмотря на преимущества REST, занять его позиции пытаются SOAP, GraphQL и RPC. И если SOAP, изобретенный раньше REST, и RPC, имеющий несколько версий, больше популярны в узких областях, то GraphQL считается хорошим прорывом в этой области для более сложных проектов.
Принцип работы RESTful API совпадает с общим принципом работы в Интернете с любым сайтом. Пользователь (клиент) связывается с сервером с помощью API, когда ему требуется какой-либо веб-ресурс. Данный запрос обрабатывается и клиент получает запрашиваемый ресурс.
Поэтапно работу RESTful API можно описать так:
Для работы с ресурсами через REST API используются команды HTTP:
После выполнения или невыполнения любой команды, пользователь получает ответ, начинающийся с определенной цифры. Например, код, начинающийся с 2, означает успешное выполнение команды, 500 - ошибка сервера, коды с цифрой 4 в начале означают неуспешное выполнение команды и указывают на причину ошибки (401 Unauthorized - неуспешная авторизация, 404 Not found - запрашивается несуществующий ресурс и др.)
Спецификация OpenAPI, или лучшие практики разработки REST API, определяет интерфейс для описания API таким образом, который позволяет любому разработчику понять его параметры и возможности. Специалисты делятся своим опытом в открытом доступе, что и позволяет создать данную спецификацию.
Плохо: /cafeKahve или /cafe_Kahve
Хорошо: /cafe-Kahve
Плохо: DELETE /city или DELET /City
Хорошо: DELETE /cities
Плохо: GET /cafe/:cafeId/group/:groupId/price
Хорошо: GET /cafes/:cafeId/ или GET /group/:groupId
Плохо: POST /updatecafe/{cafeId} или GET /getcafes
Хорошо: PUT /cafes/{cafeId}
Например API Blueprint и Swagger.
Обязательно используйте HTTPS для всех ресурсов и сервисов.
Рекомендуется использовать стандартные коды состояния HTTP в ответах на запросы. По кодам HTTP легче сориентироваться, произошла ли ошибка и ее суть.
База данных API может стать достаточно большой и без грамотной сортировки обработка запроса и поиск нужного ресурса будет занимать долгое время.
Еще больше практик работы с REST API можно найти здесь.