Что такое промежуточное ПО?

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

Конечно, мы знаем, что СЕРВЕР отвечает за анализ запроса и предоставление ответа, но что, если мы хотим предотвратить попадание определенных запросов в наши контроллеры? или что, если мы хотим манипулировать запросом или ответом до того, как обработаем его?

Хорошая новость заключается в том, что мы можем сделать все это и даже повысить производительность, используя промежуточное программное обеспечение. Промежуточное ПО — это программный компонент, который подключается к конвейеру запросов для обработки веб-запросов и генерации ответов. Каждое промежуточное ПО может обрабатывать запрос, полученный от предыдущего промежуточного ПО на пути к контроллеру, и ответ на обратном пути от контроллера к клиенту. Каждое промежуточное ПО также может «замыкать» поток и возвращать ответ до того, как запрос достигнет контроллера. Давайте посмотрим на простую визуализацию:

Как это работает

Каждый запрос, отправленный клиентом, сначала проходит через промежуточное ПО в описанном порядке (журнал-›авторизация-›кеш).

На изображении выше показано, как конвейер запросов сочетается с ПО промежуточного слоя, которое обрабатывает ведение журнала, авторизацию и кэширование. Каждый компонент может манипулировать запросом, например промежуточное ПО аутентификации может генерировать токен jwt и добавлять его в заголовок запроса AUTHORIZATION, если учетные данные верны, и отказывать в доступе в противном случае. В последнем случае, когда учетные данные недействительны, промежуточное ПО «замкнет» поток и вернет ответ еще до того, как запрос попадет в приложение (или в промежуточное ПО «кэш»). Такое поведение имеет преимущества как с точки зрения производительности, так и с точки зрения безопасности.

Примеры использования промежуточного программного обеспечения

Одна из первых вещей, которую следует учитывать, если что-то, что вы хотите сделать, должно быть промежуточным программным обеспечением. Таким образом, промежуточное ПО лучше всего подходит для сквозных задач. Если это конкретная бизнес-логика, применимая только к очень немногим случаям, то, возможно, промежуточное программное обеспечение не подходит. Если в вашем приложении есть много общих задач (например, ведение журнала, проверка подлинности, анализ JSON или добавление некоторых общих данных общего доступа к каждому запросу или ответу), то рефакторинг этой логики в промежуточное ПО имеет смысл. давайте посмотрим на пару примеров:

Ведение журнала

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

Обработка ошибок

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

Заказ

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

Например, ПО промежуточного слоя, которое перенаправляет не-HTTPS в домен HTTP через постоянное перенаправление 301, должно быть размещено перед ПО промежуточного слоя, которое распаковывает и анализирует тело запроса. В противном случае вы тратите циклы ЦП на распаковку тела, которое будет выброшено.

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

Преимущества

Использование промежуточного программного обеспечения имеет множество преимуществ и практически не имеет недостатков, давайте рассмотрим основные из них:

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

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

Производительность. Фильтрация запросов до того, как они достигнут действия, может сократить задержки и повторения кода.

Краткое содержание

Промежуточное ПО — это программный код, который обрабатывает входящие запросы и исходящие ответы. Его разумное использование сделает ваш код более безопасным, быстрым и легким для чтения и обслуживания. Поскольку каждый основной фреймворк поддерживает промежуточное программное обеспечение (иногда называемое «фильтрами» или «обработчиком делегирования»), было бы плохой практикой не использовать его преимущества. Несколько (спорных) недостатков касаются деловых аспектов разработки времени, а не того, что должно беспокоить вас на пути к совершенству :)