Проблематика
Многие сервисы (а-ля внешние CRM) предоставляют возможность использовать webhooks. Там можно регулировать URL, заголовки, но нельзя регулировать состав и формат отправляемых данных. Как следствие, использование штатного API того же Shop-Script не представляется возможным. Вариант использовать URL во фронте предлагаю признать априори унылым, т.к. если допустить что есть некая абстрактная система, потребности которой на 80% покрываются штатным API, то для полного покрытия придется использовать для одних операций - один URL/способ авторизации/ и пр, для других - другие.
В то же время, в фреймворке сейчас отсутствует какая-либо легальная возможность расширения перечня методов API плагинами.
Предложение
Предлагаю рассмотреть возможность внедрения в фреймворк инструмента, позволяющего легально плагинами расширять перечень методов API приложения, согласиться с ней, и реализовать в одном из обновлений
Для затравки
- При поступлении запроса по API "собирать" доп.методы из плагинов приложения, которые размещены, например, в подкаталоге api основного каталога плагина
- При поступлении запроса по api до момента его обработки вызывать некий хук, на который можно будет подсадить плагин для ручной инициализации классов дополнительных методов API
6 комментариев
Дико плюсую. Очень нужная вещь. Можно сказать что без нее встроенный api бесполезен т.к., если нам что-то нужно в таком ключе, мы реализуем все сразу чтобы не скакать по разным путям. И получается один плагин со своим api, другой со своим итд.
Плюсую еще раз. По факту мне приходится править shop-script добавляя методы.
Если один и тот же метод api вызывается для разных вебхуков, то нужно как-то понять какой плагин должен отработать. Можно добавить вызов событий *.beforeExecuteApiMethod (где * - имя метода api без префикса с именем приложения и суффикса "Method" т.е. для метода shopCategoryAddMethod будет вызвано событие сategoryAdd.beforeExecuteApiMethod) в waAPIController::execute().
Давать доступ сторонним приложениям к api чревато т.к. при вызове методов api проверяется только доступ к backend у пользователя. В методах api того же shop практически нет проверки конкретных прав доступа т.е. можно вызывать например shopCategoryDeleteMethod.
На мой взгляд проще просто добавить в плагин свои методы api которые будут вызываться через вебхуки и уже в них модифицировать данные и вызывать нужные методы api приложений, это быстрее чем вызывать событие как описано выше. Нужно только не забыть добавить права доступа для плагина (см. событие rights.config в shop) и проверять их в своих методах (waAPIMethod::getRights())!
То что по этой ссылке работает в последнем фрейме? Может с тлф не вижу и завтра внимательней гляну, но вроде так пробовал, и фрейм на момент отработки запроса по api просто не видел еще этих классов, ну и ругался соответственно.
должно работать, главное чтобы класс метода был в wa-apps/.../plugins/.../lib/classes/ + кеш нужно сбросить чтобы переиндексировался список классов
Вроде помнил обо всем этом, но пару раз попробовал - фиг, фрейм не знал такого класса. Собственно, поэтому топик и создал.
А попробовал сейчас - все норм. Видимо все же где-то напортачил когда в первый раз пробовал.
Спасибо =)
Ну а тему можно закрывать, т.к. есть легальный и нормальный способ расширения API приложений.