WEB & REST Flashcards

1
Q

Что такое REST?

A

Representational State Transfer - архитектурный стиль создания приложений, базирующийся на передаче данных по протоколу HTTP.

Согласно REST каждая единица информации (ресурс) однозначно определяется глобальным идентификатором, таким как URL. Каждая URL в свою очередь имеет строго заданный формат.
Это значит, что URL по сути является первичным ключом для единицы данных. Т.е. например третья книга с книжной полки будет иметь вид /book/3, а 35 страница в этой книге — /book/3/page/35

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Что такое REST APl?

A

Representational State Transfer Application Programming Interface - способ взаимодействия меджу приложениями, спроектированный с учетом всех ограничений и принципов REST.
Его также называют RESTful.

Позволяет взаимодействовать с удаленными приложениями и серверами через стандартные http методы и передавать данные в формате JSON / XML / HTML.

RESTful-система должна быть достаточно гибкой для различных сценариев использования, масштабируемой для размещения большого количества пользователей и компонентов, а также адаптируемой с течением времени.

С его помощью мы можем связывать разные компоненты(языки, фреймворки, …), например один раз написать бэкенд на спринге и обращаться к нему через REST из JS / IOS / Android, …

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Перечислите 6 принципов REST API

A

1) Client-Server. Отделяя пользовательский интерфейс от хранилища данных, мы улучшаем переносимость пользовательского интерфейса на другие платформы и улучшаем масштабируемость серверных компонентов засчёт их упрощения.

2) Stateless (без состояния). Каждый запрос от клиента к серверу должен содержать в себе всю необходимую информацию и не может полагаться на какое-либо состояние, хранящееся на стороне сервера. Таким образом, информация о текущей сессии должна целиком храниться у клиента.

3) Cacheable (кэшируемость). Это ограничение требует, чтобы для данных в ответе на запрос явно было указано – можно их кэшировать или нет. Если ответ поддерживает кэширование, то клиент имеет право повторно использовать данные в последующих эквивалентных запросов без обращения на сервер.

4) “Uniform interface (единообразие интерфейса). Гарантирует, что сервер и клиент общаются на едином универсальном языке, который позволяет им быть заменяемыми или изменяемыми, без нарушения целостности системы.

5) Layered system (многоуровневая система). Многоуровневость достигается засчёт ограничения поведения компонентов таким образом, что каждый компонент ограничен способностью видеть только соседний слой и взаимодействовать только с ним.
Прокси — это дополнительный компонент, он ретранслирует HTTP-запросы на серверы или другие прокси.
Шлюз — это еще один дополнительный компонент, он переводит HTTP-запрос в другой протокол, распространяет этот запрос, а затем переводит полученный ответ обратно в HTTP.

6) Code on demand (код по мере необходимости, необятельно). REST позволяет наращивать функциональность клиентского приложения по мере необходимости при помощи скачивания и исполнения кода в виде апплетов или скриптов. Это упрощает клиентские приложения, уменьшая количество заранее написанных возможностей.

https://habr.com/ru/companies/hexlet/articles/274675/

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Объясните ограничения единого интерфейса

A

Когда система
имеет идентификаторы для каждого ресурса,
управляет ресурсами через направление запросов от клиента серверу,
содержит самодостаточные сообщения
и составлена из гипермедиа,
то говорят, что у неё единый интерфейс.

1) идентичность ресурсов: В терминологии REST что угодно может быть ресурсом — HTML-документ, изображение, информация о конкретном пользователе и т.д.
Каждый ресурс должен быть уникально обозначен постоянным идентификатором. «Постоянный» означает, что идентификатор не изменится за время обмена данными, и даже когда изменится состояние ресурса.
2) манипуляция над ресурсами через представление: клиент управляет ресурсами, направляя серверу представления, обычно в виде JSON-объекта, содержащего контент, который он хотел бы добавить, удалить или изменить. В REST у сервера полный контроль над ресурсами, и он отвечает за любые изменения. Когда клиент хочет внести изменения в ресурсы, он посылает серверу представление того, каким он видит итоговый ресурс. Сервер принимает запрос как предложение, но за ним всё так же остаётся полный контроль.
3) исчерпывающие, понятные человеку сообщения; Самодостаточное сообщение, содержащее всю информацию, которая необходима для понимания его получателем. В отдельной документации или другом сообщении не должно быть дополнительной информации.
4) гипермедиа (hypermedia) как движок для состояния приложения (HATEOAS) - ссылки на другие ресурсы внутри приложения. Последнее ограничение интерфейса — это ограничение гипермедиа. Гипермедиа — это пафосное понятие для обозначения данных, которые содержат информацию о том, что клиенту нужно делать дальше, другими словами, какие еще запросы он может сделать. В REST серверы должны посылать клиентам только гипермедиа.
HTML — это один из видов гипермедиа.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Что такое CRUD?

A

Create
Read / Retrieve
Update
Delete

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Что такое модель OSI?

A

Модель OSI (или Open System Interconnection) характеризует взаимодействие сетевого оборудования. Иными словами, посредством неё общаются такие устройства, как ПК с сетевыми картами, коммутаторы, роутеры.

Когда осуществляется передача с верхнего уровня на нижний, это именуется инкапсуляцией данных, а в обратном порядке – декапсуляцией.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Какие 7 уровней взаимодействия есть в модели OSI?

A

1) Физический (Physical)
Ззанимается непосредственно передачей информации. Здесь сигналы (радиосигналы, электрические, оптические) уходят от отправителя к получателю. Оперирует битами.
Один из основных стандартов среди технологий физического уровня – Ethernet.

2) Канальный уровень (Data Link)
После получения сигнала с физического уровня происходит проверка и исправление погрешностей передачи. Здесь появляются термины «фрейм» и «MAC-адрес».
В нём условно выделяют следующие подуровни управления:
Устройствами второго, канального, уровня считаются мосты и коммутаторы.

3) Сетевой уровень (Network)
На этой ступени вводятся понятия «маршрутизация» и «IP-адрес». Для трансформации MAC-адресов в IP применяется протокол ARP.
Пакет данных – это новый термин, который появляется на 3-м сетевом уровне.
Устройствами здесь являются роутер или маршрутизатор.

4) Транспортный уровень (Transport)
В стеке TCP/IP транспортные протоколы определяют, для какого именно приложения предназначены эти данные.
Здесь происходит доставка информации по каналам внешней сети. Блоки данных в данном случае делятся на отдельные фрагменты, размеры которых будут зависеть от используемого протокола. Для транспортного уровня это TCP и UDP.
TCP (Transmission Control Protocol) – протокол, хорошо подходящий для передачи трафика, для которого любые потери пакетов чувствительны. Процесс передачи контролируется, благодаря чему потерянные пакеты будут обнаружены и запрошены повторно.
UDP (User Datagram Protocol) применяется, когда потеря нескольких пакетов не принципиальна. Например, при передаче видео, изображений.

5) Сеансовый уровень (Session)
Сеансовый уровень в ответе за организацию сеансов связи между приложениями на компьютерах. Он отвечает за создание и окончание сеанса, обмен данными, за синхронизацию и другие процессы.

6) Уровень представления (Presentation)
На шестой ступени осуществляется преобразование форматов данных, например, сжатие и кодирование.

7) Уровень приложений (Application)
Верхний уровень модели, где располагаются сетевые службы, с которыми напрямую взаимодействуют пользователи. Данный уровень описывает взаимосвязь приложений на ПК и внешней сети.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Расскажите о методах HTTP-запросов, поддерживаемых REST, и о том, когда они используются.

A

GET
Получение информации. GET запросы должны быть безопасны и идемпотентны, т.е. независимо от того, как много времени они повторяются с теми же самысыми параметрами, результат останется тот же. Они могут иметь побочные эффекты, но пользователь не ожидает их, поэтому они не могут быть критичными для функционирования системы. Запросы могут быть также частичными или условными.
Получение адреса по ID, равным 1:
GET /addresses/1

POST
Запрос что-то сделать с ресурсом по URI с предоставлением сущности. Часто POST используется для создания новой сущности, но также возможно использовать и для обновления существующей.
Создание нового адреса:
POST /addresses

PUT
Сохраняет сущность по готовому URI. PUT может создавать новую сущноть или обновлять существующую. PUT запрос идемпотентен. Идемпотентность - главное отличие в поведении между PUT и POST запросом.
Изменение адреса по ID, равным 1:
PUT /addresses/1
PUT заменяет сущетвующую сущность. Те элементы сущности, которые не представлены в запросе, будут очищены или заменены на null.

PATCH
Обновляет только определенные поля сущности по URI. PATCH запрос идемпотентен.
PATCH /addresses/1
Этот метод некэшируемый, небезопасный и неидемпотентный.

DELETE
Запрос, который удаляет ресурс; кроме того, ресурс не должен быть удален немедленно. Он может быть асинхронным или “долгоиграющим” запросом.

Удаления адреса по ID, равным 1:
DELETE /addresses/1

https://habr.com/ru/companies/yandex/articles/265569/

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Различие между методами GET и POST

A

“GET передает данные в URL в виде пар ““имя-значение””, данные видны всем в адресной строке браузера. Длина запроса не более 2048 символов. Следует использовать для получения данных от сервера и не желательно в запросах, предполагающих внесений изменений в ресурс.
POST передает данные в теле запроса. Данные можно увидеть только с помощью инструментов разработчика, расширений браузера. Следует использовать в случаях, когда нужно вносить изменение в ресурс. HTTP метод POST поддерживает тип кодирования данных multipart/form-data, что позволяет передавать файлы.”

Get - кештруется, Post - нет. Get не должен изменять состояние сервера.

POST используется в том случае, если у вас нет URL, к которому вы хотите применить операцию. Например, если пользователь пишет новое сообщение в тредик на форуме, он может сам вычислить его id и сделать:
PUT /threads/php-rulezz/messages/100500

Если клиенту генерировать id не разрешено, ему придётся делать POST на ресурс уровнем выше по иерархии:
POST /threads/php-rulezz/messages

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Каковы недостатки REST API?

A

Преимущества REST
Масштабируемость. Так как архитектура REST разделяет клиент и сервер, ее легко расширять, что позволяет масштабировать приложение без особых проблем.
Гибкость. Кроме того, эта архитектура весьма гибкая и дает возможность обрабатывать различные типы запросов и форматы данных.

Ограничения REST
Чрезмерная выборка. Зачастую конечная точка API предоставляет на запрос лишнюю информацию, которая не требуется клиенту для совершения действий. Например, вы хотите получить только имя пользователя, но метод сообщает вам еще его возраст, телефон и электронную почту.
Недостаточная выборка. Возможна и обратная ситуация, когда клиенту приходится делать несколько запросов, чтобы получить всю информацию, которая ему нужна. Например, из одной конечной точки API вы получаете личные данные пользователя, а из другой – информацию о сделанных им заказах.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Что такое SOAP?

A

SOAP – это протокол, определяющий строгие правила коммуникации.
При отправке запроса в SOAP API необходимо обернуть HTTP-запрос в конверт SOAP. Это структура данных, которая изменяет базовый HTTP-контент в соответствии с требованиями к запросам SOAP. Благодаря конверту вы также можете отправлять запросы веб-сервисам SOAP с помощью других транспортных протоколов, таких как TCP или Протокол межсетевых управляющих сообщений (Internet Control Message Protocol, ICMP). Однако SOAP API и веб-сервисы SOAP всегда возвращают в своих ответах XML-документы.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

В чем разница между SOAP и REST?

A

SOAP – это протокол, а REST – архитектурный стиль. Это создает значительные различия в функционировании SOAP и REST API.
SOAP - только XML

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Что такое HATEOAS?

A

«Hypermedia As The Engine Of Application State» (Гипермедиа как двигатель состояния приложения).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

HTTP протокол

A

HyperText Transfer Protocol

HTTP является протоколом прикладного уровня, который чаще всего использует возможности другого протокола - TCP (или TLS - защищённый TCP) - для пересылки и получения сообщений.
Сообщения могут содержать данные в любом формате (например, XML или JSON).
Протокол HTTP лежит в основе обмена данными в Интернете. HTTP является протоколом клиент-серверного взаимодействия, что означает инициирование запросов к серверу самим получателем, обычно веб-браузером (web-browser).

Обычно связь между клиентом и сервером имеет посредников в виде прокси-серверов. Они нужны для разных операций — например, для безопасности и конфиденциальности, кэширования или распределения нагрузки на серверы.

браузер отправляет введённые слова в DNS, преобразователь URL-адресов в IP-адреса. DNS расшифровывается как «доменная система имён» (Domain Name System), и его можно представить как огромную таблицу со всеми зарегистрированными именами для сайтов и их IP-адресами.
DNS возвращает браузеру IP-адрес, с которым тот уже умеет работать. Теперь браузер начинает составлять HTTP-запрос с вложенным в него IP-адресом.

Структура:
1) Стартовая строка. Необходима для описания запроса или статуса. В ней сообщается версия протокола и другие сведения. Это может быть запрашиваемый ресурс или код ответа (например, ошибки). Длина — ровно одна строчка.
2) HTTP-заголовок. Выглядит как несколько строчек текста, в которых уточняется запрос или описывается содержимое тела сообщения.
3) Пустая строка. Она необходима, чтобы сообщить об успешной отправке метаданных конкретного запроса.
3) Тело запроса. В нём хранится информация о запросе или документ, который отправляется в ответе на запрос.

Запрос:
GET /users/alizar/ HTTP/1.1
Host: habrahabr.ru

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

что такое TCP/IP?

A

Стек протоколов TCP/IP (Transmission Control Protocol/Internet Protocol, протокол управления передачей/протокол интернета) — сетевая модель, описывающая процесс передачи цифровых данных. Она названа по двум главным протоколам, по этой модели построена глобальная сеть интернет.

Стандарты описывают четыре уровня абстракции модели TCP/IP:
прикладной (HTTP),
транспортный (TCP),
межсетевой (IP),
канальный.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Что такое web-socket?

A

Сетевой порт — число, которое записывается в заголовках протоколов транспортного уровня. Оно используется для определения программы или процесса-получателя пакета в пределах одного IP-адреса. Порты позволяют определить сетевые приложения, работающие на компьютере, множество которых может быть запущено одновременно.

Чтобы получить доступ к тому или иному сетевому приложению недостаточно только IP-адреса, поэтому для идентификации приложений применяют также порты. Комбинация IP-адреса и порта называется сокетом, или гнездом (socket).

17
Q

Статусы ответа HTTP

A

“1xx: Informational (информационные):
2xx: Success (успешно):
3xx: Redirection (перенаправление):
4xx: Client Error (ошибка клиента):
5xx: Server Error (ошибка сервера):”

18
Q

Часто встречающиеся коды ошибок HTTP (9)

A

400 Bad Request Универсальный код ошибки, если серверу непонятен запрос от клиента.

403 Forbidden Возвращается, если операция запрещена для текущего пользователя. Если у оператора есть учётка с более высокими правами, он должен перелогиниться самостоятельно. См. также 419

404 Not Found Возвращается, если в запросе был указан неизвестный entity или id несуществующего объекта.Списочные методы get не должны возвращать этот код при верном entity (см. выше).Если запрос вообще не удалось разобрать, следует возвращать 418.

415 Unsupported Media Type Возвращается при загрузке файлов на сервер, если фактический формат переданного файла не поддерживается. Также может возвращаться, если не удалось распарсить JSON запроса, или сам запрос пришёл не в формате JSON.

418 I’m a Teapot Возвращается для неизвестных серверу запросов, которые не удалось даже разобрать. Обычно это указывает на ошибку в клиенте, типа ошибки при формировании URI, либо что версии протокола клиента и сервера не совпадают.

419 Authentication Timeout Отправляется, если клиенту нужно пройти повторную авторизацию (например, протухли куки или CSRF токены). При этом на клиенте могут быть несохранённые данные, которые будут потеряны, если просто выкинуть клиента на страницу авторизации.

422 Unprocessable Entity Запрос корректно разобран, но содержание запроса не прошло серверную валидацию. Например, в теле запроса были указаны неизвестные серверу поля, или не были указаны обязательные, или с содержимым полей что-то не так. Обычно это означает ошибку в введённых пользователем данных, но может также быть вызвано ошибкой на клиенте или несовпадением версий.

500 Internal Server Error Возвращается, если на сервере вылетело необработанное исключение или произошла другая необработанная ошибка времени исполнения.Всё, что может сделать клиент в этом случае — это уведомить пользователя и сделать console.error(err) для более продвинутых товарищей (админов, разработчиков и тестировщиков).

501 Not Implemented Возвращается, если текущий метод неприменим (не реализован) к объекту запроса.

19
Q

Что такое идемпотентный HTTP-метод?

A

Идемпотентный HTTP-метод - это метод HTTP-запроса, который может быть повторно выполнен без изменения результата после первого выполнения.

Другими словами, если идемпотентный запрос был отправлен и получен сервером, повторное выполнение этого запроса не приведет к изменению данных на сервере или их повторному созданию.

Примеры идемпотентных HTTP-методов включают GET, HEAD, PUT и DELETE.

С другой стороны, методы POST, PATCH и неидемпотентные методы, поскольку они могут привести к созданию дубликатов ресурсов при повторном выполнении запроса.

Для того чтобы идемпотентный запрос был выполнен успешно, его должны обрабатывать соответствующие обработчики на сервере, которые учитывают особенности каждого метода.

20
Q

Отличие HTTP vs HTTPS

A

По HTTP информация передаётся в обычном виде на порт 80, а по HTTPS — в зашифрованном (шифрование SSL/TLS ) на порт 443.

21
Q

Отличие Url от Uri

A

URI: Uniform Resource Identifier - имя или адрес, идентифицирующий определенный интернет ресурс. От него наследуются URL и URN

URL: Uniform Resource Locator - это адрес, идентифицирующий определенный интернет ресурс.
может включать в себя следующие компоненты:
1) Scheme: протокол (http / https / ftp, …)
2) Host: сервер, который хостит ресурс (www.example.com)
3) Port: номер порта на сервере, через который идёт запрос
4) Path: определяет особый ресурс на сервере (/products/clothing/123 (это еще и относительный URL))
5) Query parameters: дополнительные параметры,
которые можно передать серверу в URL (?color=red&size=medium)
6) Fragment: идентифицирует подчинённый ресурс, не имеющий прямого URL. (#photo)

В общем, URL является частным случаем URI, который указывает на местоположение ресурса и способ доступа к нему, тогда как URI является более общим термином, который идентифицирует ресурс любым возможным способом.

22
Q

Что такое Spring REST?

A

Набор Инструментов для создания REST API - приложение, которое отдаёт данные в определенном формате.

23
Q

Какие основные компоненты Spring REST?

A

web: Jackson, …
MVC:

24
Q

Какие HTTP-методы поддерживает Spring REST?

A

GetMapping, PostMapping, PutMapping, DeleteMapping, PatchMapping

25
Q

Какие аннотации используются в Spring REST и для чего они нужны?

A

@RequestMapping(“/users”) - все запросы на /users будут обработаны этим контроллером.
@ResponceBody - даёт понять спрингу, что метод не возвращает вью, и что Jackson должен сконвертировать возвращаемый объект в json.
@RequestBody - Ставится на параметр метода и означает, что Jackson должен сконвертировать входящий json в объект данного типа. Поля json и объекта должны совпадать. Такие поля надо валидировать (@Valid).
@RequestParam - достать из запроса параметр
@RestController = @Controller + @ResponseBody над каждым методом.
@GetMapping (“/{id}”) - этот метод обрабатывает все GET запросы на /{id}
@PathVariable(“id”) - присвоить параметру значение атрибута id из строки запроса.
@ExceptionHandler({BusinessException.class, ServiceException.class}) - метод ловит определенное исключение и возвращает определенный json.
@ResponseStatus(HttpStatus.NO_CONTENT) - наделяет любой метод или класс исключения кодом ответа и коротким сообщением(reason).

26
Q

@requestparam vs @pathvariable

A

If the URL http://localhost:8080/MyApp/user/1234/invoices?date=12-05-2013 gets the invoices for user 1234 on December 5th, 2013, the controller method would look like:

@RequestMapping(value="/user/{userId}/invoices", method = RequestMethod.GET)
public List<Invoice> listUsersInvoices(
            @PathVariable("userId") int user,
            @RequestParam(value = "date", required = false) Date dateOrNull) {
  ...
}
27
Q

Как в Spring REST осуществляется обработка ошибок?

A

1)
@ExceptionHandler
({BusinessException.class, ServiceException.class}) - метод ловит определенное исключение и возвращает определенный json.

@ExceptionHandler
private ResponseEntity<RuntimeException> handleException(RuntimeException e) {
		PersonErrorResponse response = new PersonErrorResponse("Person not found",   
		                                              System.currentTimeMillis());
		return  new ResponseEntity<>(response, HttpStatus.NOT_FOUND);
}

**2)
@ControllerAdvice **- можно глобально и централизованно обрабатывать исключения с помощью классов с аннотацией @ControllerAdvice.
@RestControllerAdvice = @ControllerAdvice + @ResponseBody.

@ControllerAdvice
public class DefaultAdvice {

@ExceptionHandler(BusinessException.class)
public ResponseEntity<Response> handleException(BusinessException e) {
		Response response = new Response(e.getMessage());
		return new ResponseEntity<>(response, HttpStatus.OK);
}} 
``` 
Любой класс с аннотацией @ControllerAdvice является глобальным обработчиком исключений, который очень гибко настраивается.
В нашем случае мы создали класс DefaultAdvice с одним единственным методом handleException. Метод handleException имеет аннотацию @ExceptionHandler, в которой, как вы уже знаете, можно определить список обрабатываемых исключений. В нашем случае будем перехватывать все исключения BusinessException.

**3) выбросить ResponseStatusException(int status, String reason):**
@GetMapping(value = "/testResponseStatusException", produces = APPLICATION_JSON_VALUE)
public Response testResponseStatusException(@RequestParam(required = false, defaultValue = "false") boolean exception) {
    if (exception) {
        throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "ResponseStatusException in testResponseStatusException");
    }
    return new Response("OK");
} ~~~
	
	**4) @ResponseStatus(HttpStatus.NO_CONTENT)** - наделяет любой метод или класс исключения кодом ответа и коротким сообщением(reason). - возвращает только код статуса. ~~~ @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR) public class ServiceException extends Exception {
public ServiceException(String message) {
    super(message);
}} ~~~

https://habr.com/ru/articles/528116/

28
Q

Какие преимущества предоставляет использование Spring REST для создания RESTful веб-сервисов?

A
29
Q

REST Template

A

Это спринговы клиент, с помощью которого можно делать запросы к удаленным сервисам.

RestTemplate restTemplate = new RestTemplate();
String fooResourceUrl  = "http://localhost:8080/spring-rest/foos";	
// ПАРСИТЬ СТРИНГОВЫЙ РЕСПОНС: ~~~ ResponseEntity<String> response = restTemplate.getForEntity(fooResourceUrl + "/1", String.class); ObjectMapper mapper = new ObjectMapper(); JsonNode root = mapper.readTree(response.getBody()); ~~~

// ПАРСИТЬ ОБЪЕКТ из РЕСПОНСА
~~~
Foo foo = restTemplate
.postForObject(fooResourceUrl, request, Foo.class);
~~~

// ЗАПРОС - ОТВЕТ
~~~
public class HttpEntity<T> {</T>

private final HttpHeaders headers;

@Nullable
private final T body; }
~~~

// ЗАПРОС
~~~
public class RequestEntity<T> extends HttpEntity<T> {</T></T>

private final HttpMethod method;
private final URI url;
private final Type type; ~~~

// ОТВЕТ
~~~
public class ResponseEntity<T> extends HttpEntity<T> {
private final Object status; }
~~~
```</T></T>

https://www.baeldung.com/rest-template
30
Q

Что такое open API

A

OpenAPI — это спецификация, которая рассматривается как универсальный интерфейс для пользователей (клиентов) по взаимодействию с сервисами (серверами).
Спецификация не зависит от языка программирования, и может быть использована вне протокола HTTP. OpenAPI одновременно применяется для клиента, сервера и соответствующей документации интерфейса, созданного согласно REST.

Спецификация декларативна, и поэтому может быть использована клиентами без знаний особенностей серверной реализации. При этом работать с OpenAPI могут как разработчики, так и рядовые пользователи через готовые инструменты и предоставляемые интерфейсы. В качестве формата используется XML и JSON, но в общем случае может быть выбран и другой язык разметки, например, YAML.

Swagger — это инструментарий, использующий спецификацию OpenAPI. Например, OpenAPIGenerator и SwaggerUI.

https://habr.com/ru/articles/705698/
https://starkovden.github.io/workshop-activities.html

31
Q

Что такое DTO?

A

Это слой между клиентом и моделью, который используется только на уровне контроллера и служит для разграничения бизнес логики и взаимодействия с клиентом:
- при ответе сервера объект модели конвертируется в DTO и отправляется клиенту
- при запросе на сервер приходит как параметр метода контроллера и конвертируется в бизнес-объект.

Даже если DTO и модель совпадают - лучше использовать DTO.
Располагаются в отдельном пакете, классыназываются: ModelEntityDTO

ModelMapper - можно создать этот бин и внедрить в контроллер и он будет мапить DTO в модель и обратно.
modelMapper.map(instanceDTO, Instance.class);