Комментарии 14
Она разработана без привязки к Symfony
Все-таки yoanm/symfony-jsonrpc-http-server
— это бандл для симфони, он очень даже привязан к ней. Речь наверное про yoanm/jsonrpc-server-sdk
Как раз планирую статью про Symfony 4 и Sonata Admin. Там будут и про авторизацию с аутентификацией.
Самое лучшее, на мой дилетантский взгляд, это передача токена авторизации в метод. Можно, конечно, воспользоваться заголовками запроса, но json-rpc всё-таки транспортно-независимый протокол.
Все зависит от того, что это за токен. Если токен является неотъемлемым параметром некоего конкретного метода — тогда передавать параметром метода. А если токен на вообще доступ к данному API, тогда в заголовке самое то: в этом случае авторизация лежит вне скоупа json-rpc.
Самый просто способ и логичный это заголовок Authorization. В нем уже можно передавать все что нужно, будь то Basic метод, OAuth или JWT.
Не понял только, зачем здесь swagger, он на rpc ну вообще не ложится… Есть же SMD. sergeyfast даже как-то предлагал инструменты для визуализации
Ещё бы научить всё это асинхронной обработке методов при batch-запросах, чтобы можно быть не ждать, пока обработается уведомление (потому что оно всё равно не ответит), чтобы время ответа соответствовало обработке самого долгого метода...
Можно класть notifications (запросы без ID), пришедшие в батчах по HTTP в очередь — вот прямо jsonrpc-запросами как есть, а фоновым процессом очередь грести и каждый ее элемент обрабатывать тем же самым JSON RPC сервером: ему ж должно быть без разницы, какой транспорт.
Для Laravel у меня есть вот такой велосипед, может, кому пригодится.
Кстати, отвязать его от Laravel совсем несложно. Я для нового проекта активно посматриваю на SF4, скорее всего, так и сделаю. Заменить Middleware/Pipelines на PSR-15 несложно, но еще надо придумать, что делать с FormRequests (которые у меня сейчас завязаны на illuminate/validation и сделаны по аналогии с Laravel-овскими).
Не, ну в Laravel все не так плохо, гвоздями прибито намного меньше. Но косяков с этим хватает, многие интерфейсы, хоть формально и присутствуют, на самом деле зачастую просто дублируют фактический интерфейс конкретной реализации со всеми ее особенностями, и, чтобы заменить реализацию, временами приходится писать довольно костыльные адаптеры. Особенно это ощущается, когда берешь за основу Lumen и хочешь реюзать только часть Laravel-овских библиотек.
Основные претензии у меня к Eloquent, с которым следовать DDD и CQRS довольно затруднительно (да даже нормально заперсистить Aggregate Root можно только чудовищными костылями). Был странноватый, но в целом неплохой Analogue ORM, но его забросили. Доктрину, впрочем, тоже недолюбливаю за ее монстроузность: меня пугает такая масса сложного кода и архитектура с God Object-ом. Прочитал вот в дайджесте про Cycle ORM, наверное, это то, что мне надо.
Работа с JSON RPC в Symfony 4