Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Service Proxy Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

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:

  • Scope is now partly answered. A phpdoc parser dependency means the package reads annotations/docblocks at runtime or build time to construct proxies — i.e. it is a generation/reflection-driven proxy, not merely a container alias. That is a materially different risk profile than "resolve and delegate": it implies codegen or reflection on hot paths, and behaviour that depends on our docblock discipline.
  • Maintenance is live. A PR from the original maintainer (@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.
  • A major version bump for a "chore" is a semver smell. Migrating phpdoc-parser to v2 (namespace move from 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.
  • No new adopter evidence. The release notes carry no metrics; stars/dependents were not refreshed. We still have no external corroboration that v11 works for anyone but the origin vendor.

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.

  • Abandonment: OpenClassrooms open-sources internal libraries that are frequently maintained only as long as an internal need persists. One recent PR is a data point, not a support commitment. No dependents means no community pressure to keep it current with new Laravel/PHP releases.
  • Release metadata: the previously observed future-dated release timestamp remains unexplained; the new tag does not resolve whether tags are real, reproducible artifacts. Verify checksums/tags before pinning.
  • Scope ambiguity (partially reduced): we now know phpdoc parsing is in the path. Still unresolved: does it own HTTP transport, retries/timeouts, or only proxy construction and interface resolution?
  • Parser coupling (new): our codebase's docblock hygiene now becomes an input to production behaviour. Inconsistent or missing annotations could degrade or silently alter proxy generation — a failure mode that looks like "the app is fine" until a specific service is called.
  • Transitive dependency surface (new): phpdoc-parser v2 pulls a PHPStan-ecosystem package and raises the PHP floor. That is a new conflict candidate with our static-analysis tooling and any pinned PHPStan/PHP CS Fixer versions.
  • Observability: proxy layers classically degrade tracing and error semantics if they swallow exceptions or normalize failures too aggressively.
  • Octane/queue safety: container-resolved or generated proxies with internal state can leak across requests under Swoole/Octane workers.
  • Hidden coupling: if the abstraction encodes OpenClassrooms' internal service conventions, adopting it imports their opinions — and now their annotation conventions — into our domain.

Key questions. (1–6 unchanged; 7 replaced, 8 added.)

  1. Is it published on Packagist, and what are the actual version tags and composer.json constraints (PHP, Laravel, illuminate/*)?
  2. Does it own HTTP transport (Guzzle / Laravel HTTP client / PSR-18) or only resolve and delegate to a client we supply?
  3. How are exceptions, retries, timeouts, and circuit-breaking surfaced to callers?
  4. What is the test coverage and CI posture? Are there published tests we can run locally?
  5. Is it framework-agnostic (PSR-11) or hard-bound to Laravel's container and facades?
  6. Who maintains it, and is there any stated support commitment or deprecation policy?
  7. New: What does the phpdoc parser actually drive — proxy class generation, runtime reflection, or only internal tooling (docs/linting)? Is any of it on the request hot path?
  8. New: What broke between v10.0.1 and v11.0.0 beyond the parser migration — PHP floor, annotation syntax accepted, generated-proxy output — and is there a changelog entry or upgrade note explaining why the major was required?

Integration Approach

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.

  1. Spike (2–5 days): clone, inspect 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.
  2. Build-vs-adopt decision: compare against a ~100-line internal interface + container binding. If the package's delta over that is marginal, build internally and avoid the dependency entirely. The phpdoc-parser finding makes this comparison more important, not less: if the parser is what the library is, we should know that before we take it on.
  3. Pilot: if adopted, one service, one team, feature-flagged, with tracing and error mapping verified end-to-end.
  4. Codify: document conventions (naming, error contracts, docblock/annotation requirements, stub usage in tests) before a second team touches it.
  5. Expand or exit: expand only after a full release cycle; otherwise archive the fork and revert to the internal abstraction.

Operational Impact

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.

  • Silent misconfiguration: the proxy resolves a default/stub implementation in production, and calls succeed against the wrong target. Mitigate with startup assertions that the bound implementation matches environment.
  • Annotation drift (new): an annotation- or docblock-driven proxy resolves differently because someone edited a docblock, renamed a type, or omitted a tag — a change no reviewer flags as behaviour-affecting.
  • Exception laundering: upstream errors normalized into generic exceptions, destroying retry and alerting signals.
  • Abandonment stranding: a Laravel upgrade blocked by an unpatchable constraint, forcing an emergency fork.
  • Dependency-tree break: the parser major collides with our static-analysis pins, forcing us to upgrade tooling on the dependency's schedule rather than ours.
  • Dependency confusion: no dependents means no external signal that a version is broken; failures surface only in our own traffic.
  • Test/production divergence: stub behavior diverging from real client behavior, so contract tests pass while production fails.

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.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource