happyr/linkedin-api-client
A PHP client for the LinkedIn API that handles OAuth authentication and simplifies posting, profile access, and other v2 endpoints, giving Laravel and plain PHP apps a clean, framework-agnostic wrapper around LinkedIn's REST API.
Evidence base and confidence. The only artifact available for this assessment is the 1.0.0 release note: "Removed php-http/message from composer.json." No prior assessment, repository metadata, source diff, changelog, or test results were supplied. Everything below is therefore a structured hypothesis to be validated against the package's composer.json, CHANGELOG, and CI matrix before any adoption decision. Confidence in the specific claims is low-to-moderate; confidence in the questions that must be answered is high.
What the change most likely means. php-http/message is the php-http ecosystem's PSR-7 message/stream implementation and factory package, and it transitively pulls php-http/message-factory (long deprecated) and psr/http-message 1.x. Removing it from composer.json typically signals one of three things:
psr/http-factory (PSR-17) for factory injection instead of the concrete php-http factories. This is the modern, and most probable, trajectory for a Laravel HTTP-adjacent package.Cases 1 and 2 are low risk. Case 3 is a breaking change that would normally warrant a major-version bump — which the jump to 1.0.0 would conveniently absorb.
Architecture fit. For a Laravel application the relevant seam is Guzzle 7 / Illuminate\Http\Client, which is PSR-7 v2-compatible and no longer requires php-http/message. If this package is aligning to that baseline, it reduces the chance of psr/http-message version conflicts in the root project and removes the deprecated message-factory branch from the dependency graph. That is a net architectural improvement — fewer moving parts, one fewer deprecated package in the SBOM.
Integration feasibility. Composer-level integration is trivial: composer require and resolve. The feasibility question is not installation but runtime behavioural parity. Removing a dependency from composer.json cannot break the library's own tests unless they were silently relying on transitive autoloading — but it absolutely can break the consumer's build if the consumer's code or another dependency was leaning on php-http/message being present transitively. Transitive dependency reliance is common in Laravel codebases that use Http:: facades or Guzzle middleware and incidentally use Http\Message\... classes without declaring them.
Technical risk. Ranked:
Http\Message\MessageFactory, Http\Message\StreamFactory, or Http\Message\Authentication without a direct require will fail at autoload with a class-not-found error after upgrade. This is the dominant risk and it is invisible until runtime.psr/http-message ^2.0, any code type-hinting Psr\Http\Message\MessageInterface and also pinned to a 1.x-only consumer (older Guzzle, some SDKs) will hit an unsatisfiable Composer constraint. composer why-not psr/http-message 1.0 is the diagnostic.Key questions for the maintainer (or for a spike to answer).
php-http/message genuinely unused, or has the abstraction changed?psr/http-message move to ^2.0? What is the resulting constraint set?http-factory, a Laravel-native Illuminate\Http\Client path, or nothing?--prefer-lowest job is the tell for whether constraint combinations are actually tested.composer audit in CI?Stack fit. This package is a plausible fit for a Laravel 10/11 codebase on PHP 8.1+ where the HTTP layer already runs through Guzzle 7.5+ or Illuminate\Http\Client. It is a poor fit if the application is on Laravel 8/9 with an older Guzzle pinned to PSR-7 1.x, or if other dependencies still depend on php-http/message-factory. Establish the target stack before evaluating anything else.
Migration path. Three-phase, cheap:
vendor/ for Http\Message\, Http\Discovery\, and php-http. Run composer why php-http/message against the current lock file to identify which packages pull it in and whether any of them are this package.--dry-run first, then resolve. Inspect the resulting diff of composer.lock focusing on psr/http-message, guzzlehttp/psr7, php-http/*, and symfony/*. A clean resolve with no unrelated downgrades is the strongest early signal.Compatibility. Two axes to pin down and record explicitly: PHP version floor and Laravel version ceiling/floor. Also check whether the package declares illuminate/support with a broad constraint or a tight one — broad constraints (^9.0|^10.0|^11.0) age well; exact pins do not. Verify the package does not itself carry a hard pin on psr/http-message that constrains the wider graph.
Sequencing. This is a low-blast-radius change and does not need to be gated behind other work. Recommended order:
Http\Message\* directly, either add php-http/message as an explicit direct dependency in the root composer.json (pinning it deliberately rather than inheriting it) or refactor those call sites to PSR-17/PSR-18. The former is a one-line unblock; the latter is the correct long-term fix and should be scheduled separately.Maintenance. Net positive. Removing php-http/message prunes a deprecated transitive branch (message-factory) that otherwise generates recurring Dependabot noise and security-advisory triage for code you do not call. Fewer transitive packages also means a smaller SBOM, which matters if the organisation has supply-chain attestation or SLSA-style requirements. Confirm the dependency is not re-introduced transitively via another path — composer show --tree php-http/message after upgrade is the check.
Support. Low support surface: this is a composer-level change with no runtime configuration, no new env vars, no migrations, no queue/worker implications. The support burden is concentrated entirely in the upgrade window — expect a small number of "Class 'Http\Message...' not found" tickets from teams with stale branches, and pre-empt them with a one-paragraph internal release note naming the removed package.
Scaling. Neutral. Removing a message-factory package does not affect throughput, memory, connection pooling, or worker concurrency. If the package sits on a request hot path, the PSR-7 message construction cost is unchanged in kind; only the concrete implementation may differ. There is no horizontal-scaling concern here.
Failure modes. Enumerate them for on-call:
psr/http-message 1.x vs 2.x conflict. Symptom: composer update fails with a dependency-graph explanation. Fix: unpin the conflicting downstream dependency, or composer why-not.composer.lock change. Keep the branch so rollback is a revert, not a re-derivation.Ramp-up. Minimal engineering onboarding cost; there is no new concept to learn in the low-risk interpretations. Budget roughly half a day for a competent PHP engineer: 1–2 hours for the static-analysis spike, 1–2 hours for the branch upgrade and CI run, 1–2 hours for targeted behavioural tests if coverage is thin. Add one to two days contingency if the maintainer's answer to question 1 is that the abstraction changed (interpretation 3) — in that case this is a real API migration and should be re-estimated with the actual diff in hand. TPM action: treat this as a routine dependency-hygiene upgrade with a cheap verification gate, and only escalate if the static-analysis spike finds direct Http\Message\* usage in first-party code.
How can I help you explore Laravel packages today?