Скачать mp3 / Весь mp3-архив

PHP подкаст #9

В 9ом подкасте о PHP:

  1. “Вкалывают роботы, а не человек”. Robo для автоматизации.
  2. Деплоим PHP-код на Amazon Lambda.
  3. @depends в PHPUnit.
  4. GUI-велосипеды на PHP.
  5. Redis библиотеки не одинаково производительны.
  6. Перцептивный хеш изображений.
  7. Новый twig v1.28.1.
  8. API для Amazon Product Advertising API.
  9. API gateway паттерн.
  10. Свежая статистика использования PHP по данным packagist.org.

Еще один полезный репозиторий — это таск-раннер Robo. Очень мне напомнил Fiber (Python). Удобен для автоматизации рутинных задач вроде работы с репозиторием, выполнения задач на удаленном сервере, git-команд, выполнения Docker-команд, отслеживания изменений файловой системы и т.д. Все на родном языке. Лучше всего глянуть на их же RoboFile или RoboFile в репозитории Codeception.

Интересный репозиторий, обернутый в Docker, который позволяет легко разворачивать PHP-код на Amazon Lambda. Amazon Lambda не поддерживает PHP рантайм пока, но поддерживает node.js. Враппер написанный как раз на node.js запускает PHP-код.

У PHPUnit есть замечательная аннотация @depends. Она может быть особенно удобна когда вы запускаете интегральные тесты, в которых принимает участие БД. Тесты можно разбить логически на разные методы и запускать их один за другим. setUp & tearDown также запускаются перед каждым зависимым тестом. Поэтому если у вас в setUp вайпается БД, то и перед зависимым тестом она будет зачищена. Возможно, что тест зависит от результатов нескольких тестов. Хороший пример использования @depends по ссылке.

Еще один репозиторий для создания GUI приложений на PHP (используя libui). Автор продемонстрировал мощь :) библиотеки змейкой. На мой взгляд вот этот репозиторий удобнее и проще в использовании (использует Lazarus Component Library от Free Pascal).

Сравнение производительности 4х расширений для работы с Redis key-value хранилищем: redis, Predis, phpiredis, Predis + phpiredis. Самый быстрый phpiredis. Если же по душе использовать OOP стиль, то Predis. В мануале Predis указано, что наиболее производительно использовать его с phpiredis.

Занимательный репозиторий хеширования восприятия изображений. Подобные перцептивные хеши позволяют сравнить насколько фотографии похожи друг на друга.

У twig 1.28.1 появился новый тег with, который ограничивает область видимости переменной. Также в этой же версии появилась возможность проверки того, объявлен ли блок {% if block(‘some_block’) is defined %}. Как бы “Улучшена производительность” метода getAttribute. “Как бы” потому что еще никто не делал замеров производительности. getAttribute — это волшебный метод, делающий twig удобным шаблонизатором.

Примечательная статья о работе с Amazon Product Advertising API. Можно узнать что продается, отзывы о товарах, обзоры, похожие продукты и т.д. со всех торговых площадок Amazon’а. Если вы обладатель англоязычного ресурса, то, вероятно, уже использовали это API для рекламы релевантных товаров.

PHP реализация API gateway на базе Lumen (микрофреймворк). Vrata есть на докер-хабе и могут быть подняты одной командой. Врата конфигурируются JSON’ом и при запросах асинхронно собирают данные с разных микросервисов, агрегируют ответ и отдают клиенту. Как всегда есть реализация API gateway у Amazon’а, где платишь только за обращения к API и исходящий трафик. Сам дизайн-паттерн легко внедряется в существующую систему. Вы просто разворачиваете его и проксируете все запросы к существующему серверу и последовательным рефакторингом, прозрачным для клиента, гранулируете API. Часто на API шлюз также налагают функцию авторизации запросов. Необходимость подобного паттерна возникает естественно при переходе к архитектуре микросервисов. Для эффективного внедрения этого паттерна также может понадобиться сервис-локатор. Он нужен, например, в случае возрастающей нагрузки, когда нужно динамически задействовать дополнительные сервера. В традиционных монолитных приложениях вызов необходимого функционала происходит на уровне языка программирования. В масштабируемом приложении вызов функционала происходит как правило при помощи REST/HTTP(S) запросов. Сервис-локатор как раз решает проблему маршрутизации и именно он может управляться в зависимости от нагрузки.

Популярные реализации API gateway:

Статистика использования разных версий PHP от Джорди Боджиано. Это статистика только по тем пользователям, которые обращаются к серверу packagist.org. Выборка за последние 28 дней. При каждом обращении к packagist.org интерпретатор передает версию. Отсюда и статистика. Джорди сетует, что зависимости в пакетах сильно отстают от реального использования версий (см. динамику по ссылке выше).

Опубликовано: 19.11.2016
Теги: @depends, Amazon Lambda, API gateway, API Umbrella, Codeception, Docker, Free Pascal, GUI, Kong, Lazarus, libui, packagist.org, phpiredis, PHPUnit, Predis, Redis, Robo, RoboFile, Twig, Джорди Боджиано, паттерн, перцептивный хэш изображений, статистика