SOAP и REST
Чем SOAP отличается от REST?
SOAP (Simple Object Access Protocol) и REST
(Representational State Transfer) - это два различных подхода к
веб-сервисам:
-
Протокол обмена данными:
-
SOAP: Использует протокол SOAP для обмена структурированными сообщениями (XML) по сети.
-
REST: Основан на принципах HTTP и использует стандартные методы HTTP (GET, POST, PUT, DELETE) для доступа к ресурсам.
-
-
Формат сообщений:
-
SOAP: Сообщения SOAP обычно представлены в XML формате и часто содержат метаданные о структуре данных.
-
REST: Возвращает данные в различных форматах, таких как JSON, XML, HTML или текст, в зависимости от запроса клиента.
-
-
Управление состоянием (State):
-
SOAP сам по себе не требует сохранения состояния между вызовами. Сессионное поведение может задаваться приложением или дополнительными спецификациями.
-
REST является архитектурным стилем. Ограничение stateless требует, чтобы каждый запрос содержал контекст для обработки; сервер при этом может хранить ресурсы и бизнес-данные.
-
-
Простота и гибкость:
-
REST: Считается более простым и гибким в сравнении с SOAP, так как основывается на стандартных HTTP методах и форматах данных.
-
SOAP: Предоставляет большую структурированность и четкость в обмене сообщениями, что может быть полезно в сложных интеграционных сценариях.
-
Из чего состоит сообщение в SOAP?
Сообщение в SOAP (Simple Object Access Protocol) состоит из трех основных частей:
-
Envelope(Оболочка): Определяет структуру XML-документа и обязательно присутствует в каждом SOAP-сообщении. Включает информацию о версии SOAP и пространствах имен. -
Header(Заголовок): Опциональная часть, которая содержит метаданные или информацию о маршрутизации и обработке сообщения, такие как аутентификация, транзакционные данные и другие параметры. -
Body(Тело): Содержит основное содержимое сообщения, которое передается между отправителем и получателем. Обычно это XML-документ с данными, которые требуется обработать или передать.
SOAP-сообщение часто используется для интеграции между различными
системами и является стандартом для обмена структурированными и комплексными
данными по сети.
Что содержит HEADER в ответе REST?
В ответе REST, заголовок (HEADER) может содержать различные метаданные и управляющие данные, такие как:
-
Статус ответа передаётся отдельно от обычных полей заголовков: в строке статуса HTTP/1.1, а в HTTP/2 и HTTP/3 в псевдозаголовке :status.
-
Кэширование: Заголовки Cache-Control, Expires и ETag могут использоваться для управления кэшированием ответа на клиентской стороне.
-
Аутентификация: WWW-Authenticate в ответе задаёт запрос аутентификации. Authorization обычно передаётся клиентом в запросе.
-
Тип содержимого: Заголовок Content-Type указывает на тип возвращаемого контента (например, application/json для JSON или text/xml для XML).
-
Перенаправление: Location указывает URI, на который следует перейти. Стандартного поля ответа Redirect для этого нет.
-
Дополнительные данные: Другие заголовки могут содержать различные метаданные, такие как дата и время ответа, сервер и прочее.
Чем отличаются HTTP-статусы 200 OK и 201 Created?
200 OK и 201 Created относятся к успешным HTTP-ответам:
-
200 OK:
-
Этот статус указывает, что запрос клиента успешно обработан сервером.
-
Обычно используется для ответа на запросы типа GET, POST, PUT или DELETE.
-
При успешной обработке запроса сервер возвращает запрашиваемые данные в теле ответа.
-
-
Код состояния 201 (
Created):-
Этот статус указывает, что сервер успешно создал новый ресурс по указанному клиентом запросу.
-
Часто используется после успешного выполнения операции POST, когда создается новый объект или запись в базе данных.
-
В теле ответа может содержаться информация о созданном ресурсе, а также ссылка на него.
-
Какие методы REST вы знаете?
В архитектуре REST (Representational State Transfer) используются следующие основные методы (или операции), которые описывают типы действий, которые клиенты могут выполнить с ресурсами на сервере:
-
GET: Получение данных или ресурсов с сервера. Операция не должна изменять состояние сервера. -
POST: Создание нового ресурса на сервере. Обычно используется для отправки данных на сервер для последующего сохранения. -
PUT: Обновление существующего ресурса на сервере. Полностью заменяет текущее состояние ресурса на новое. -
PATCH: Частичное обновление существующего ресурса на сервере. Используется для изменения только части ресурса без его полной замены. -
DELETE: Удаление ресурса с сервера. Операция удаляет указанный ресурс.
Эти методы позволяют клиентам взаимодействовать с ресурсами на сервере, изменять и получать данные с учетом REST-принципов, таких как унификация интерфейса и отсутствие состояния на сервере (statelessness).
Чем POST отличается от GET?
POST и GET - это два основных HTTP метода,
используемых в архитектуре REST для взаимодействия с веб-ресурсами. Они имеют
следующие различия:
-
GET:-
Используется для запроса данных с сервера.
-
Параметры запроса передаются в URL как часть строки запроса (query string).
-
Ограничен по длине данных, которые можно передать в URL.
-
Кэшируется браузером, что облегчает повторное использование данных.
-
Не должен использоваться для отправки конфиденциальных данных, так как данные передаются в URL и могут быть видны в истории браузера или логах сервера.
-
-
POST:-
Используется для отправки данных на сервер для обработки или сохранения.
-
Параметры запроса передаются в теле запроса (request body).
-
Размер тела ограничивается настройками клиента, прокси и сервера; универсального неограниченного объёма нет.
-
Ответ POST может быть кешируемым при явно заданных условиях, но многие кеши поддерживают только GET и HEAD.
-
Тело POST не попадает в адресную строку, но само по себе не защищает данные. HTTPS шифрует при передаче и тело, и URL-путь с query; приложение и сервер всё равно могут их журналировать.
-
Чем PUT отличается от PATCH?
PUT и PATCH - это HTTP методы, используемые для
обновления ресурсов на сервере в архитектуре REST. Они отличаются следующим
образом:
-
PUT:-
Используется для полного обновления существующего ресурса на сервере.
-
При выполнении запроса PUT клиент отправляет целевой ресурс с полными данными (полное представление ресурса).
-
Если ресурс существует, он заменяется новыми данными, которые клиент передал.
-
Если ресурс не существует, PUT может создать новый ресурс с указанным идентификатором.
-
-
PATCH:-
Используется для частичного обновления существующего ресурса на сервере.
-
При выполнении запроса PATCH клиент отправляет только ту часть данных, которую необходимо изменить (частичное представление ресурса).
-
PATCH применяет изменения к ресурсу, не затрагивая остальные его аспекты.
-
При этом PATCH может использовать операции добавления, замены, удаления частей данных ресурса в соответствии с протоколом JSON Patch или другими спецификациями.
-
Напишите пример REST-API для книжной библиотеки (напишите методы, эндпоинты и пример JSON).
Пример REST API для книжной библиотеки может включать следующие методы, эндпоинты и примеры JSON:
-
Получение списка всех книг
-
Метод: GET
-
Эндпоинт:
/books -
Пример JSON ответа:
[ { "id": 1, "title": "1984", "author": "George Orwell", "genre": "Science Fiction" }, { "id": 2, "title": "To Kill a Mockingbird", "author": "Harper Lee", "genre": "Classic" } ]
-
-
Получение информации о конкретной книге по ID
-
Метод: GET
-
Эндпоинт:
/books/{id} -
Пример JSON ответа:
{ "id": 1, "title": "1984", "author": "George Orwell", "genre": "Science Fiction", "isbn": "978-0451524935", "published_year": 1949 }
-
-
Добавление новой книги
-
Метод: POST
-
Эндпоинт:
/books -
Пример JSON запроса:
{ "title": "The Great Gatsby", "author": "F. Scott Fitzgerald", "genre": "Classic", "isbn": "978-0743273565", "published_year": 1925 } -
Пример JSON ответа (новая книга с ID):
{ "id": 3, "title": "The Great Gatsby", "author": "F. Scott Fitzgerald", "genre": "Classic", "isbn": "978-0743273565", "published_year": 1925 }
-
-
Обновление информации о книге
-
Метод: PUT
-
Эндпоинт:
/books/{id} -
Пример JSON запроса:
{ "title": "The Great Gatsby", "author": "F. Scott Fitzgerald", "genre": "Classic", "isbn": "978-0743273565", "published_year": 1925 }
-
-
Удаление книги
-
Метод: DELETE
-
Эндпоинт:
/books/{id}
-