| layout | ../../layouts/Layout.astro |
|---|---|
| title | Интеграции |
| description | API, REST, SOAP, очереди, брокеры сообщений и интеграционные паттерны |
| category | Backend |
| kind | questions |
| order | 885 |
Что такое синхронное и асинхронное взаимодействие? В чем разница?
|
Короткий ответ Синхронное взаимодействие (Synchronous): - Принцип: Клиент (инициатор запроса) отправляет запрос серверу (обработчику) и ожидает ответа, блокируя свою дальнейшую работу до получения этого ответа (или до истечения тайм-аута). - Аналогия: Телефонный звонок. Вы набираете номер, ждете соединения и ведете диалог, пока не получите нужную информацию или не завершите разговор. Вы не можете делать другие звонки в это время. Полный ответ
|
Всегда ли должен быть ответ в синхронном и асинхронном запросе?
|
Короткий ответ Синхронный запрос: Да, всегда. Клиент ожидает ответа. Этот ответ может быть: - Успешным результатом операции. - Сообщением об ошибке (бизнес-логики или технической). - Сообщением об ошибке тайм-аута (если сервер не ответил за установленное время). В любом случае, поток выполнения на стороне клиента разблокируется только после получения какого-либо ответа (или ошибки). Полный ответ
|
Приведи пример, в котором использовал только синхронный способ взаимодействия?
|
Короткий ответ Пример: Проверка доступности товара на складе перед добавлением его в корзину в интернет-магазине. - Сценарий: Пользователь нажимает кнопку "Добавить в корзину". - Взаимодействие: Фронтенд (клиент) отправляет синхронный запрос на бэкенд (сервер) с ID товара и количеством. - Ожидание: Фронтенд ждет ответа от бэкенда. Полный ответ
|
Зачем нужны очереди в асинхронных запросах?
|
Короткий ответ Очереди сообщений (message queues, например, RabbitMQ, Kafka) играют ключевую роль в реализации асинхронного взаимодействия и предоставляют ряд преимуществ: Полный ответ Очереди сообщений (message queues, например, RabbitMQ, Kafka) играют ключевую роль в реализации асинхронного взаимодействия и предоставляют ряд преимуществ:
|
Работа с БД (вызов хранимой процедуры) – это синхронный или асинхронный способ взаимодействия?
|
Короткий ответ С точки зрения приложения, вызывающего процедуру: Обычно это синхронное взаимодействие. - Когда приложение (например, бэкенд веб-сервиса) выполняет SQL-запрос или вызывает хранимую процедуру (CALL myprocedure(...)), поток выполнения этого приложения блокируется и ожидает, пока СУБД завершит выполнение процедуры и вернет результат (или подтверждение завершения/ошибку). Полный ответ
|
Что такое API? Для чего применяется?
|
Короткий ответ API (Application Programming Interface) - Программный Интерфейс Приложения: Это набор правил, протоколов и инструментов, который позволяет одним программным компонентам или системам взаимодействовать с другими. Это контракт, описывающий, как одна часть ПО может запрашивать сервисы или данные у другой. - Аналогия: Меню в ресторане. Полный ответ
|
Что такое REST?
|
Короткий ответ REST (REpresentational State Transfer) - Передача Состояния Представлением: Это архитектурный стиль (набор принципов и ограничений) для построения распределенных систем, чаще всего веб-сервисов. REST не является протоколом или стандартом сам по себе, а скорее набором рекомендаций. - Ключевые принципы REST: 1. Полный ответ
|
Что такое Restful-приложение?
|
Короткий ответ Restful-приложение (или RESTful веб-сервис): Это приложение или веб-сервис, которое разработано в соответствии с принципами и ограничениями архитектурного стиля REST. Оно использует стандартные методы HTTP (GET, POST, PUT, DELETE, PATCH) для выполнения операций CRUD (Create, Read, Update, Delete) над ресурсами, идентифицируемыми с помощью URI. Полный ответ
|
Что такое Stateless? Почему мы хотим клиента лишить информации о состоянии сервера?
|
Короткий ответ Stateless (Отсутствие состояния): В контексте REST это означает, что сервер не хранит никакого контекста (состояния) о клиенте между последовательными запросами от этого клиента. Вся информация, необходимая серверу для обработки запроса (например, кто пользователь, что он запрашивал ранее, если это важно), должна содержаться в самом запросе (например, в заголовках аутентификации, параметрах). Полный ответ
|
Что такое кэширование? Зачем это использовать?
|
Короткий ответ Кэширование (Caching): Это процесс сохранения копий данных (ресурсов или результатов вычислений) в более быстром месте (кэше), чтобы при последующих запросах к этим данным их можно было получить из кэша, а не из исходного, более медленного источника (например, БД или удаленного сервера). Полный ответ
|
Где реализуется кэширование – на стороне клиента или сервера?
|
Короткий ответ Кэширование может реализовываться на разных уровнях: Полный ответ Кэширование может реализовываться на разных уровнях:
Часто используется комбинация нескольких уровней кэширования. |
Какие методы REST знаешь? Для чего используешь?
|
Короткий ответ Основные методы HTTP, используемые в RESTful API: Полный ответ Основные методы HTTP, используемые в RESTful API:
|
Как можно передавать параметры в методе?
|
Короткий ответ Параметры в REST API можно передавать несколькими способами, в зависимости от метода HTTP и назначения параметров: Полный ответ Параметры в REST API можно передавать несколькими способами, в зависимости от метода HTTP и назначения параметров:
|
Что содержит URL в REST запросе?
|
Короткий ответ URL (Uniform Resource Locator) в REST запросе обычно содержит следующие компоненты: Полный ответ URL (Uniform Resource Locator) в REST запросе обычно содержит следующие компоненты:
Ключевое для REST: Путь идентифицирует ресурс, параметры запроса уточняют запрос к этому ресурсу. |
Что содержит HEADER в ответе REST?
|
Короткий ответ Заголовки (Headers) в HTTP-ответе REST API содержат метаданные об ответе, а не сами данные ресурса (они находятся в теле ответа). Основные заголовки: Полный ответ Заголовки (Headers) в HTTP-ответе REST API содержат метаданные об ответе, а не сами данные ресурса (они находятся в теле ответа). Основные заголовки:
|
Чем отличается ошибка 200 от 201?
|
Короткий ответ Это не ошибки, а успешные статус-коды HTTP (класс 2xx Success). Полный ответ Это не ошибки, а успешные статус-коды HTTP (класс
Разница: |
Чем POST отличается от GET?
|
Короткий ответ Краткая суть раскрыта в полном ответе с кодом или практическим примером. Полный ответ
|
Чем PUT отличается от PATCH?
|
Короткий ответ Оба метода используются для обновления ресурса, но делают это по-разному: Полный ответ Оба метода используются для обновления ресурса, но делают это по-разному:
Пример: Есть ресурс
|
Чем POST отличается от PUT?
|
Короткий ответ Краткая суть раскрыта в полном ответе с кодом или практическим примером. Полный ответ
|
Что такое идемпотентный? Почему это важно?
|
Короткий ответ Идемпотентный метод (Idempotent): Это метод HTTP, многократное повторение которого с одинаковыми параметрами приводит к тому же результату (состоянию системы), что и однократное выполнение. То есть, f(f(x)) = f(x). - Идемпотентные методы: GET, HEAD, PUT, DELETE, OPTIONS, TRACE. - Неидемпотентные методы: POST, PATCH (в общем случае). Полный ответ
|
Delete - идемпотентный метод?
|
Короткий ответ Да, DELETE является идемпотентным методом. - Первый запрос DELETE /resource/123: Успешно удаляет ресурс. Система переходит в состояние "ресурс 123 не существует". - Второй (и последующие) запрос DELETE /resource/123: Сервер обнаруживает, что ресурс уже удален, и обычно возвращает ответ 404 Not Found (или 200 OK/204 No Content, если такова логика API). Полный ответ
|
Как сделать POST идемпотентным?
|
Короткий ответ Семантически POST не является идемпотентным (он предназначен для создания новых ресурсов или запуска процессов). Однако, можно реализовать логику на сервере, которая имитирует идемпотентное поведение для конкретного POST-запроса, если это необходимо (например, для защиты от случайного двойного нажатия кнопки "Оплатить"). - Способ: Использование ключа идемпотентности (Idempotency Key). 1. Полный ответ
|
Можно ли использовать метод POST для получения данных?
|
Короткий ответ Технически – да, тело запроса POST может содержать сложную структуру для описания критериев поиска, которые не помещаются или неудобны для передачи в URL (как в GET). - Семантически – нет, это нарушает принципы REST. GET предназначен для получения данных. Полный ответ
|
Как обеспечить обратную совместимость? В каком случае создается новая версия API?
|
Короткий ответ Обеспечение обратной совместимости (Backward Compatibility): Это возможность для старых клиентов продолжать работать с API после его обновления без необходимости внесения изменений на своей стороне. - Как достигается: - Только добавление: Добавляйте новые опциональные поля в запросы и ответы, новые эндпоинты, новые опциональные параметры. Полный ответ
|
Что такое JSON-schema? Писал на практике?
|
Короткий ответ 4.3 SOAP API Полный ответ
4.3 SOAP API |
В чем разница между html и xml?
|
Короткий ответ Краткая суть раскрыта в полном ответе с кодом или практическим примером. Полный ответ
|
Что содержится в XML?
|
Короткий ответ XML-документ содержит структурированные данные, представленные с помощью следующих основных компонентов: Полный ответ XML-документ содержит структурированные данные, представленные с помощью следующих основных компонентов:
|
Что такое XSD? Приходилось ли вам писать XSD?
|
Короткий ответ XSD (XML Schema Definition): Это язык на основе XML для описания структуры и ограничений содержимого XML-документов. XSD-файл (с расширением .xsd) определяет: - Допустимые элементы и атрибуты в XML-документе. - Иерархию и порядок элементов. - Типы данных для элементов и атрибутов (строка, число, дата, булево, а также пользовательские типы). Полный ответ
|
Что такое пространство имен в XML?
|
Короткий ответ Пространство имен (Namespace): Это механизм в XML, который позволяет избежать конфликтов имен элементов и атрибутов, когда в одном документе используются теги из разных словарей (например, при объединении XML из разных источников или использовании стандартных словарей вроде XHTML внутри своего XML). Полный ответ
|
С помощью каких программ можно работать с XML?
|
Короткий ответ Существует множество инструментов для работы с XML: Полный ответ Существует множество инструментов для работы с XML:
|
Что такое SOAP API? Встречался ли на практике?
|
Короткий ответ SOAP (Simple Object Access Protocol): Это протокол на основе XML для обмена структурированными сообщениями при вызове веб-сервисов в распределенных компьютерных сетях. SOAP определяет формат сообщения (конверт) и правила его обработки. - Ключевые особенности: - Основан на XML: Все сообщения имеют формат XML. Полный ответ
|
Из чего состоит сообщение в SOAP?
|
Короткий ответ Стандартное SOAP-сообщение имеет следующую XML-структуру (конверт): Полный ответ Стандартное SOAP-сообщение имеет следующую XML-структуру (конверт):
|
Что такое WSDL?
|
Короткий ответ WSDL (Web Services Description Language): Это язык на основе XML для описания сетевых веб-сервисов, работающих по протоколу SOAP (хотя может использоваться и для других). WSDL-файл представляет собой машиночитаемый контракт веб-сервиса. - Что описывает WSDL: - : Определения типов данных, используемых в сообщениях (обычно ссылается на XSD или содержит встроенные определения XSD). Полный ответ
|
Чем SOAP отличается от REST?
|
Короткий ответ Краткая суть раскрыта в полном ответе с кодом или практическим примером. Полный ответ
|
В каких случаях необходимо работа с очередями сообщений? С какими очередями работал?
|
Короткий ответ Случаи необходимости очередей: - Асинхронная обработка: Когда не нужно ждать немедленного результата (см. вопрос 65). - Развязка систем (Decoupling): Чтобы компоненты системы были независимы друг от друга. - Сглаживание пиковых нагрузок (Load Leveling): Когда система-источник генерирует запросы быстрее, чем система-приемник может их обработать. Полный ответ
|
В чем отличие Kafka и RabbitMQ?
|
Короткий ответ Это два популярных, но разных по своей сути брокера сообщений. Полный ответ Это два популярных, но разных по своей сути брокера сообщений.
|
Как брокер сообщений гарантирует доставку сообщений?
|
Короткий ответ Гарантия доставки — это комплексная задача, и разные брокеры предоставляют разные уровни гарантий (at most once, at least once, exactly once). Механизмы включают: Полный ответ Гарантия доставки — это комплексная задача, и разные брокеры предоставляют разные уровни гарантий (
Гарантия |
Клиент читает в Kafka два последних сообщения. Как тому же клиенту заново прочитать эти два последние сообщения?
|
Короткий ответ Ключ к ответу: В Kafka консьюмеры сами отслеживают свою позицию в каждой партиции топика с помощью смещения (offset). Offset — это порядковый номер сообщения в партиции. - Как перечитать: Чтобы клиент (консьюмер или консьюмерская группа) заново прочитал последние два сообщения (или любые другие), ему необходимо сбросить (переместить) свой текущий offset в этой партиции на позицию перед первым из этих двух сообщений. Полный ответ
|
В чем отличие очереди от топика?
|
Короткий ответ Это две основные модели доставки сообщений: Полный ответ Это две основные модели доставки сообщений:
|
Что такое корпоративная шина?
|
Короткий ответ Корпоративная Сервисная Шина (Enterprise Service Bus - ESB): Это архитектурный паттерн и набор программных инструментов (middleware), который выступает в роли центрального посредника для интеграции различных приложений и сервисов внутри предприятия. - Цели и функции ESB: - Маршрутизация сообщений: Направление сообщений от отправителя к правильным получателям на основе содержимого, заголовков или других правил. Полный ответ
|
Какая разница между шиной и очередью?
|
Короткий ответ Очередь: Это компонент для хранения и передачи сообщений, обычно реализующий модель "точка-точка" или "pub/sub". Фокусируется на надежной доставке и буферизации. Полный ответ
|
Чем корпоративная шина отличается от ETL – инструмента?
|
Короткий ответ Краткая суть раскрыта в полном ответе с кодом или практическим примером. Полный ответ
|
К корпоративной шине подключены веб-сервисы. В одном веб-сервисе появились два новых обязательных поля. Что изменится в интеграции?
|
Короткий ответ Появление новых обязательных полей в контракте веб-сервиса (например, в его WSDL/XSD или OpenAPI спецификации) – это обратно несовместимое (breaking) изменение. Последствия для интеграции через ESB: Полный ответ Появление новых обязательных полей в контракте веб-сервиса (например, в его WSDL/XSD или OpenAPI спецификации) – это обратно несовместимое (breaking) изменение. Последствия для интеграции через ESB:
Итог: Это breaking change, требующее скоординированных изменений во всех системах, вызывающих сервис, и потенциально в самой ESB (в части трансформации и валидации). |
Что такое GraphQL? Работал ли на практике?
|
Короткий ответ GraphQL: Это язык запросов (query language) для API и среда выполнения (runtime) на стороне сервера для обработки этих запросов. Он позволяет клиентам точно указывать, какие данные им нужны, и получать в ответе только их, в предсказуемой структуре. Полный ответ
|
Когда применяют GraphQL? Плюсы GraphQL относительно REST?
|
Короткий ответ Когда применяют GraphQL: - Мобильные приложения: Где важна экономия трафика и минимизация задержек (получение всех нужных данных за один запрос). - Сложные фронтенд-приложения (SPA): Когда UI требует данных из разных источников или имеет сложные вложенные компоненты. - Микросервисная архитектура: GraphQL может выступать как шлюз (gateway), агрегирующий данные из разных микросервисов для клиента. Полный ответ
|
Что такое WebSocket? Когда его применять?
|
Короткий ответ WebSocket: Это сетевой протокол, который обеспечивает постоянное, двунаправленное (full-duplex) соединение между клиентом и сервером поверх одного TCP-соединения. После установления соединения (через HTTP-хендшейк) обе стороны могут отправлять друг другу сообщения в любой момент времени без необходимости заново устанавливать соединение или отправлять HTTP-запросы. Полный ответ
|
Что такое gRPC? Когда его применять?
|
Короткий ответ gRPC (gRPC Remote Procedure Calls): Это современный, высокопроизводительный, open-source фреймворк для удаленного вызова процедур (RPC), разработанный Google. - Ключевые особенности: - Использует Protocol Buffers (Protobuf): Языково-нейтральный, платформо-нейтральный, расширяемый механизм для сериализации структурированных данных (эффективнее и компактнее JSON/XML). Контракт определяется в .proto файлах. Полный ответ
|
Что такое webhook? Когда его применять?
|
Короткий ответ Webhook: Это механизм, позволяющий одному приложению (отправителю) уведомлять другое приложение (получателя) о произошедшем событии путем отправки HTTP-запроса (обычно POST) на заранее настроенный URL получателя (webhook URL). Полный ответ
|
Какие плюсы и минусы webhook?
|
Короткий ответ Плюсы: - Эффективность: Нет необходимости в постоянном опросе (polling), что экономит ресурсы обеих систем. - Реальное время (Near Real-time): Уведомления доставляются практически сразу после наступления события. - Простота (для отправителя): Отправителю нужно просто сделать HTTP POST запрос. - Минусы: - Надежность / Доступность получателя: Получатель (webhook URL) должен быть доступен в момент отправки уведомления. Полный ответ
|
Что такое файловый обмен? Когда его применять?
|
Короткий ответ Файловый обмен: Это способ интеграции систем путем передачи данных в виде файлов через общее хранилище или по сети. Системы читают и записывают файлы в согласованном формате и месте. - Как работает: 1. Система-источник генерирует файл с данными (например, CSV, XML, JSON, TXT fixed-width). 2. Файл помещается в согласованное место (папка на FTP/SFTP сервере, общая сетевая папка, облачное хранилище). 3. Полный ответ
|
Какие плюсы и минусы файлового обмена?
|
Короткий ответ Плюсы: - Простота концепции: Легко понять основной принцип. - Подходит для больших объемов: Может эффективно передавать гигабайты данных. - Хорошо для пакетной обработки: Естественный способ для задач, выполняемых по расписанию. - Развязка систем во времени: Системы не зависят от одновременной доступности друг друга. Источник может записать файл, а приемник прочитать его позже. Полный ответ
|