Представительное состояние передачи (REST) — это стиль программной архитектуры, который предоставляет рекомендации о том, как должен работать API. Он был создан как руководство для управления коммуникацией в сложной сети, такой как Интернет. REST — это набор принципов и ограничений, которые, если их соблюдать, позволяют создавать масштабируемые, эффективные и поддерживаемые веб-сервисы.
RESTful API, или REST API, — это API, которые следуют архитектурному стилю REST для проектирования и взаимодействия с веб-сервисами. Кроме использования API для обмена данными между двумя или более программами или приложениями, RESTful API способствуют эффективности, масштабируемости и гибкости веб-приложений, играя важную роль в веб-разработке. Другими преимуществами RESTful API в аспекте веб-разработки являются отсутствие состояния, совместимость и интероперабельность, упрощенная интеграция, улучшенная безопасность и простота.
Две основные концепции, которые имеют центральное значение для понимания того, как работают RESTful API, это: Конечные точки и Ресурсы
-
РЕСУРСЫ: Ресурсы — это любая информация, которую можно идентифицировать, называть и манипулировать. Это ключевые абстракции, которые открыты через API.
-
КОНЕЧНАЯ ТОЧКА: Конечная точка — это точка доступа или конкретный URL (Унифицированный указатель ресурса) или URI, который представляет ресурс или коллекцию ресурсов, с помощью которых клиенты могут взаимодействовать с API.
Основные принципы архитектуры REST
Основные принципы архитектуры REST, также известные как ограничения REST, в совокупности определяют архитектуру REST и направляют проектирование веб-сервисов, которые соблюдают эти ограничения. Принципы включают:
-
БЕЗСОСТОЯТЕЛЬНОСТЬ: Каждый запрос от клиента к серверу должен содержать всю необходимую информацию для понимания и обработки запроса. Безсостоятельность повышает масштабируемость и упрощает реализацию сервера.
-
УНИФИЦИРОВАННЫЙ ИНТЕРФЕЙС: Под-ограничения, такие как идентификация ресурса по URL, манипулирование ресурсом по представлению, самоописывающее сообщение и взаимодействие клиентов с приложениями исключительно через гипермедиа, обычно известное как HATEOAS (Hypermedia as the Engine of Application State), обеспечивают унифицированный и последовательный интерфейс.
-
АРХИТЕКТУРА КЛИЕНТ-СЕРВЕР: RESTful-системы следуют структуре, в которой клиент и сервер являются отдельными сущностями, которые общаются через сеть. Клиент отвечает за пользовательский интерфейс и опыт, в то время как сервер отвечает за обработку запросов, управление ресурсами и поддержку бизнес-логики приложения. Это разделение обязанностей повышает масштабируемость и гибкость.
-
СЛОЙНАЯ СИСТЕМА: В REST-архитектуре присутствуют несколько слоев, каждый из которых имеет свою специфическую функциональность. Каждый слой взаимодействует с смежным слоем для поощрения модульности и масштабируемости.
-
CODE ON DEMAND: Этот принцип предоставляет способ загрузки и выполнения кода, предоставленного сервером, расширяя возможности клиентских приложений. Несмотря на то, что “Code on Demand” может обеспечить гибкость, он не всегда подходит для всех сценариев из-за соображений безопасности и потенциального увеличения связности между клиентом и сервером. Решение об использовании “Code on Demand” зависит от конкретных требований и ограничений разрабатываемого приложения.
-
CACHEABILITY: Кэшируемость повышает производительность, позволяя клиентам повторно использовать ранее полученные представления и уменьшая необходимость в повторных запросах к серверу.
Конечные точки в RESTful API
Конечные точки определяют функциональность или действия, выполняемые с ресурсами, такие как получение списка элементов, создание нового элемента, обновление существующего элемента или удаление элемента. У RESTful API часто есть несколько конечных точек для выполнения различных операций с одним и тем же ресурсом или для работы с различными ресурсами.
Конечные точки играют важную роль в проектировании API, служа как точками доступа, через которые клиенты взаимодействуют с API. Некоторые важные конечные точки в проектировании API:
-
Представление ресурса: Конечные точки определяют ресурсы или коллекцию ресурсов, представленных в API, и каждая конечная точка определяет конкретный ресурс или набор ресурсов, четко показывая, с каким ресурсом или набором ресурсов может взаимодействовать клиент.
-
Определение операции: Конечные точки указывают действия, которые клиенты могут выполнять с ресурсами. Методы HTTP типа GET, POST, PUT и DELETE используются для определения действия.
-
Модульность и масштабируемость: Конечные точки способствуют модульности, обобщая конкретные функциональные возможности, связанные с определенным ресурсом или набором ресурсов. Модульность повышает поддерживаемость API и позволяет масштабировать разработку.
-
Четкий и интуитивно понятный дизайн: Выбирая значимые и последовательные соглашения об именовании конечных точек, разработчики могут легко понять назначение и функциональность каждой конечной точки, что способствует ясности и интуитивному дизайну API.
Существуют разные типы конечных точек, классифицируемые на основе их функциональности и типов операций, которые они поддерживают. Некоторые из различных типов включают:
-
Конечные точки чтения и получения: используются для извлечения ресурсов с сервера с использованием метода HTTP GET.
-
Создание или конечные точки POST: используются для создания новых ресурсов на сервере с использованием метода HTTP POST
-
Удаление точки входа: используется для удаления ресурса на сервере с использованием метода HTTP DELETE
-
Обновление или PUT-точки входа: используется для обновления существующих ресурсов на сервере с использованием метода HTTP PUT.
-
Поиск или запрос точек входа: Позволяет клиентам извлекать подмножество ресурсов на основе указанных критериев с использованием метода HTTP GET.
-
Список точек входа: Извлекает коллекцию или список ресурсов с использованием метода HTTP GET.
Ресурсы в RESTful API
Ресурсы – это ключевые абстракции, представляющие любую информацию, которую можно идентифицировать, назвать и обработать. Примеры ресурсов включают профили пользователей, статьи и любую другую сущность данных, с которой работают приложения. Ресурсы могут быть идентифицированы по отдельному URI (Унифицированный Идентификатор Ресурса). Они обычно находятся в форматах JSON или XML, и каждый ресурс можно создавать, извлекать, обновлять и удалять с использованием стандартных методов HTTP.
Основа построения RESTful архитектуры – это идентификация ее ресурсов. Некоторые из основных рекомендаций по идентификации ресурсов в дизайне API включают:
-
Используйте Существительные для Названий Ресурсов: вместо использования глаголов типа “получить” или “извлечь” в названии ресурса используйте существительные, такие как “пользователи” или “продукты”.
-
Соглашения об Именовании Ресурсов: Следуйте последовательному соглашению об именовании ресурсов. Используйте имена, которые легко понимать и запоминать.
-
Используйте множественное число для коллекций ресурсов: Например, ‘/users’ – это коллекция ресурсов пользователей, а ‘/products’ – коллекция ресурсов продуктов.
-
Документация: API должны быть четко документированы, чтобы пользователи могли понять доступные ресурсы и способы взаимодействия с ними.
Отношение между ресурсами и конечными точками
Отношение между ресурсами и конечными точками является фундаментальным для проектирования и функциональности RESTful API. Некоторые из отношений между ними:
-
Конечные точки как точки доступа: Конечная точка – это конкретный URI или URL, который соответствует ресурсу или коллекции ресурсов. Она предоставляет конкретную точку доступа, через которую клиенты могут взаимодействовать с ресурсом.
-
Конечная точка идентифицирует ресурс: Конечная точка идентифицирует ресурс или набор ресурсов. Например, если у вас есть ресурс, представляющий пользователей, конечная точка может быть ‘/users’.
-
Методы HTTP определяют операции: Конечные точки ассоциированы с определенными методами HTTP (GET, POST, PUT, DELETE и т. д.), которые определяют операции, которые можно выполнить с соответствующим ресурсом.
-
Представление ресурса: Конечная точка обменивается представлениями ресурса с сервером, когда клиент с ним взаимодействует. Эти представления могут быть в различных форматах, таких как JSON или XML, и содержать состояние или информацию о ресурсе. Представление является полезной нагрузкой HTTP-запроса или ответа.
-
Единый интерфейс: Отношение между ресурсами и конечными точками соответствует унифицированным ограничениям интерфейса REST. Комбинация ресурсов и конечных точек создает последовательную и предсказуемую структуру API.
-
HATEOAS (Гипермедиа в качестве движущей силы состояния приложения): Включение гипермедиа-ссылок в представления ресурсов, позволяющее клиентам динамически навигировать по API.
Заключение
Взаимодействие между ресурсами и конечными точками критично в дизайне RESTful API для разработки унифицированной и эффективной архитектуры. Ресурсы, представляющие концептуальные сущности, определяют основные сущности системы, такие как пользователи или продукты. Конечные точки, представленные URI, служат воротами для клиентов для взаимодействия с этими ресурсами с помощью указанных HTTP-методов. Следуя принципам REST, эта симбиотическая связь обеспечивает единый интерфейс, самоописывающее общение и динамическую навигацию с помощью гипермедиа-ссылок (HATEOAS). Тщательное выравнивание ресурсов и конечных точек – это не просто техническая деталь; это концепция дизайна, которая обеспечивает ясность, масштабируемость и адаптивность API, что приводит к безупречному и интуитивному опыту как для разработчиков, так и для пользователей.
Source:
https://inioluwa2003.hashnode.dev/demystifying-restful-apis-a-deep-dive-into-endpoints-and-resources