tourze/json-rpc-endpoint-bundle
A Symfony bundle for building JSON-RPC endpoints, wiring request handling and service registration into your application so you can expose PHP services over a JSON-RPC API with minimal configuration.
What we actually know: The only artifact available for 2.0.0 is an auto-generated changelog link (1.0.0...2.0.0) with no commit summary, migration guide, or UPGRADE note. There is no prior assessment and no evaluation data in the record. This assessment is therefore a risk-framed placeholder built on the version signal itself, not on inspected code.
Architecture fit. The package name (json-rpc-endpoint-bundle) uses bundle terminology, which in PHP conventionally denotes a Symfony bundle rather than a Laravel package. If that inference holds, integration into a Laravel application is not a first-class path: it would require a bridge (Illuminate\Foundation\Application doesn't consume Symfony bundle Extension/CompilerPass registration), or a hand-rolled service provider that wires the endpoint registry, dispatcher, and middleware manually. That is the single largest unknown and it gates everything downstream. A JSON-RPC endpoint layer is otherwise a reasonable fit for internal service-to-service APIs where batch calls and strict error envelopes matter more than REST ergonomics.
Integration feasibility. Unverified. The critical unknowns are: (a) does a Laravel service provider ship in-box or in a sibling package; (b) what are the PHP and framework version floors; (c) does the endpoint dispatch on route registration, controller resolution, or a kernel event. Without the composer.json constraints and at least one entry point inspected, feasibility should be treated as unproven rather than likely.
Technical risk. Three concrete risks, in order:
-32600 body, not an exception in CI.tourze-namespaced bundle is a small-vendor package. Bus-factor and release cadence should be checked before it becomes load-bearing.Key questions to resolve before any adoption decision:
Illuminate\Support\ServiceProvider in the package?1.0.0...2.0.0 actually change? Enumerate BC breaks from the diff, not the notes.Stack fit. Provisional. The package appears to target a Symfony HTTP Kernel host, so a Laravel adoption is a bridging exercise, not a composer require + provider registration. Sequencing below assumes the bridge is required; if a native Laravel provider is confirmed to exist, steps 2 and 3 collapse and risk drops materially.
Migration path. There is no 1.0.0 footprint in this codebase to migrate from — this would be a greenfield adoption of 2.0.0. That is a favorable position: skip 1.0.0 entirely rather than treating it as a fallback, because pinning a version nobody has evaluated buys nothing. The real comparison is 2.0.0 against a hand-rolled controller or an existing JSON-RPC library, not against 1.0.0.
Compatibility. Unverified and the most likely place to lose time. Check composer.json for: PHP constraint vs. the app's, symfony/* constraints vs. the versions Laravel already resolves, and whether psr/* interfaces align. A dependency-resolution dry run (composer require --dry-run) answers this in minutes and should precede any design work.
Sequencing.
compare/1.0.0...2.0.0; produce a written list of BC breaks. Gate on this — do not start at step 2 until it exists.Steps 1–2 are cheap and should happen before any commitment is communicated to stakeholders.
Maintenance. Highest ongoing cost is the bridge. Any Laravel-major or Symfony-major upgrade requires revalidating that the manual wiring still holds — cost that a native package wouldn't impose. Track the bridge as first-party code with its own tests, not as glue.
Support. Upstream support is a small vendor; assume no SLA and no guaranteed response on protocol-conformance questions. If this becomes load-bearing, the team must be prepared to fork and maintain. That is a real budget line, not a hypothetical — size it before adoption.
Scaling. JSON-RPC layers are typically thin over the existing HTTP stack, so horizontal scaling characteristics should match the app's. Watch two things specifically: batch requests (a single batch can amplify one HTTP call into N handler invocations — a cheap DoS vector if batch size is unbounded) and per-method authorization overhead if implemented as a per-call policy lookup. Confirm the batch limit is configurable.
Failure modes. Ranked by likelihood and blast radius:
| Failure | Likelihood | Blast radius | Detection |
|---|---|---|---|
| Silent protocol break on dep upgrade (200 + error envelope, no exception) | Medium-High | High — clients fail without server-side alarms | Conformance tests in CI, not just unit tests |
| Symfony/Laravel dependency conflict blocks a framework upgrade | Medium | Medium — upgrade deferred, tech debt accrues | Dependency dry run at each framework bump |
| Unbounded batch amplification | Medium | Medium — resource exhaustion | Config review; rate limiting at the edge |
| Upstream abandonment | Low-Medium | High — fork required | Cadence monitoring, quarterly |
| Auth gap on newly added methods (fail-open default) | Unknown | High | Enumerate default-deny vs. default-allow explicitly |
The first row is the one to design around: JSON-RPC failures are structurally quiet. Any integration must ship with end-to-end protocol assertions in CI, because unit coverage will not catch an error-envelope change.
Ramp-up. Expect ~1 week for an engineer unfamiliar with both JSON-RPC 2.0 semantics and Symfony bundle internals to reach productive velocity; the bridge work in step 3 is the bulk of it. The protocol itself is small and well-specified — that is not the learning cost. Document the bridge decisions as they are made; they are the artifact future maintainers will need most and are the most likely to be skipped.
Recommendation. Hold pending the diff review and dependency dry run (steps 1–2, roughly half a day combined). The 2.0.0 signal is insufficient to approve or reject — a major bump with no notes is a reason to read the code, not a reason to avoid it. Re-issue this assessment with the BC-break list attached.
How can I help you explore Laravel packages today?