WEB & REST Flashcards
Что такое REST?
Representational State Transfer - архитектурный стиль создания приложений, базирующийся на передаче данных по протоколу HTTP.
Согласно REST каждая единица информации (ресурс) однозначно определяется глобальным идентификатором, таким как URL. Каждая URL в свою очередь имеет строго заданный формат.
Это значит, что URL по сути является первичным ключом для единицы данных. Т.е. например третья книга с книжной полки будет иметь вид /book/3, а 35 страница в этой книге — /book/3/page/35
Что такое REST APl?
Representational State Transfer Application Programming Interface - способ взаимодействия меджу приложениями, спроектированный с учетом всех ограничений и принципов REST.
Его также называют RESTful.
Позволяет взаимодействовать с удаленными приложениями и серверами через стандартные http методы и передавать данные в формате JSON / XML / HTML.
RESTful-система должна быть достаточно гибкой для различных сценариев использования, масштабируемой для размещения большого количества пользователей и компонентов, а также адаптируемой с течением времени.
С его помощью мы можем связывать разные компоненты(языки, фреймворки, …), например один раз написать бэкенд на спринге и обращаться к нему через REST из JS / IOS / Android, …
Перечислите 6 принципов REST API
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/
Объясните ограничения единого интерфейса
Когда система
имеет идентификаторы для каждого ресурса,
управляет ресурсами через направление запросов от клиента серверу,
содержит самодостаточные сообщения
и составлена из гипермедиа,
то говорят, что у неё единый интерфейс.
1) идентичность ресурсов: В терминологии REST что угодно может быть ресурсом — HTML-документ, изображение, информация о конкретном пользователе и т.д.
Каждый ресурс должен быть уникально обозначен постоянным идентификатором. «Постоянный» означает, что идентификатор не изменится за время обмена данными, и даже когда изменится состояние ресурса.
2) манипуляция над ресурсами через представление: клиент управляет ресурсами, направляя серверу представления, обычно в виде JSON-объекта, содержащего контент, который он хотел бы добавить, удалить или изменить. В REST у сервера полный контроль над ресурсами, и он отвечает за любые изменения. Когда клиент хочет внести изменения в ресурсы, он посылает серверу представление того, каким он видит итоговый ресурс. Сервер принимает запрос как предложение, но за ним всё так же остаётся полный контроль.
3) исчерпывающие, понятные человеку сообщения; Самодостаточное сообщение, содержащее всю информацию, которая необходима для понимания его получателем. В отдельной документации или другом сообщении не должно быть дополнительной информации.
4) гипермедиа (hypermedia) как движок для состояния приложения (HATEOAS) - ссылки на другие ресурсы внутри приложения. Последнее ограничение интерфейса — это ограничение гипермедиа. Гипермедиа — это пафосное понятие для обозначения данных, которые содержат информацию о том, что клиенту нужно делать дальше, другими словами, какие еще запросы он может сделать. В REST серверы должны посылать клиентам только гипермедиа.
HTML — это один из видов гипермедиа.
Что такое CRUD?
Create
Read / Retrieve
Update
Delete
Что такое модель OSI?
Модель OSI (или Open System Interconnection) характеризует взаимодействие сетевого оборудования. Иными словами, посредством неё общаются такие устройства, как ПК с сетевыми картами, коммутаторы, роутеры.
Когда осуществляется передача с верхнего уровня на нижний, это именуется инкапсуляцией данных, а в обратном порядке – декапсуляцией.
Какие 7 уровней взаимодействия есть в модели OSI?
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)
Верхний уровень модели, где располагаются сетевые службы, с которыми напрямую взаимодействуют пользователи. Данный уровень описывает взаимосвязь приложений на ПК и внешней сети.
Расскажите о методах HTTP-запросов, поддерживаемых REST, и о том, когда они используются.
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/
Различие между методами GET и POST
“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
Каковы недостатки REST API?
Преимущества REST
Масштабируемость. Так как архитектура REST разделяет клиент и сервер, ее легко расширять, что позволяет масштабировать приложение без особых проблем.
Гибкость. Кроме того, эта архитектура весьма гибкая и дает возможность обрабатывать различные типы запросов и форматы данных.
Ограничения REST
Чрезмерная выборка. Зачастую конечная точка API предоставляет на запрос лишнюю информацию, которая не требуется клиенту для совершения действий. Например, вы хотите получить только имя пользователя, но метод сообщает вам еще его возраст, телефон и электронную почту.
Недостаточная выборка. Возможна и обратная ситуация, когда клиенту приходится делать несколько запросов, чтобы получить всю информацию, которая ему нужна. Например, из одной конечной точки API вы получаете личные данные пользователя, а из другой – информацию о сделанных им заказах.
Что такое SOAP?
SOAP – это протокол, определяющий строгие правила коммуникации.
При отправке запроса в SOAP API необходимо обернуть HTTP-запрос в конверт SOAP. Это структура данных, которая изменяет базовый HTTP-контент в соответствии с требованиями к запросам SOAP. Благодаря конверту вы также можете отправлять запросы веб-сервисам SOAP с помощью других транспортных протоколов, таких как TCP или Протокол межсетевых управляющих сообщений (Internet Control Message Protocol, ICMP). Однако SOAP API и веб-сервисы SOAP всегда возвращают в своих ответах XML-документы.
В чем разница между SOAP и REST?
SOAP – это протокол, а REST – архитектурный стиль. Это создает значительные различия в функционировании SOAP и REST API.
SOAP - только XML
Что такое HATEOAS?
«Hypermedia As The Engine Of Application State» (Гипермедиа как двигатель состояния приложения).
HTTP протокол
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
что такое TCP/IP?
Стек протоколов TCP/IP (Transmission Control Protocol/Internet Protocol, протокол управления передачей/протокол интернета) — сетевая модель, описывающая процесс передачи цифровых данных. Она названа по двум главным протоколам, по этой модели построена глобальная сеть интернет.
Стандарты описывают четыре уровня абстракции модели TCP/IP:
прикладной (HTTP),
транспортный (TCP),
межсетевой (IP),
канальный.