Pull to refresh

Comments 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; возьму на заметку :).

Sign up to leave a comment.

Articles