Комментарии 11
Если не обращать внимание на отсутствующий тег "я пиарюсь", в начале статьи хотелось бы видеть какой-то мотивационный текст - зачем нам нужно установить именно этот бандл с 14 инсталляциями?
Чем он отличается от существующих, для решения каких проблем создан, что делает лучше существующих решений, что еще не делает (но несомненно будет) и т.д.
А чего, пиариться плохо что ли? ))) Для меня в целом это небольшое достижение, что появился собственный бандл, которым можно поделиться с другими разработчиками, потому что до этого не было такой ни возможности ни темы для библиотеки. Поэтому... Да, немного похвастался XD
А какие есть другие решения я просто не нашел на самом деле. Для себя искал и в целом не нашёл... Поэтому и написал себе сам )))
Есть и другие решения - свои голова и руки
Получается для реализации простейшего Json RPC API вам потребуется создать всего 3 класса.
Реализация конкретно этого кода на чистом PHP и JSON-RPC составляет вообще-то около 10 строк. Еще строк 50 - реализация роутинга методов JSON-RPC.
Также советую для авторизации для передачи токена использовать параметры запроса JSON-RPC - то есть, не привязываться к транспортному протоколу (хедерам HTTP) вообще.
Но за JSON-RPC всячески голосую - очень удобная вещь. На самом деле, JSON-RPC делает ненужным бэкенд фрейворк, за исключением библиотеки доступа к БД
И в файлике config/services.yaml в секцию services добавить раздел с той папкой, которая предполагается для реализации всех ваших дальнейших методов API.
Лишний шаг, т.к. у вас все равно на эти методы навешиваются аттрибуты. В OVJsonRPCAPIBundle::build
можно сделать что-то вроде
$container->registerAttributeForAutoconfiguration(
JsonRPCAPI::class,
function (ChildDefinition $definition, JsonRPCAPI $attribute) {
$tagAttributes = get_object_vars($attribute);
$definition->addTag('ov.rpc.method', $tagAttributes);
}
);
MethodSpecCollection
в идеале заменить на ServiceLocator
, чтобы не инициализировать все методы при каждом запросе
P.S. Почему выбрали gitflic в качестве хранилища? У меня он composer.json
как-то странно рендерит.
Спасибо большое за рекомендации, попробую применить.
По поводу MethodSpecCollection и инициализации при каждом запросе - мне вроде как казалось, что в прод окружении это всё кэшируется и как раз таки билд происходит только раз при прогреве кэша, а дальше все это каждый раз не прогоняется как раз таки. Разве нет?
По поводу gitflic - да в целом несколько причин, поддержать отечественного производителя, хорошие ребята, знаком с создателями сервиса довольно тесно. ))) Поэтому и зашёл к ним. Раньше хостил код на bitbucket, но он начал хворать, поэтому перенес всё оттуда. )))
По поводу MethodSpecCollection и инициализации при каждом запросе
Речь не про компиляцию, а рантайм. Условно в вашем случае результирующий код будет такой:
$collection = new MethodSpecCollection();
$collection->addMethodSpec('foo', $container->get(FooMethod::class));
$collection->addMethodSpec('bar', $container->get(BarMethod::class));
// И так 100500 раз
В итоге коллекция будет хранить все инстансы, при том что в один момент времени они нам все не понадобятся.
В случае в локатором будет что-то вроде:
$serviceLocator = new ServiceLocator();
$serviceLocator->addMethodSpec('foo', fn () => $container->get(FooMethod::class));
$serviceLocator->addMethodSpec('bar', fn () => $container->get(BarMethod::class));
// И так 100500 раз
т.о. они будут отрезолвлены в методе get
Как легко и быстро развернуть API на фреймворке Symfony с уже встроенной валидацией и авторизацией по токену?
Использовать API Platform?
Мне не зашло - слишком громоздко для меня. Мне не нужны круды и много чего не нужно оттуда. Соответственно зачем мне держать весь этот неиспользуемый код?
может затем, что кроме вас никто ваш код не знает и разбираться в нем не имеет смысла, когда можно установить API Platform, с которым либо все знакомы либо имеет смысл знакомиться? И который поддерживатся огромным сообществом.
Эти кастомные бандлы с один разработчиком никому кроме одного разработчика и не нужны, если они не представляют чего-то уникального.
Не понял в чем кайф этого бандла, но вот запись формата $this->id = $id;
возьму на заметку :).
Symfony Json RPC API Bundle — простое API со всем необходимым