Что такое GraphQL
GraphQL - это язык запросов и среда выполнения, разработанные в компании Facebook.
Он позволяет клиентским приложениям запрашивать только те данные, которые им нужны, и получать их в одном запросе к серверу.
Это отличается от традиционного REST-подхода, где каждый эндпоинт на сервере возвращает предопределенные данные, и клиенту нужно делать несколько запросов для получения всей необходимой информации.
С помощью GraphQL клиент может указать в своем запросе, какие поля и связи он хочет получить, и сервер вернет только те данные, которые были запрошены. Таким образом, клиент имеет полный контроль над данными, которые он получает, и может избежать избыточной передачи ненужной информации.
GraphQL - это язык запросов и среда выполнения, разработанные в компании Facebook.
Он позволяет клиентским приложениям запрашивать только те данные, которые им нужны, и получать их в одном запросе к серверу.
Это отличается от традиционного REST-подхода, где каждый эндпоинт на сервере возвращает предопределенные данные, и клиенту нужно делать несколько запросов для получения всей необходимой информации.
С помощью GraphQL клиент может указать в своем запросе, какие поля и связи он хочет получить, и сервер вернет только те данные, которые были запрошены. Таким образом, клиент имеет полный контроль над данными, которые он получает, и может избежать избыточной передачи ненужной информации.
🔥7👍3
Используйте многоэтапные сборки
Воспользуйтесь многоэтапными сборками для того, чтобы создавать более компактные и лучше защищённые образы Docker.
Многоэтапные сборки Docker позволяют разделять выполнение действий, описываемых в файлах Dockerfile, на несколько этапов. Например, можно выделить этап компиляции и сборки приложения, а тем, что получится после прохождения этого этапа, можно воспользоваться на следующих этапах.
Так как для создания образа используется лишь один, финальный этап, зависимости и инструменты, связанные с подготовкой приложения к работе, в итоговый образ не входят, что позволяет выйти на компактный, модульный образ, готовый к использованию в продакшне.
Применение многоэтапных сборок позволяет выходить на более компактные продакшн-образы, что способствует экономии времени и денег.
Воспользуйтесь многоэтапными сборками для того, чтобы создавать более компактные и лучше защищённые образы Docker.
Многоэтапные сборки Docker позволяют разделять выполнение действий, описываемых в файлах Dockerfile, на несколько этапов. Например, можно выделить этап компиляции и сборки приложения, а тем, что получится после прохождения этого этапа, можно воспользоваться на следующих этапах.
Так как для создания образа используется лишь один, финальный этап, зависимости и инструменты, связанные с подготовкой приложения к работе, в итоговый образ не входят, что позволяет выйти на компактный, модульный образ, готовый к использованию в продакшне.
Применение многоэтапных сборок позволяет выходить на более компактные продакшн-образы, что способствует экономии времени и денег.
🔥5
Одиночка
Приведем аналогию: У страны может быть только один президент. Он должен действовать, когда того требуют обстоятельства и долг. В данном случае президент — одиночка.
Шаблон позволяет удостовериться, что создаваемый объект — единственный в своём классе.
Шаблон «Одиночка» позволяет ограничивать создание класса единственным объектом. Это удобно, когда для координации действий в рамках системы требуется, чтобы объект был единственным в своём классе.
На самом деле шаблон «Одиночка» считается антипаттерном, не следует им слишком увлекаться. Он необязательно плох и иногда бывает полезен. Но применяйте его с осторожностью, потому что «Одиночка» вносит в приложение глобальное состояние, так что изменение в одном месте может повлиять на все остальные случаи использования, а отлаживать такое — не самое простое занятие. Другие недостатки шаблона: он делает ваш код сильно связанным (tightly coupled), а создание прототипа (mocking) «Одиночки» может быть затруднено.
Приведем аналогию: У страны может быть только один президент. Он должен действовать, когда того требуют обстоятельства и долг. В данном случае президент — одиночка.
Шаблон позволяет удостовериться, что создаваемый объект — единственный в своём классе.
Шаблон «Одиночка» позволяет ограничивать создание класса единственным объектом. Это удобно, когда для координации действий в рамках системы требуется, чтобы объект был единственным в своём классе.
На самом деле шаблон «Одиночка» считается антипаттерном, не следует им слишком увлекаться. Он необязательно плох и иногда бывает полезен. Но применяйте его с осторожностью, потому что «Одиночка» вносит в приложение глобальное состояние, так что изменение в одном месте может повлиять на все остальные случаи использования, а отлаживать такое — не самое простое занятие. Другие недостатки шаблона: он делает ваш код сильно связанным (tightly coupled), а создание прототипа (mocking) «Одиночки» может быть затруднено.
👍3
Что такое SOLID
S) Single-responsibility principle / Принцип единственной ответственности
Его важность невозможно переоценить. Каждый объект, класс и метод должны отвечать только за что-то одно. Если ваш объект/класс/метод делает слишком много, вы получите спагетти-код.
O) Open–closed principle / Принцип открытости-закрытости
Программные объекты должны быть открыты для расширения, но закрыты для модификации. Речь о том, что нельзя переопределять методы или классы, просто добавляя дополнительные функции по мере необходимости.
Хороший способ решения этой проблемы – использование наследования. В JavaScript эта проблема решается с помощью композиции.
Простое правило: если вы изменяете сущность, чтобы сделать ее расширяемой, вы впервые нарушили этот принцип.
L) Liskov substitution principle / Принцип подстановки Лисков
Этот принцип гласит, что объекты старших классов должны быть заменимы объектами подклассов, и приложение при такой замене должно работать так, как ожидается.
I) Interface segregation principle / Принцип разделения интерфейсов
Этот принцип был сформулирован Робертом Мартином, когда он консультировал Xerox, и он очевиден.
Объекты не должны зависеть от интерфейсов, которые они не используют.
D) Dependency inversion principle / Принцип инверсии зависимостей
Этот принцип невозможно переоценить. Мы должны полагаться на абстракции, а не на конкретные реализации. Компоненты ПО должны иметь низкую связность и высокую согласованность.
Заботиться нужно не о том, как что-то устроено, а о том, как оно работает. Простой пример – использование дат в JavaScript. Вы можете написать для них свой слой абстракции. Тогда если у вас сменится источник получения дат, вам нужно будет внести изменения в одном месте, а не в тысяче.
S) Single-responsibility principle / Принцип единственной ответственности
Его важность невозможно переоценить. Каждый объект, класс и метод должны отвечать только за что-то одно. Если ваш объект/класс/метод делает слишком много, вы получите спагетти-код.
O) Open–closed principle / Принцип открытости-закрытости
Программные объекты должны быть открыты для расширения, но закрыты для модификации. Речь о том, что нельзя переопределять методы или классы, просто добавляя дополнительные функции по мере необходимости.
Хороший способ решения этой проблемы – использование наследования. В JavaScript эта проблема решается с помощью композиции.
Простое правило: если вы изменяете сущность, чтобы сделать ее расширяемой, вы впервые нарушили этот принцип.
L) Liskov substitution principle / Принцип подстановки Лисков
Этот принцип гласит, что объекты старших классов должны быть заменимы объектами подклассов, и приложение при такой замене должно работать так, как ожидается.
I) Interface segregation principle / Принцип разделения интерфейсов
Этот принцип был сформулирован Робертом Мартином, когда он консультировал Xerox, и он очевиден.
Объекты не должны зависеть от интерфейсов, которые они не используют.
D) Dependency inversion principle / Принцип инверсии зависимостей
Этот принцип невозможно переоценить. Мы должны полагаться на абстракции, а не на конкретные реализации. Компоненты ПО должны иметь низкую связность и высокую согласованность.
Заботиться нужно не о том, как что-то устроено, а о том, как оно работает. Простой пример – использование дат в JavaScript. Вы можете написать для них свой слой абстракции. Тогда если у вас сменится источник получения дат, вам нужно будет внести изменения в одном месте, а не в тысяче.
👍13❤1
Инструменты для проверки ваших проектов на предмет дыр в безопасности
Если вы уже успели создать свой проект, но только теперь задумались о том, что, возможно, и храните какие‑нибудь секреты в коде, решение есть. Вы, конечно, можете проверить всё вручную, но это, скорее всего, потребует уйму времени и усилий. Очевидно, что это как раз тот случай, когда автоматизация — друг человека, и вам не помешают такие инструменты, как:
TruffleHog — инструмент поиска секретов в Git‑репозиториях, сканирующий commit history на наличие ключей API и других секретных данных.
GitLeaks — инструмент для обнаружения жестко закодированных секретов, таких как пароли, ключи API и токены, в git‑репозиториях.
GitGuardian — приложение, которое работает в вашей локальной среде или в среде CI и помогает вам обнаруживать свыше 350 типов секретов, а также другие потенциальные уязвимости безопасности или нарушения политики, влияющие на вашу кодовую базу.
GitHub Advanced Security — решение от GitHub, которое тоже предлагает функцию сканирования кода на наличие секретных данных. Secret Scanning автоматически сканирует репозитории на наличие известных типов секретов (пароли, ключи API, токены доступа и др.) и может прислать вам уведомление, если такой секрет был найден.
Разумеется, вышеназванные разработки — далеко не единственные представленные на рынке: взять хотя бы те же известные SonarQube или Checkmarx.
Если вы осознали наличие проблемы — считайте, что полдела сделано. Теперь главное — уделить ей достаточное время и принять соответствующие меры, а какие вы для этой цели будете использовать инструменты, дело десятое.
Если вы уже успели создать свой проект, но только теперь задумались о том, что, возможно, и храните какие‑нибудь секреты в коде, решение есть. Вы, конечно, можете проверить всё вручную, но это, скорее всего, потребует уйму времени и усилий. Очевидно, что это как раз тот случай, когда автоматизация — друг человека, и вам не помешают такие инструменты, как:
TruffleHog — инструмент поиска секретов в Git‑репозиториях, сканирующий commit history на наличие ключей API и других секретных данных.
GitLeaks — инструмент для обнаружения жестко закодированных секретов, таких как пароли, ключи API и токены, в git‑репозиториях.
GitGuardian — приложение, которое работает в вашей локальной среде или в среде CI и помогает вам обнаруживать свыше 350 типов секретов, а также другие потенциальные уязвимости безопасности или нарушения политики, влияющие на вашу кодовую базу.
GitHub Advanced Security — решение от GitHub, которое тоже предлагает функцию сканирования кода на наличие секретных данных. Secret Scanning автоматически сканирует репозитории на наличие известных типов секретов (пароли, ключи API, токены доступа и др.) и может прислать вам уведомление, если такой секрет был найден.
Разумеется, вышеназванные разработки — далеко не единственные представленные на рынке: взять хотя бы те же известные SonarQube или Checkmarx.
Если вы осознали наличие проблемы — считайте, что полдела сделано. Теперь главное — уделить ей достаточное время и принять соответствующие меры, а какие вы для этой цели будете использовать инструменты, дело десятое.
👍9❤1
Что такое маршрутизация веб-приложений?
Anonymous Quiz
77%
Сопоставление URL запросов с соответствующими обработчиками запросов в приложении.
5%
Формирование доменных имен для веб-сайтов.
18%
Процесс прокладки путей для транспортировки данных по сети.
😁2🔥1
Что такое MVC
MVC - это сокращение от Model-View-Controller (Модель-Представление-Контроллер). Это архитектурный шаблон, который используется в разработке программного обеспечения, особенно в веб-разработке.
• Модель (Model): Это представление данных и бизнес-логики вашего приложения. Представляет собой часть приложения, которая отвечает за данные и их обработку. Это могут быть данные из базы данных, файловой системы, внешних сервисов и т. д. Модель содержит логику, которая позволяет получать, изменять и сохранять данные.
• Представление (View): Это то, что видит пользователь - интерфейс приложения. Представление отображает данные пользователю и отвечает за визуальное представление информации.
• Контроллер (Controller): Это связующее звено между моделью и представлением. Контроллер обрабатывает пользовательские запросы, взаимодействует с моделью для получения данных и передает эти данные представлению для отображения.
Таким образом, в MVC данные (Модель) отделены от способа их представления (Представление) и от того, как они обрабатываются (Контроллер). Это делает приложения более организованными, легко расширяемыми и поддерживаемыми.
MVC - это сокращение от Model-View-Controller (Модель-Представление-Контроллер). Это архитектурный шаблон, который используется в разработке программного обеспечения, особенно в веб-разработке.
• Модель (Model): Это представление данных и бизнес-логики вашего приложения. Представляет собой часть приложения, которая отвечает за данные и их обработку. Это могут быть данные из базы данных, файловой системы, внешних сервисов и т. д. Модель содержит логику, которая позволяет получать, изменять и сохранять данные.
• Представление (View): Это то, что видит пользователь - интерфейс приложения. Представление отображает данные пользователю и отвечает за визуальное представление информации.
• Контроллер (Controller): Это связующее звено между моделью и представлением. Контроллер обрабатывает пользовательские запросы, взаимодействует с моделью для получения данных и передает эти данные представлению для отображения.
Таким образом, в MVC данные (Модель) отделены от способа их представления (Представление) и от того, как они обрабатываются (Контроллер). Это делает приложения более организованными, легко расширяемыми и поддерживаемыми.
👍7❤1
Параметры для удобного просмотра лога Git
Пример команды:
Скорее всего, вам уже доводилось использовать команду
К примеру, от вас требуют еженедельные отчёты каждую пятницу. Достаточно написать
Вообще, в Git есть много всяких полезных параметров. Просто попробуйте выполнить
Пример команды:
git log --oneline --graphСкорее всего, вам уже доводилось использовать команду
git log. У неё есть много полезных параметров, которые можно комбинировать друг с другом для достижения наилучшего результата. Чаще всего используют эти:--author="Alex Kras" — выводит коммиты, сделанные конкретным человеком--name-only — выводит только названия изменённых файлов--oneline — выводит сокращённые данные коммита (в виде одной строки)--graph — выводит дерево зависимостей для всех коммитов--reverse — выводит коммиты в обратном хронологическом порядке (сначала старые)--after — выводит коммиты, сделанные после определённой даты--before — выводит коммиты, сделанные до определённой датыК примеру, от вас требуют еженедельные отчёты каждую пятницу. Достаточно написать
git log --author="Name" --after="1 week ago" --oneline, немного подредактировать полученный результат и отправить их начальству.Вообще, в Git есть много всяких полезных параметров. Просто попробуйте выполнить
man git-log чтобы посмотреть все варианты просмотра истории. Если ни один из предложенных вариантов вас не устроит, вы всегда можете воспользоваться параметром --pretty, с помощью которого можно настраивать выдачу в широких пределах.👍11❤1
Структурные шаблоны проектирования
Эти шаблоны в основном посвящены компоновке объектов (object composition). То есть тому, как сущности могут друг друга использовать. Ещё одно объяснение: структурные шаблоны помогают ответить на вопрос «Как построить программный компонент?»
Структурными называют шаблоны, которые облегчают проектирование, определяя простой способ реализации взаимоотношений между сущностями.
Список шаблонов:
• Адаптер
• Мост
• Компоновщик
• Декоратор
• Фасад
• Приспособленец
• Заместитель
О каждом из ним мы подробно поговорим в последующих постах, оставайтесь с нами!
Эти шаблоны в основном посвящены компоновке объектов (object composition). То есть тому, как сущности могут друг друга использовать. Ещё одно объяснение: структурные шаблоны помогают ответить на вопрос «Как построить программный компонент?»
Структурными называют шаблоны, которые облегчают проектирование, определяя простой способ реализации взаимоотношений между сущностями.
Список шаблонов:
• Адаптер
• Мост
• Компоновщик
• Декоратор
• Фасад
• Приспособленец
• Заместитель
О каждом из ним мы подробно поговорим в последующих постах, оставайтесь с нами!
👍7
Что такое APO
«Avoid Premature Optimization / Избегайте преждевременной оптимизации»
Эта практика побуждает разработчиков оптимизировать код до того, как необходимость этой оптимизации будет доказана. Думаю, что если вы следуете KISS или YAGNI, вы не попадетесь на этот крючок.
Поймите правильно, предвидеть, что произойдет что-то плохое – это хорошо. Но прежде чем вы погрузитесь в детали реализации, убедитесь, что эти оптимизации действительно полезны.
Очень простой пример – масштабирование. Вы не станете покупать 40 серверов из предположения, что ваше новое приложение станет очень популярным. Вы будете добавлять серверы по мере необходимости.
Преждевременная оптимизация может привести к задержкам в коде и, следовательно, увеличит затраты времени на вывод функций на рынок.
Многие считают преждевременную оптимизацию корнем всех зол.
«Avoid Premature Optimization / Избегайте преждевременной оптимизации»
Эта практика побуждает разработчиков оптимизировать код до того, как необходимость этой оптимизации будет доказана. Думаю, что если вы следуете KISS или YAGNI, вы не попадетесь на этот крючок.
Поймите правильно, предвидеть, что произойдет что-то плохое – это хорошо. Но прежде чем вы погрузитесь в детали реализации, убедитесь, что эти оптимизации действительно полезны.
Очень простой пример – масштабирование. Вы не станете покупать 40 серверов из предположения, что ваше новое приложение станет очень популярным. Вы будете добавлять серверы по мере необходимости.
Преждевременная оптимизация может привести к задержкам в коде и, следовательно, увеличит затраты времени на вывод функций на рынок.
Многие считают преждевременную оптимизацию корнем всех зол.
👍12🔥1
Закрыт ли доступ к тестовой версии вашей разработки?
Главная проблема здесь в том, что тестовые версии могут содержать ошибки, а также уже упомянутую выше секретную или тестовую информацию, которая иногда может быть компрометирующей. Плюс к этому стоит добавить, что бета‑версии, как правило, могут быть более уязвимы ко взломам, чем финальная production версия.
Что делать? С самого начала вам нужна какая‑то тактика!
• Не экономьте на доменах — если нужна тестовая версия доступная по Сети, купите отдельный домен специально под неё. Это простой, но максимально эффективный способ уменьшить риски безопасности. Связано это с тем, что при поиске уязвимых мест взломщики будут в первую очередь проверять именно поддомены вашего проекта.
• Ограничьте доступ к любым тестовым версиям: убедитесь, что dev, qa, staging и другие версии сайта, кроме финальной, нельзя открыть просто так. Необходимо произвести такую настройку, чтобы они были доступны, например, только через VPN.
• Защитите тестовые версии от индексации. Даже если тестовые версии вашего проекта доступны только через VPN и находятся на отдельных секретных доменах, их следует защитить от индексации поисковиками с помощью файла robots.txt или метатегов noindex.
Главная проблема здесь в том, что тестовые версии могут содержать ошибки, а также уже упомянутую выше секретную или тестовую информацию, которая иногда может быть компрометирующей. Плюс к этому стоит добавить, что бета‑версии, как правило, могут быть более уязвимы ко взломам, чем финальная production версия.
Что делать? С самого начала вам нужна какая‑то тактика!
• Не экономьте на доменах — если нужна тестовая версия доступная по Сети, купите отдельный домен специально под неё. Это простой, но максимально эффективный способ уменьшить риски безопасности. Связано это с тем, что при поиске уязвимых мест взломщики будут в первую очередь проверять именно поддомены вашего проекта.
• Ограничьте доступ к любым тестовым версиям: убедитесь, что dev, qa, staging и другие версии сайта, кроме финальной, нельзя открыть просто так. Необходимо произвести такую настройку, чтобы они были доступны, например, только через VPN.
• Защитите тестовые версии от индексации. Даже если тестовые версии вашего проекта доступны только через VPN и находятся на отдельных секретных доменах, их следует защитить от индексации поисковиками с помощью файла robots.txt или метатегов noindex.
Что такое JWT
JWT (JSON Web Token) - это стандарт для создания токенов, которые могут использоваться для аутентификации и передачи информации между сторонами. Он использует формат JSON.
Вот как работает JWT:
1. Создание токена: Пользователь или сервер создает токен, который содержит набор данных, таких как идентификатор пользователя или другая информация, которую они хотят передать.
2. Подпись токена: Токен подписывается с использованием секретного ключа. Это делает его неподдельным и обеспечивает его целостность.
3. Передача токена: Токен передается между клиентом и сервером через HTTP заголовок, обычно в форме
4. Проверка токена: Получатель токена может проверить его подпись, чтобы убедиться, что он не был изменен и что он был создан с использованием секретного ключа. Если проверка проходит успешно, получатель может использовать данные из токена для аутентификации пользователя или получения другой необходимой информации.
JWT обычно используется для создания токенов с информацией о пользователе после успешной аутентификации, чтобы идентифицировать пользователя при последующих запросах без необходимости повторной отправки учетных данных. Он также может использоваться для передачи других данных между сторонами, таких как права доступа или другие свойства пользователя.
JWT (JSON Web Token) - это стандарт для создания токенов, которые могут использоваться для аутентификации и передачи информации между сторонами. Он использует формат JSON.
Вот как работает JWT:
1. Создание токена: Пользователь или сервер создает токен, который содержит набор данных, таких как идентификатор пользователя или другая информация, которую они хотят передать.
2. Подпись токена: Токен подписывается с использованием секретного ключа. Это делает его неподдельным и обеспечивает его целостность.
3. Передача токена: Токен передается между клиентом и сервером через HTTP заголовок, обычно в форме
Authorization: Bearer <токен>.4. Проверка токена: Получатель токена может проверить его подпись, чтобы убедиться, что он не был изменен и что он был создан с использованием секретного ключа. Если проверка проходит успешно, получатель может использовать данные из токена для аутентификации пользователя или получения другой необходимой информации.
JWT обычно используется для создания токенов с информацией о пользователе после успешной аутентификации, чтобы идентифицировать пользователя при последующих запросах без необходимости повторной отправки учетных данных. Он также может использоваться для передачи других данных между сторонами, таких как права доступа или другие свойства пользователя.
👍13👾2
Вывод актуальных изменений в файл Git
Пример команды:
С помощью команд
Далее можно использовать функцию поиска утилиты
Пример команды:
git log -p filenameС помощью команд
git log -p или git log -p filename можно посмотреть не только примечание к коммиту, автора и дату, но также сделанные в этом коммите изменения.Далее можно использовать функцию поиска утилиты
less, набрав «слеш» и введя поисковый запрос: /{{поисковый-запрос}} (используйте маленькую "n" для перехода к следующему результату поиска и большую "N" для того, чтобы вернуться к предыдущему).👍5
Адаптер
Приведем аналогию: Допустим, у вас на карте памяти есть какие-то картинки. Их нужно перенести на компьютер. Нужен адаптер, совместимый с входным портом компьютера, в который можно вставить карту памяти. В данном примере адаптер — это картридер. Ещё один пример: переходник, позволяющий использовать американский блок питания с российской розеткой. Третий пример: переводчик — это адаптер, соединяющий двух людей, говорящих на разных языках.
Шаблон «Адаптер» позволяет помещать несовместимый объект в обёртку, чтобы он оказался совместимым с другим классом.
Шаблон проектирования «Адаптер» позволяет использовать интерфейс существующего класса как другой интерфейс. Этот шаблон часто применяется для обеспечения работы одних классов с другими без изменения их исходного кода.
Приведем аналогию: Допустим, у вас на карте памяти есть какие-то картинки. Их нужно перенести на компьютер. Нужен адаптер, совместимый с входным портом компьютера, в который можно вставить карту памяти. В данном примере адаптер — это картридер. Ещё один пример: переходник, позволяющий использовать американский блок питания с российской розеткой. Третий пример: переводчик — это адаптер, соединяющий двух людей, говорящих на разных языках.
Шаблон «Адаптер» позволяет помещать несовместимый объект в обёртку, чтобы он оказался совместимым с другим классом.
Шаблон проектирования «Адаптер» позволяет использовать интерфейс существующего класса как другой интерфейс. Этот шаблон часто применяется для обеспечения работы одних классов с другими без изменения их исходного кода.
👍8
Пример структурного шаблона Адаптер
Представим себе охотника на львов.
Создадим интерфейс
Охотник должен охотиться на все реализации интерфейса
Добавим теперь дикую собаку
Теперь
Представим себе охотника на львов.
Создадим интерфейс
Lion, который реализует все типы львов.interface Lion
{
public function roar();
}
class AfricanLion implements Lion
{
public function roar()
{
}
}
class AsianLion implements Lion
{
public function roar()
{
}
}
Охотник должен охотиться на все реализации интерфейса
Lion.class Hunter
{
public function hunt(Lion $lion)
{
}
}
Добавим теперь дикую собаку
WildDog, на которую охотник тоже может охотиться. Но у нас не получится сделать это напрямую, потому что у собаки другой интерфейс. Чтобы она стала совместима с охотником, нужно создать подходящий адаптер.// Это нужно добавить
class WildDog
{
public function bark()
{
}
}
// Адаптер вокруг собаки сделает её совместимой с охотником
class WildDogAdapter implements Lion
{
protected $dog;
public function __construct(WildDog $dog)
{
$this->dog = $dog;
}
public function roar()
{
$this->dog->bark();
}
}
Теперь
WildDog может вступить в игру действие благодаря WildDogAdapter.$wildDog = new WildDog();
$wildDogAdapter = new WildDogAdapter($wildDog);
$hunter = new Hunter();
$hunter->hunt($wildDogAdapter);🔥9🤔6
Что такое Бритва Оккама
Что это значит в мире программирования? Не создавайте ненужных сущностей без необходимости. Будьте прагматичны — подумайте, нужны ли они, поскольку они могут в конечном итоге усложнить вашу кодовую базу.
Бри́тва О́ккама (иногда ле́звие О́ккама) — методологический принцип, в кратком виде гласящий: «Не следует множить сущее без необходимости» (либо «Не следует привлекать новые сущности без крайней на то необходимости»).
— Википедия
Что это значит в мире программирования? Не создавайте ненужных сущностей без необходимости. Будьте прагматичны — подумайте, нужны ли они, поскольку они могут в конечном итоге усложнить вашу кодовую базу.
👍5❤1
Скрываем реальный IP адрес, задраиваем/закрываем порты
Существуют и правила безопасности, которые знают и помнят далеко не все разработчики. Одно из таких правил — обязательное сокрытие реального IP‑адреса вашего проекта. Если по доменному имени можно определить IP‑адреса серверов, это может привести к проблемам.
Спрятав реальный IP‑адрес сервера, вы сразу затрудните задачу потенциальным атакующим. В этом вопросе могут оказаться весьма полезными CDN (сеть доставки контента) или сервисы защиты от DDoS‑атак. Например, есть такое популярное и при этом бесплатное решение, как CloudFlare, которое сочетает в себе сразу и возможности CDN, и защиту от DDoS. Можно использовать Imperva (бывшая Incapsula), предлагающую аналогичные функции, или, например, Qrator, специализирующийся на защите веб‑приложений как Web Application Firewall, но это уже будет стоить денег.
Хотя эти инструменты могут эффективно помочь в обеспечении безопасности, есть некоторые нюансы, которые тоже стоит помнить:
1. Существует риск утечки IP через почтовые заголовки. Если вы используете ваш основной сервер в качестве почтового, реальный IP‑адрес может быть раскрыт в заголовках электронных писем, и все ваши старания полетят коту под хвост.
2. С помощью ресурсов вроде DNS History или Whois Request, можно просмотреть историю IP‑адресов, ассоциированных с доменом. Если реальный IP‑адрес когда‑либо был связан с рабочим доменом, его следует изменить.
3. Будьте особенно осторожны при использовании DDoS‑защиты для доменов, применяемых в качестве API‑эндпоинтов. Системы защиты иногда могут вводить проверку пользователя, подменяя ваш json/xml на HTML код, что может привести к сбоям в работе клиентской части.
4. Не забывайте, что отправляя запросы со своего сервера на API сторонних ресурсов, вы также можете раскрыть его IP. Для того, чтобы избежать этого недоразумения, вы можете использовать proxy‑серверы, ведь их изменить будет гораздо проще, чем разгребать последствия атаки.
Существуют и правила безопасности, которые знают и помнят далеко не все разработчики. Одно из таких правил — обязательное сокрытие реального IP‑адреса вашего проекта. Если по доменному имени можно определить IP‑адреса серверов, это может привести к проблемам.
Спрятав реальный IP‑адрес сервера, вы сразу затрудните задачу потенциальным атакующим. В этом вопросе могут оказаться весьма полезными CDN (сеть доставки контента) или сервисы защиты от DDoS‑атак. Например, есть такое популярное и при этом бесплатное решение, как CloudFlare, которое сочетает в себе сразу и возможности CDN, и защиту от DDoS. Можно использовать Imperva (бывшая Incapsula), предлагающую аналогичные функции, или, например, Qrator, специализирующийся на защите веб‑приложений как Web Application Firewall, но это уже будет стоить денег.
Хотя эти инструменты могут эффективно помочь в обеспечении безопасности, есть некоторые нюансы, которые тоже стоит помнить:
1. Существует риск утечки IP через почтовые заголовки. Если вы используете ваш основной сервер в качестве почтового, реальный IP‑адрес может быть раскрыт в заголовках электронных писем, и все ваши старания полетят коту под хвост.
2. С помощью ресурсов вроде DNS History или Whois Request, можно просмотреть историю IP‑адресов, ассоциированных с доменом. Если реальный IP‑адрес когда‑либо был связан с рабочим доменом, его следует изменить.
3. Будьте особенно осторожны при использовании DDoS‑защиты для доменов, применяемых в качестве API‑эндпоинтов. Системы защиты иногда могут вводить проверку пользователя, подменяя ваш json/xml на HTML код, что может привести к сбоям в работе клиентской части.
4. Не забывайте, что отправляя запросы со своего сервера на API сторонних ресурсов, вы также можете раскрыть его IP. Для того, чтобы избежать этого недоразумения, вы можете использовать proxy‑серверы, ведь их изменить будет гораздо проще, чем разгребать последствия атаки.
👍1
Что такое миграции баз данных?
Anonymous Quiz
3%
Оптимизация производительности запросов к базе данных.
7%
Процесс обновления операционной системы на сервере баз данных.
85%
Автоматизированный процесс применения и отмены изменений в структуре базы данных.
4%
Увеличение доступного пространства для базы данных.
Миграция баз данных
Под любой миграцией понимают перемещение чего-то или кого-то с одного места в другое. По этому же принципу работает миграция баз данных. Например, ее переносят из локальной среды в облачную.
Существует 2 типа процесса миграции:
1. Однократная миграция подразумевает разовое перемещение. Нюанс этого процесса заключается в том, что база данных переносится из одной системы в другую. При этом поддержка первой системы, из которой выполнили перенос, прекращается.
2. Версионная миграция данных. При данном типе база данных обновляется до новой версии. Помимо апгрейда, может быть откат к более старым версиям. Также данный тип миграции затрагивает схему, о которой более подробно рассказали в разделе «Основные понятия».
Цели миграция баз данных
Прежде чем перейти к инструкциям, разберемся, зачем компании проводят данную процедуру и какую выгоду получают. Как правило, в любой организации с каждым годом работы количество информации только приумножается. В основном для ее хранения выбирают базы данных. Но не все так просто, поскольку со временем специалисты перестают справляться с сопровождением, а также появляется необходимость в современных информационных системах.
Чтобы справиться со всеми трудностями, нужно проводить миграцию баз данных. Это помогает улучшить защиту конфиденциальности информации и закрыть вопрос с поддержкой, так как базы данных переходят под управление современных систем. Переход от старого к новому способствует цифровым трансформациям в компании.
Сейчас мы рассмотрим, почему бизнес нуждается в миграции баз данных и какие задачи она решает:
• Чтобы повысить уровень сохранности и надежности данных.
• Улучшить качество командной работы. Если над проектом работает команда разработчиков, миграция помогает синхронизировать код и контролировать версии программного обеспечения.
• Устранить проблемы с масштабированием проектов.
• Обновить функционал и повысить производительность системы хранения информации.
• Чтобы воспользоваться возможностями современных технологий, например, работать с BigData или искусственным интеллектом.
• Сократить расходы на сопровождение и поддержку информационных систем.
Следующим постом рассмотрим пример миграции базы данных PostgreSQL
Под любой миграцией понимают перемещение чего-то или кого-то с одного места в другое. По этому же принципу работает миграция баз данных. Например, ее переносят из локальной среды в облачную.
Существует 2 типа процесса миграции:
1. Однократная миграция подразумевает разовое перемещение. Нюанс этого процесса заключается в том, что база данных переносится из одной системы в другую. При этом поддержка первой системы, из которой выполнили перенос, прекращается.
2. Версионная миграция данных. При данном типе база данных обновляется до новой версии. Помимо апгрейда, может быть откат к более старым версиям. Также данный тип миграции затрагивает схему, о которой более подробно рассказали в разделе «Основные понятия».
Цели миграция баз данных
Прежде чем перейти к инструкциям, разберемся, зачем компании проводят данную процедуру и какую выгоду получают. Как правило, в любой организации с каждым годом работы количество информации только приумножается. В основном для ее хранения выбирают базы данных. Но не все так просто, поскольку со временем специалисты перестают справляться с сопровождением, а также появляется необходимость в современных информационных системах.
Чтобы справиться со всеми трудностями, нужно проводить миграцию баз данных. Это помогает улучшить защиту конфиденциальности информации и закрыть вопрос с поддержкой, так как базы данных переходят под управление современных систем. Переход от старого к новому способствует цифровым трансформациям в компании.
Сейчас мы рассмотрим, почему бизнес нуждается в миграции баз данных и какие задачи она решает:
• Чтобы повысить уровень сохранности и надежности данных.
• Улучшить качество командной работы. Если над проектом работает команда разработчиков, миграция помогает синхронизировать код и контролировать версии программного обеспечения.
• Устранить проблемы с масштабированием проектов.
• Обновить функционал и повысить производительность системы хранения информации.
• Чтобы воспользоваться возможностями современных технологий, например, работать с BigData или искусственным интеллектом.
• Сократить расходы на сопровождение и поддержку информационных систем.
Следующим постом рассмотрим пример миграции базы данных PostgreSQL
👍10❤1🔥1👀1