openclassrooms/service-proxy
A lightweight Laravel/PHP service proxy from OpenClassrooms that sits between your application and its services, centralizing calls behind a clean, testable interface so business logic stays decoupled from transport details. Useful for wrapping external APIs or internal service layers.
Architecture fit. openclassrooms/service-proxy is a thin abstraction layer whose purpose is to sit between application/domain code and outbound third-party service calls, exposing a stable contract while hiding the concrete client behind the container. That fits well in a Laravel codebase that already uses interface-driven service layers and needs swappable implementations (provider migration, test doubles, per-environment stubs). It fits poorly in a CRUD-heavy app where external calls are few and already isolated — the added indirection buys little and costs cognitive overhead.
Updated signal from v11.0.0 (chore: migrate phpdoc parser to v2). This release is small in diff but disproportionately informative:
@kletord) landing after v10.0.1 is the first concrete evidence of ongoing stewardship. It weakens — but does not eliminate — the abandonment concern, since a single chore PR is not a roadmap.phpDocumentor\Reflection to PHPStan\PhpDocParser, and typically a PHP floor of 8.1+) is a dependency-tree break for downstream consumers, and it can change how annotations are parsed — meaning generated proxies may behave differently without any obvious API change. Treat v11 as a compatibility event, not a patch.Integration feasibility. MIT-licensed, Composer-installable, and low-ceremony to wire into a Laravel service provider. The technical feasibility of trying it is high; the feasibility of committing to it is the real question. With zero stars, zero dependents, and a single-vendor origin, we would be the first meaningful adopter. That is acceptable for a spike, not for a load-bearing dependency without a fork plan. v11 makes the spike slightly cheaper (the package is alive) and the pin slightly riskier (a fresh major with no adopter base).
Technical risk.
Key questions. (1–6 unchanged; 7 replaced, 8 added.)
composer.json constraints (PHP, Laravel, illuminate/*)?Stack fit. Straightforward for Laravel 9–11 if the constraints allow it — v11's parser migration likely raises the PHP floor (8.1+ expected), so confirm against our oldest supported runtime before assuming a drop-in. It should install as a normal Composer dependency with an auto-discovered or manually registered service provider. If it turns out to be PSR-11-based rather than Laravel-specific, it also becomes usable in non-Laravel services, which raises its value for a polyglot or multi-runtime estate. Confirm it plays well with Octane, queued jobs, and Laravel's HTTP client before assuming a clean fit, and check whether phpdoc parsing occurs once at container build (acceptable) or per resolution (not acceptable).
Migration path. Do not rip out existing clients. Introduce the proxy behind a feature flag in a single bounded context, wrapping one low-risk external service (e.g. a non-critical enrichment or notification provider). Keep the current direct client as a fallback bound to the same contract so rollback is a config change, not a revert. If the package proves thin, the contract we wrote remains valuable even after we drop the library.
Compatibility. Pin an exact version — and deliberately choose between v10.0.1 and v11.0.0 rather than floating to latest: v10.0.1 is the version with whatever (unknown) field usage exists, v11.0.0 is newer but adopter-free. Run composer why/composer outdated in CI, check for conflicts with existing container bindings, facade aliases, and our PHPStan/PHP CS Fixer pins. Validate under the same PHP version matrix used in production, not just the default developer image. Watch for constraint drift: an abandoned package becomes the reason a framework upgrade is blocked, so treat the version constraint as a tracked liability. Re-check the release timeline to close out the future-dated-metadata question.
Sequencing.
composer.json at both v10.0.1 and v11.0.0, diff the parser-related code, run its test suite, wire one dummy service. Produce a one-page findings note answering the key questions above — especially Q7/Q8.Maintenance. Realistically we become the maintainers. With zero dependents, there is no upstream community to absorb framework-compatibility work. Budget for a fork-and-patch path, and assign a named owner in the platform team. Treat every Laravel major upgrade — and every phpdoc-parser major — as a checkpoint requiring a compatibility review of this dependency. v11 is a useful rehearsal of exactly that: a transitive parser major can force our hand with no functional change on our side.
Support. No vendor SLA. GitHub issues only, with unknown responsiveness; the recent maintainer PR is mildly encouraging but not a commitment. Internal support burden is on us: runbooks, an escalation path, and a documented decision record explaining why the dependency exists.
Scaling. The abstraction itself is cheap; the risk is an accidental extra hop if the proxy sits in front of the HTTP call rather than resolving it. Keep it as a resolver, not a forwarder. Verify singleton/registry behavior under Octane and long-running workers, and confirm nothing accumulates per-request state. At high call volume, the layer should be allocation-light and stateless — a per-resolution phpdoc parse would violate that, so measure cold-start and per-request cost explicitly.
Failure modes.
Ramp-up. Low for engineers already fluent in the Laravel container — expect roughly half a day to first productive use and one to two days to understand the source well enough to debug it, plus additional time now that docblock/annotation semantics are part of the mental model. Documentation is likely thin to nonexistent, so the real onboarding cost is reading the code and the decision record. Account for that in estimates, and require the pilot team to publish internal usage docs before broadening adoption.
TPM recommendation. Unchanged in direction, updated in nuance: Conditional — spike only, do not commit. v11.0.0 is the first evidence of live maintenance and it narrows the scope ambiguity in our favour of knowledge, but a major bump justified by an internal parser migration — with zero dependents and no upgrade notes — is exactly the sort of change that is invisible until it breaks us. Keep the default position of building a small internal abstraction unless the spike shows the package saves more than it costs to own. Refresh the star/dependent counts as part of the spike; the release notes supplied no metrics, so the adoption picture may have moved and we cannot tell from this input. The prior ~50 opportunity score holds: a plausible architectural pattern, now demonstrably maintained by one vendor, still with an unproven implementation behind it.
How can I help you explore Laravel packages today?