- •Аннотация
- •Cодержание
- •Введение
- •1. Теоретические основы и архитектурные принципы Web-сервисов
- •1.1. Протокол soap и стандарты ws-*
- •1.2. Архитектурный стиль rest
- •1.3. Сравнение форматов данных: xml против json
- •1.4. Сравнительная характеристика подходов
- •2. Проектирование и программная реализация системы
- •2.1. Обоснование выбора стека технологий
- •2.2. Архитектурная организация серверной части
- •2.3. Реализация уровня данных (Data Access Layer)
- •2.4. Реализация soap-сервиса
- •2.5. Реализация rest-сервиса
- •2.6. Реализация клиентского приложения и сбор метрик
- •3. Анализ производительности
- •3.1. Методика тестирования
- •3.2. Результаты тестирования
- •3.2.1. Анализ размера данных (Traffic Overhead)
- •3.2.2. Анализ вычислительной сложности (Parsing Time)
- •3.2.3. Анализ времени загрузки в плохих условиях (Slow 3g)
- •3.3. Итоговое сравнение и выводы
- •Список использованных источников
- •Приложение а Код файла student.Wsdl
- •Листинг программного кода серверной части. Index.Ts
- •Листинг программного кода серверной части. Student.Repository.Ts
- •Листинг программного кода серверной части. Student.Soap.Ts
- •Листинг программного кода серверной части. Rest.Service.Ts
- •Листинг программного кода серверной части. Soap.Service.Ts
- •Листинг программного кода серверной части. ServicePanel.Vue
1.2. Архитектурный стиль rest
REST (Representational State Transfer) – это архитектурный стиль, описанный Роем Филдингом в 2000 году [1]. В отличие от SOAP, REST не является протоколом и не имеет официального стандарта W3C. Это набор ограничений и рекомендаций для построения масштабируемых систем.
Шесть ограничений REST:
Для того чтобы система считалась RESTful, она должна удовлетворять следующим принципам:
Клиент-Сервер (Client-Server): Разделение ответственности. Сервер занимается хранением данных, клиент – интерфейсом.
Отсутствие состояния (Stateless): Сервер не хранит информацию о состоянии сессии клиента между запросами. Каждый запрос должен содержать всю необходимую информацию для его обработки.
Кэшируемость (Cacheable): Ответы сервера должны быть явно помечены как кэшируемые или некэшируемые.
Единообразие интерфейса (Uniform Interface): Унифицированный способ обращения к ресурсам (обычно через URI) и использование стандартных методов HTTP.
Слоистая система (Layered System): Клиент не знает, общается ли он напрямую с сервером или через промежуточные узлы (балансировщики, прокси).
Код по требованию (Code on Demand): (Опционально) Сервер может передавать исполняемый код (например, скрипты JS) клиенту.
Ресурсы и методы HTTP
В REST ключевой абстракцией является «Ресурс». Каждая сущность (например, «Студент») имеет свой уникальный идентификатор (URI). Манипуляции с ресурсами производятся с помощью стандартных HTTP-методов, которые семантически соответствуют CRUD-операциям [4]:
GET: Получение представления ресурса (безопасный и идемпотентный метод).
POST: Создание нового ресурса.
PUT / PATCH: Полное или частичное обновление ресурса.
DELETE: Удаление ресурса.
При проектировании RESTful систем критически важными являются понятия идемпотентности и уровней зрелости API.
Идемпотентность методов
Свойство идемпотентности означает, что многократный повторный вызов одного и того же метода с теми же параметрами приведет к тому же состоянию сервера, что и однократный вызов.
Методы GET, PUT, DELETE являются идемпотентными. Например, повторная отправка запроса DELETE /students/1 не приведет к ошибке логики: если студент удален, он останется удаленным. Это свойство критически важно для надежности сетевого взаимодействия: если клиент не получил ответ из-за сбоя сети, он может безопасно повторить идемпотентный запрос.
Метод POST не является идемпотентным. Повторная отправка POST-запроса может привести к созданию дубликата ресурса.
HATEOAS и Модель зрелости Ричардсона [6]
Вершиной развития REST-архитектуры (Уровень 3 по модели Ричардсона) является принцип HATEOAS (Hypermedia as the Engine of Application State). Согласно этому принципу, клиент взаимодействует с приложением исключительно через гипермедиа, предоставляемую сервером. В ответе сервера, помимо данных, содержатся ссылки (links) на возможные следующие действия. Это снижает связность (coupling) между клиентом и сервером, так как логика переходов диктуется сервером динамически.
