Комментарии 39
Стандарт PSR-7 успешно завершён.Да не стандарт это. Просто рекомендация (PHP Standard Recommendation).
Запрос->c_заголовком(1)->без_заголовка(2)->отправить();
В то время, как код с set и unset представляется как
Запрос->установить_заголовок(1);
Запрос->убрать_заголовок(2);
Запрос->отправить();
к этому стандарту есть «пояснительная записка» в которой отражены мысли по этому поводу:
github.com/php-fig/fig-standards/blob/master/proposed/http-message-meta.md#why-value-objects
Интерфейс внутри сервера для работы с запросом будет подразумевать явное его изменение, таким образом избавляются от случайных изменений по сути глобального объекта, также благодаря этому приложение может отреагировать на это изменение, именно как цельного набора значений, а не отдельных свойств
Да и вообще, можете привести пример в коде когда вас это парит?
Запросто:
$myObjectWithSuperName = new Object();
if ($veryLongSettingName1 == 1) {
$myObjectWithSuperName = $myObjectWithSuperName->with(1);
}
if ($veryLongSettingName2 == 2) {
$myObjectWithSuperName = $myObjectWithSuperName->with(2);
}
Скажите, а насколько это правильно использовать PHP для API сервера? Не будут ли меня пинать, когда узнают, что мой сервер работает на PHP?
PHP популярный язык программирования с низким порогом входа, поэтому и программистов на нем гораздо больше чем например на C, и сосредоточенны они достаточно кучно — так или иначе рядом с вебом, и даже если % хороших программистов не зависит от ЯП, то в абсолютных цифрах % оставшихся все равно больше (а если взять порог входа, то и сам процент не в пользу php).
У самого языка/реализации тоже есть проблемы, кроме разнородных неймингов стандартной либы, не очевидных поведений и достаточной забаговановасти ядра (где-то в 5.5-5.6 мне более менее перестали попадаться всякие неожиданные сегфолты, которые без ковыряния в коде ядра, которое просто жутко как написано, не починишь) много ограничений дает «PHP создан, чтобы умирать» — да можно писать демоны и на php но это будут скорее какие-то воркеры, чем сервер для обработки клиентских запросов, потомучно в PHP все работает исходя из этого постулата, ни GC ни стандартные библиотеки, ни уж тем более сторонние, не создавались для того чтобы обслужить больше 1 запроса. А уж отсутсвие JIT в 2015 году это я даже не знаю как назвать. (да какой JIT даже отсутствие встроенного кешера байт-кода до 5.5)
Да и от языка скриптования шаблонов он начал отходить относительно недавно, а порядок в нем начали наводить так вообще не больше 2-3 лет назад.
Очень хороший пинок дали Composer и Symfony Components, а также появление альтернативных реализация рантайма.
В общем ждем PHP 7 надеемся и верим…
Он предоставляет интерфейсы, которые должны реализовать фреймворки.
Т.е. ещё одна зависимость в композере от пакета php-fig/http-message
Итак уже в папке vendor множество всяких пакетов… И тут будет ещё один.
Для чего это? Чтобы облегчить перевод приложения из одного фреймворка в другой?
Фреймворки должны реализовать группу интерфейсов PSR-7, но никто не мешает авторам фреймворков добавить собственные методы. Это не нарушает принципы ООП. А эти методы могут быть очень полезными.
Т.е. встаёт выбор, использовать интерфейс PSR-7, и иметь независимость от фреймворка.
Или использовать интерфейс фреймворка(который также реализует PSR-7), но. получить зависимость от фреймворка и удобные методы.
Я выберу второе.
Имхо, единственный и главный плюс этого стандартна, когда программируешь на одном фрейморке, потом вдруг понадобилось использовать другой — а ты уже знаешь, как обращаться с http компонентом.
Но тут IDE намного больше пользы принесет.
Серьёзно, в чём плюс этого PSR-7?
Вы, видимо, забываете, что из php не только обрабатываются входящие запросы, но и посылаются исходящие. Скорее всего guzzle и buzz реализуют эти интерфейсы, и тогда разработчики оберток над api будут требовать не guzzle/buzz/curl, а php-fig/http-message.
Некоторые клиенты выдают ошибку при попытке передать в строке GET-запроса массив. Чтобы этого не случилось, нужно квадратные скобки урленкодить ( [ — %5B и ] — %5D)
ну попробуйте ответить на вопрос в чем смысл RFC 2616, и в чем заключается задача PSR-7.
смысл PSR-7 — предоставление API для работы с HTTP запросами и ответами. API для формирования HTTP сообщений, API для http стримиинга и т.д.
То есть смысл в стандартизации http клиентов и серверов с точки зрения API, дабы иметь возможность делать мидлвары и прочие вещи (PSR-15). примерно та же суть была у symfony/http kernel.
То есть не надо стандартизировать абстракцию от SAPI? Инверсию управления придумали дураки? Никому не нужно иметь возможность реализации своих надстроек для оптимизации приложения (php-pm, spiral/roadrunner, php-rpm) и иметь возможность за счет "стандарта" интегрировать свое приложение в любую из этих инфраструктурных штук?
Да, дно стандарт… нинужон. Как и PSR-3, кому надо стандартизировать логгер? или PSR-11, вообще бесполезная штука. А от PSR-1 меня подбамбивает по дикому периодически… а сырой и недоработанный PSR-4?
PSR-7 в примерах