Процессоры в RESTful API: использовать нельзя выбросить
При планировании разработки механизма RESTful API была идея использовать стандартные процессоры. Плюсы очевидны — готовый код для CRUD с проверками прав и лексиконами. Кроме того, более простая интеграция с дополнениями. Ведь они тоже работают через процессоры. Т.е. их серверную часть переписывать не нужно. По крайней мере, не всю.
Ответ кодируется в JSON со своим форматом. А значит его нужно раскодировать. Получается двойная работа: массив -> json -> массив.
В работе процессора заложено множество проверок с выводом ошибок — проверка прав доступа, beforeQuery(), beforeSave(),saveObject(), beforeRemove(), обработка результатов работы плагинов и т.д. И все они выводят просто сообщение без кода ошибки. Т.е. нельзя отличить ошибку «Permission denied», у которой код 403, от любой другой четырёхсотой.
Механизм процессоров, насколько я могу судить, в двойке и тройке отличаются. Т.е. данный компонент будет зависеть от версии. Хоть я и не верю в выход третьей версии, всё же я не отрицаю тот факт, что это не зависит от моей позиции. Поэтому нужно универсальное решение. Не увидел отличий.
Ну и наконец, сам код, который безумно далёк от современных стандартов. А местами и попахивает.
Это из того, что лежит на поверхности. Уверен, дальше возникнут ещё моменты. Но главный вопрос следующий — стоит ли всё-таки использовать процессоры? С одной стороны плюсы сильно сокращают количество работы. С другой — решение будет не полностью соответствовать стандартам PSR и JSON:API. Ну и полностью не соответствовать главной идее — максимально дистанцироваться от ядра, чтобы не зависеть от «хозяев» MODX.
Ох, как сейчас не хватает голосовалки. В общем, попробую сформулировать вопросы:
Что смущает?
В некоторых базовых и пользовательских процессорах заложена специфика ExtJs. Не критично, но загрязняет код.Ответ кодируется в JSON со своим форматом. А значит его нужно раскодировать. Получается двойная работа: массив -> json -> массив.
В работе процессора заложено множество проверок с выводом ошибок — проверка прав доступа, beforeQuery(), beforeSave(),saveObject(), beforeRemove(), обработка результатов работы плагинов и т.д. И все они выводят просто сообщение без кода ошибки. Т.е. нельзя отличить ошибку «Permission denied», у которой код 403, от любой другой четырёхсотой.
Ну и наконец, сам код, который безумно далёк от современных стандартов. А местами и попахивает.
Это из того, что лежит на поверхности. Уверен, дальше возникнут ещё моменты. Но главный вопрос следующий — стоит ли всё-таки использовать процессоры? С одной стороны плюсы сильно сокращают количество работы. С другой — решение будет не полностью соответствовать стандартам PSR и JSON:API. Ну и полностью не соответствовать главной идее — максимально дистанцироваться от ядра, чтобы не зависеть от «хозяев» MODX.
Ох, как сейчас не хватает голосовалки. В общем, попробую сформулировать вопросы:
- Использовать процессоры как есть.
- Писать свои процессоры на основе modProcessor.
- Вообще не использовать механизм процессоров. Писать свой механизм по стандартам PSR с использованием шаблонов проектирования.
- Хозяин — барин. Делай как считаешь нужным.
Поблагодарить автора
Отправить деньги
Комментарии: 17
Ну как минимум нужен какой то механизм проверки прав и механизм вызова событий.
Про права я писал тут. Насчёт вызова событий нужно подумать. Это зависит от реализации.
Думаю, что использовать стоит, по крайней мере в тех местах, где они хорошо отрабатывают.
Просто для того, чтобы максимально быстро достичь некоего рабочего этапа.
Если процессор позволяет выполнить действие — пусть работает.
А если не позволяет, значит идти другим путем, писать самому это действие.
Просто для того, чтобы максимально быстро достичь некоего рабочего этапа.
Если процессор позволяет выполнить действие — пусть работает.
А если не позволяет, значит идти другим путем, писать самому это действие.
Думаю, это не очень правильный подход. Или одно или другое.
Я к тому, чтобы максимально быстро выпустить некое решение рабочее.
Боюсь большой объем работы просто застопорит все.
Кстати, если писать с нуля, ну по факту будут написаны аналоги процессоров, просто с другими «что смущает», которые будут подогнаны именно под это апи.
Боюсь большой объем работы просто застопорит все.
Кстати, если писать с нуля, ну по факту будут написаны аналоги процессоров, просто с другими «что смущает», которые будут подогнаны именно под это апи.
Боюсь большой объем работы просто застопорит все.Это да. Особенно когда свободного времени мало. Но я вижу причины для чего так срочно нужно выпустить решение с костылями. В крайнем, лучше сделать копи/паст по всем правилам современной разработки.
* не вижу причины
По мне лучше 3-й вариант. Так точно ни на что завязано не будет
Я тоже за 3 вариант, так как попытки обратной совместимости и вообще какой либо совместимости со старым возом ни к чему хорошему в MODX уже точно не приведут. Нужен смелый рывок вперёд — и так у компонента будет больше шансов на долгую жизнь и более широкую сферу применения.
По поводу 1 варианта, он может хорошо выстрелить, так как можно будет очень быстро сделать рабочее решение на современных фреймворках + все имеющиеся дополнения MODX. То есть тот же miniShop2 заюзать, например, с react или vue. Вся логика бэка уже написана, посылай только rest запросы и будет счастье. Но это опять тянет за собой совместимость, от которой в данном случае, я считаю, нужно отказаться.
По поводу 1 варианта, он может хорошо выстрелить, так как можно будет очень быстро сделать рабочее решение на современных фреймворках + все имеющиеся дополнения MODX. То есть тот же miniShop2 заюзать, например, с react или vue. Вся логика бэка уже написана, посылай только rest запросы и будет счастье. Но это опять тянет за собой совместимость, от которой в данном случае, я считаю, нужно отказаться.
Только 3й вариант, только свои процессоры. Чтобы всё завязано было именно на них с самого начала.
Но и они могут у себя где-то внутри вызывать процессоры MODX для работы. Это даст быстрый старт, а потом эти места можно будет улучшить и переписать.
Но и они могут у себя где-то внутри вызывать процессоры MODX для работы. Это даст быстрый старт, а потом эти места можно будет улучшить и переписать.
Я тоже склоняюсь за третий вариант.
А под своими процессорами ты имеешь ввиду свои, но наследники modProcessor, или вообще свой механизм?
Просто ты ответил немного неопределённо —
П.С. Надо было сделать четыре комментария с каждым вариантом и за них голосовать. Эмулировать опрос. Стормозил чутка.
Просто ты ответил немного неопределённо —
Только 3й вариант, только свои процессоры.То ли за третий, то ли за второй.
П.С. Надо было сделать четыре комментария с каждым вариантом и за них голосовать. Эмулировать опрос. Стормозил чутка.
Не наследники, полностью свои процессоры, которые могут вызывать что-то из MODX, когда им это нужно.
Голосование ни к чему, решать всё равно тебе.
Голосование ни к чему, решать всё равно тебе.
Ненавижу такие заголовки.
Ненавижу такие комментарии.
Это сообщение было удалено
Это сообщение было удалено
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.