Generates API Versioning pattern for PHP 8.4. Creates version resolution strategies (URI prefix, Accept header, query parameter), middleware, and deprecation support. Includes unit tests.
From accnpx claudepluginhub dykyi-roman/awesome-claude-code --plugin accThis skill uses the workspace's default tool permissions.
references/examples.mdreferences/templates.mdCreates API Versioning infrastructure with multiple resolution strategies and deprecation support.
| Scenario | Example |
|---|---|
| Breaking API changes | New response format |
| Multiple API consumers | Mobile v1, web v2 |
| Gradual migration | Sunset old versions |
| Backward compatibility | Support legacy clients |
Path: src/Domain/Shared/Api/
ApiVersion.php — Immutable version value objectVersionResolverInterface.php — Version resolution contractPath: src/Presentation/Middleware/
UriPrefixVersionResolver.php — URI path strategyAcceptHeaderVersionResolver.php — Content negotiation strategyQueryParamVersionResolver.php — Query parameter strategyCompositeVersionResolver.php — Composite strategyVersionMiddleware.php — PSR-15 middlewareDeprecationHeaderMiddleware.php — Deprecation/Sunset headersApiVersionTest.php — Value object testsUriPrefixVersionResolverTest.php — URI parsing testsAcceptHeaderVersionResolverTest.php — Header parsing testsVersionMiddlewareTest.php — Middleware behavior tests| Component | Path |
|---|---|
| ApiVersion | src/Domain/Shared/Api/ |
| VersionResolverInterface | src/Domain/Shared/Api/ |
| Resolvers | src/Presentation/Middleware/ |
| Middleware | src/Presentation/Middleware/ |
| Unit Tests | tests/Unit/ |
| Component | Pattern | Example |
|---|---|---|
| Version VO | ApiVersion | ApiVersion |
| Resolver Interface | VersionResolverInterface | VersionResolverInterface |
| Resolver | {Strategy}VersionResolver | UriPrefixVersionResolver |
| Composite | CompositeVersionResolver | CompositeVersionResolver |
| Middleware | VersionMiddleware | VersionMiddleware |
| Deprecation | DeprecationHeaderMiddleware | DeprecationHeaderMiddleware |
| Test | {ClassName}Test | ApiVersionTest |
final readonly class ApiVersion
{
public function __construct(
public int $major,
public int $minor = 0
) {
if ($this->major < 1) {
throw new \InvalidArgumentException('Major version must be at least 1');
}
}
public static function fromString(string $version): self;
public function toString(): string;
public function equals(self $other): bool;
public function greaterThan(self $other): bool;
}
interface VersionResolverInterface
{
public function resolve(ServerRequestInterface $request): ?ApiVersion;
}
// Create composite resolver
$resolver = new CompositeVersionResolver([
new UriPrefixVersionResolver(),
new AcceptHeaderVersionResolver(),
new QueryParamVersionResolver(),
]);
// Middleware adds version to request attributes
$middleware = new VersionMiddleware($resolver, defaultVersion: new ApiVersion(1));
// In action/controller
$version = $request->getAttribute('api_version');
if ($version->greaterThan(new ApiVersion(1))) {
return $this->respondV2($data);
}
| Strategy | URL Example | Pros | Cons |
|---|---|---|---|
| URI Prefix | /v1/orders | Explicit, cacheable | URL changes per version |
| Accept Header | Accept: application/vnd.api.v1+json | Clean URLs | Complex client setup |
| Query Param | /orders?version=1 | Simple to test | Not RESTful, caching issues |
| Anti-pattern | Problem | Solution |
|---|---|---|
| Version in Body | Hard to route | Use URI/header/query |
| Unlimited Versions | Maintenance burden | Deprecation policy |
| No Default Version | Breaks existing clients | Configure default |
| Breaking Without Version | Client disruption | Always version breaking changes |
| No Deprecation Notice | Surprise removal | Deprecation/Sunset headers |
| Copy-Paste Controllers | Duplicated code | Version-aware routing |
For complete PHP templates and examples, see:
references/templates.md — ApiVersion, resolvers, middleware, deprecation templatesreferences/examples.md — Framework integration and testsProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.