Решил я свой фреймворк поставить на рельсы PSR-7. Чо, фреймворк всё таки. :)
Смотрел несколько реализаций, ни одна не понравилась. Взялся свой велик изобреать. В общем то ничего там сверхестественного, однако возник вопрос.
Как я понял, сей "стандарт" придуман для унификации работы с HTTP. Другими словами, это некое middlware, абстракция, посредник между протоколом и приложением.
Цитата |
Цель PSR-7 предоставить общий набор интерфейсов для фреймворков, чтобы последние могли использовать одинаковые абстракции. Это позволит разработчикам писать переиспользуемый, независимый от фреймворка код |
Но окрываю доку Slim, и что вижу...
$email = $app->request()->post('email');
Простите, но метод post() не сертифицирован в PSR-7. Хотя Slim громко заявляет о своей бесконечной ему преданности.
Еще один, PHPixie:
$name = $request->query()->get('name');
В нем вообще куча расширений стандарта
Так вот и вопрос. Ну и что это за стандарт, если никакой унификации? Не, я понимаю, что можно реализовать голый стандарт, а потом его задекорировать или трейтов налепить, изна
силоватьследовать в конце концов. Только в чем смысл тогда? Если я влеплю Лараверевский ->input(), меня Slim не поймет.
Это же все наоборот получается. Не любое приложение будет совместимым с любым фреймворком (для чего и служит стандарт на мой взгляд), а реализацию middlware можно влепить в любой фреймворк. Ну и на кой кому нужна моя реализация? Да и структура, навязываемая интерфейсами меня не устраивает. Методы я реализую, но не в том порядке, что в интерфейсах. Впрочем это мелочь.
Так что делать мне? Наплевать на него и сделать удобно, или раскорячиться и сделать "стандартно", в надежде на то, что бандера приде - порядок наведе?
Или я не понял нихрена?
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Цитата (twin @ 30.03.2017 - 18:33) |
$request->query()->get('name'); |
как формируется $request, что у него внутри, если там PSR-7 интерфейс, то всё ок
Цитата (twin @ 30.03.2017 - 18:33) |
$app->request()->post('email'); |
Вот тут уже магия начинается, но всё равно нужно смотреть в метод request() и смотреть как он достает данные и какие объекты использует
PSR-7 может использоваться как без обверток, так и с обвертками (в них о будет источником данных для обвертки).
Цитата (twin @ 30.03.2017 - 18:33) |
Так что делать мне? Наплевать на него и сделать удобно, или раскорячиться и сделать "стандартно", в надежде на то, что бандера приде - порядок наведе? |
Следование стандарту PSR-7 очень сильно влияет на архитектуру приложения, если ты не готов переписать четверть своего фреймворка, то наверно не стоит смотреть на PSR-7
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Цитата (chee @ 31.03.2017 - 06:45) |
как формируется $request, что у него внутри, если там PSR-7 интерфейс |
Да не в том дело. Интерфейс то они реализовали. Только своих методов напихали.
Цитата (chee @ 31.03.2017 - 06:45) |
PSR-7 может использоваться как без обверток, так и с обвертками |
Да я понял уже, что это, как и query builder, практически бесполезная мулька.
Да, если захочется написать "кроссплатформенный" проект, то можно следовать ему. Но тогда нужно забыть про все вкусности фреймворка. Нельзя писать так:
$email = $app->request()->post('email');
Можно только так:
$post = $app->request()->getParsedBody();
$email = $post['email'];
Потому что request()->post(), это фишка Slim.
Вобщем никто этой фигней пользоваться не будет. В очередной раз попытка улучшить PHP снаружи не увенчалась успехом. Хотели как лучше, получилось как всегда. :)
Цитата (chee @ 31.03.2017 - 06:45) |
Следование стандарту PSR-7 очень сильно влияет на архитектуру приложения, если ты не готов переписать четверть своего фреймворка, то наверно не стоит смотреть на PSR-7 |
Ни на что оно не влияет. Я же говорю, это middlware. Я уже практически написал реализацию. Ничего там особо сложного.
В крайнем случае, если уж так сильно завязано, можно сделать обертки. Не так много методов. Только вопрос - нафига? Кому оно надо?
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
А чем $_POST['email'] не "кроссплатформенный" ?
Тоже зачем то делал давно такой класс, даже использую в движке, только уже не помню зачем =)
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
PSR-7 вообще не юзает $_POST. Там парсится тело запроса. Вообще задумка такая, чтобы не зависеть от протокола. В FTP никакого POST нету. Хотя во всех реализациях, которые я видел, есть только две схемы: Http(s)
Это же абстракция. Как раз для того, чтобы не юзать уже готовые, заботливо предоставленные PHP суперглобальные переменные.
Цитата |
Любую проблему можно решить новым слоем абстракции. Кроме переизбытка слоев абстраций. (с) |
Вообще мне кажется это мертвый стандарт. Полезен только для конъюнктуры. Повешать огромный банер "Фреймворк поддерживает PSR-7!"
Пользоваться им вчистую все равно никто не будет, но звучит круто.
Я у себя сделал только ради курсов, чтобы на примерах показывать, что это за зверь. И еще, сделаю это опционально. Так как это не только бесполезная побрякушка, но и еще весьма прожорливая.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Я думаю писать нужно под продукт, а не под стандарт.
Если ABC это продукт для обучения, то там нужен такой функционал и в таком виде, который объяснит теорию на практике.
А ты пытаешься всунуть туда PSR-7, который не каждому профи нужен. При этом что ученикам скажешь? "Вот это PSR-7, разбираетесь. Зачем? да хрен его знает".
К тому же сегодня стандарт "PSR-7", а завтра, когда они наконец то научатся кодить, стандартом будет "PSR-8" или даже "VASYA-12".
Опять же научаться на твоём PSR-7, начнут проект на slim и обосрутся, потому что там другой PSR-7 =)
Так что в рамках ABC лучше "Наплевать на него и сделать удобно", что бы объяснить идею.
Вообще все эти хипстерские технологии, которые каждый день меняются нужны только программистам, которые так же каждый день прыгают с проекта на проект. Потому что пока ты напишешь проект на всех этих стандартах, он к релизу уже устареет.
А тем временем какой нибудь Drupal 7 что 10 лет назад работал, что сейчас точно так же работает.
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Цитата |
Цель PSR-7 предоставить общий набор интерфейсов для фреймворков, чтобы последние могли использовать одинаковые абстракции. Это позволит разработчикам писать переиспользуемый, независимый от фреймворка код |
А вот что в официальной документации:
Цитата |
This proposal does not expect all HTTP client libraries or server-side frameworks to change their interfaces to conform. It is strictly meant for interoperability. |
Насколько я могу судить, смысл "немножко" другой и ни о какой совместисости кода речи вообще не идет! PSR-7 это набор интерфейсов, которые описывают определенные RFC, там же, в официальной доке, всё сказано вроде.
Вооще, сугубо мое личное мнение, PSR-7 служит восновном для реализации RESTful API. Потому что не вижу особого смысла "расширять" HTTP протокол для коммон тасков. Слим позиционируется как фреймворк для создания API (в первую очередь). Где нужна скорость, а значит легковесность. В то же время, его можно использовать для универсальных несложных задач. Опять же, об этом написано прямо на главной странице проекта.
Цитата (Arh @ 31.03.2017 - 21:10) |
К тому же сегодня стандарт "PSR-7", а завтра, когда они наконец то научатся кодить, стандартом будет "PSR-8" или даже "VASYA-12". |
Да, только PSR-7 не стандарт. Он является абстракцией над несколькими RFC, еще раз. Сильно сомневаюсь, что они поменяются на VASYA-12. Однако, новая версия протокола может выйти, HTTP 2.0 уже давным-давно ждут, он даже уже описан под номером 7540. Но это, дорогие ребята, уже совсем другая история. <:-)
P.s. Твин, рекумендую тщательнее выбирать источники (и авторов) цитирования.
https://habrahabr.ru/post/250343/
Ron
Цитата |
Да, только PSR-7 не стандарт. |
Цитата |
Для начала, я кратко расскажу о том, что регулирует этот стандарт. |
Запутать меня хочешь?)
USB 3.1 тоже интерфейс, тоже абстракция на всякими геометрическими формами и количеством проводов)
Понятно что "стандарт" понятие относительное, для кого то VASYA-12 стандарт, для кого то очередная абстракция, вопрос в том что брать за стандарт, а раз тема про PSR-7...
Я вообще к тому, что если твин напишет свою абстракцию TWIN-7 и примет его за стандарт в ABC, возможно это будет даже правильней, потому что будет реализован в стиле ABC.
Двигатель от феррари лучше впишется в кузов феррари, чем в ВАЗ 2108, как бы он не был хорош или плох.
К тому же всегда найдутся те, кому неудобен PSR-7 и те кто на него молится перед сном, slim вон считает что неудобно и сделал по своему, почему twin не может сделать по своему?
Мысль у меня всё дальше и дальше уходит.
Twin выпустит ABC, а вы скажите не буду пользоваться, потому что там паттерны, которые мне не нравятся. При этом используете silex, slim итд. Почему? Вам в них всё нравится?
Да блин, сомневаюсь. Скорее потому что модно.
Подворачивать штаны зимой тоже модно сейчас
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Цитата (Arh @ 31.03.2017 - 23:18) |
Запутать меня хочешь?) |
Да не тебя, это вообще пожелание Твину не читать всякую х, скажу тогда прямо
За стандарты нужно брать RFC, а PSR-7 попытка описать их с помощью интерфейсов каким-нибудь удобным способом. Ну суть асбтракции в этом и заключается, короче. Я хотел сказать что она не над фреймворками, а над исторически сложившейся реализацией протокола. А Твин хочет почему-то взять куоск кода из слима и вставить его в ларавел (или наоборот). Я не понял чего эт за прикол такой и зачем.
Кому не нравится PSR-7 тот может не юзать, это касается и всех других номеров, не только семерки. Люди сели, полагаю совсем не глупые и не вдвоём, хорошенько подумали и опубликовали рекомендации. Ребят, если вы им не доверяете, так можно еще дальше пойти. А почему вы доверяете PHP вообще? Апачу (нгинксу, лайти, you name it) пишите всё своё, RFC открыты, секрета из них никто не делает. Пожалуйста, в случае успеха можно стать суперзнаменитым. Можно вообще забить на RFC, влить тонну бабла, создать вендорное решение, как делают крупные игроки. Тоже вариант, чего.
Привел ссылку, откуда цитата из первого поста, ну где дичь про цели PSR-7 короче. )
Цитата (twin @ 31.03.2017 - 11:57) |
Вобщем никто этой фигней пользоваться не будет. В очередной раз попытка улучшить PHP снаружи не увенчалась успехом. Хотели как лучше, получилось как всегда. |
Я не соглашусь. PSR-7 как и идеологию которую он несёт - нужно понять. Как по мне за ним дальнейшее развитие php.
Очень хороший способ, проверить правильно ли ты применяешь PSR-7 это запустить свой проект под этой штукой
http://reactphp.org/. Моя поделка на нём запускается, но мне пришлось попыхтеть что бы он запускался. Но опять же в приложении уменьшилась вложенность и более просто можно отследить след выполнения.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Ron
Цитата |
Ребят, если вы им не доверяете |
Тут дело не доверии. PHP тоже не везде устраивает и не всех.
А так если рассуждать, то и joomla писал не один человек я думаю) давайте делать сайты на joomla чё) Зачем изобретать велосипед. Поналепили тут всяких vasya-symfony
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Цитата (Ron @ 31.03.2017 - 18:47) |
Слим позиционируется как фреймворк для созданий API (в первую очередь) |
Так какого же бяка в их реализации нет к примеру валидации заголовков на RFC? Но это лирика, это их дело.
Цитата (Ron @ 31.03.2017 - 20:08) |
Да не тебя, это вообще пожелание Твину не читать всякую х, скажу тогда прямо |
Вообще то это перевод
этой статьи O'Phinney.
Цитата |
One thing frameworks have been providing for many years is… HTTP message abstraction. PSR-7 aims to provide a common set of interfaces so that frameworks can use the same set of abstractions. This will enable developers to write re-usable, framework-agnostic web components that frameworks can consume — or, at least, that's what I would like to see! |
А уж этот чувак понимает толк в PSR-7. Он автор
этой либы, а это PSR-7 для ZEND-фреймворка, так, на секундочку. Если он не авторитет, то тогда я вообще не знаю что сказать.
Цитата (Ron @ 31.03.2017 - 20:08) |
Люди сели, полагаю совсем не глупые и не вдвоём, хорошенько подумали и опубликовали рекомендации. |
Да ты удивишься, если узнаешь, сколько бесполезных вещей придумали неглупые люди.
Цитата |
Самые большие глупости в мире делаются с серьезным выражением лица. (с) |
Цитата (Ron @ 31.03.2017 - 20:08) |
Ребят, если вы им не доверяете, так можно еще дальше пойти. |
Я не говорил, что я им не доверяю. Я говорю о том, что слишком много было шума вокруг этой рекомендации. А по сути это практически бесполезная вещь. Абстракции над REST давно реализованы практически во всех фреймворках. PSR-7 не внес ничего нового, просто попытался их унифицировать.
Никак это не отразится на внешних интерфейсах, даже если сейчас все повально примут его к действию. Все равно голый стандарт юзать никто не станет. Не для того фреймворки придуманы.
Цитата (chee @ 31.03.2017 - 20:13) |
Как по мне за ним дальнейшее развитие php. |
Ну эт ты, батенька, хватил.
Прямо PHP? А зачем оно для PHP вообще надо? Это чисто для разработчиков мулька, чтобы не нарушали RFC. Причем тут PHP...
Цитата (chee @ 31.03.2017 - 20:13) |
Моя поделка на нём запускается |
Дай позырить на твою реализацию?
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.