Claude-skill-registry acc-create-psr7-http-message
Generates PSR-7 HTTP Message implementations for PHP 8.5. Creates Request, Response, Stream, Uri, and ServerRequest classes with immutability. Includes unit tests.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/acc-create-psr7-http-message" ~/.claude/skills/majiayu000-claude-skill-registry-acc-create-psr7-http-message && rm -rf "$T"
manifest:
skills/data/acc-create-psr7-http-message/SKILL.mdsource content
PSR-7 HTTP Message Generator
Overview
Generates PSR-7 compliant HTTP message implementations following
Psr\Http\Message interfaces.
When to Use
- Building custom HTTP framework
- Creating lightweight HTTP message handling
- Need for immutable request/response objects
- Testing HTTP interactions
Generated Components
| Component | Interface | Location |
|---|---|---|
| Request | | |
| Response | | |
| ServerRequest | | |
| Stream | | |
| Uri | | |
| UploadedFile | | |
Quick Template: Response
<?php declare(strict_types=1); namespace App\Infrastructure\Http\Message; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\StreamInterface; final readonly class Response implements ResponseInterface { private const PHRASES = [ 200 => 'OK', 201 => 'Created', 204 => 'No Content', 400 => 'Bad Request', 401 => 'Unauthorized', 403 => 'Forbidden', 404 => 'Not Found', 500 => 'Internal Server Error', ]; public function __construct( private int $statusCode = 200, private string $reasonPhrase = '', private array $headers = [], private StreamInterface $body = new Stream(''), private string $protocolVersion = '1.1', ) {} public function getStatusCode(): int { return $this->statusCode; } public function getReasonPhrase(): string { return $this->reasonPhrase; } public function getHeaders(): array { return $this->headers; } public function getBody(): StreamInterface { return $this->body; } public function withStatus(int $code, string $reasonPhrase = ''): static { return new self($code, $reasonPhrase ?: (self::PHRASES[$code] ?? ''), $this->headers, $this->body, $this->protocolVersion); } public function withHeader(string $name, $value): static { $headers = $this->headers; $headers[strtolower($name)] = is_array($value) ? $value : [$value]; return new self($this->statusCode, $this->reasonPhrase, $headers, $this->body, $this->protocolVersion); } public function withBody(StreamInterface $body): static { return new self($this->statusCode, $this->reasonPhrase, $this->headers, $body, $this->protocolVersion); } // ... other MessageInterface methods }
Usage Example
<?php use App\Infrastructure\Http\Message\Response; use App\Infrastructure\Http\Message\Stream; // Create response $response = new Response(200); $response = $response ->withHeader('Content-Type', 'application/json') ->withBody(new Stream(json_encode(['status' => 'ok']))); // Read response echo $response->getStatusCode(); // 200 echo $response->getHeaderLine('Content-Type'); // application/json echo (string) $response->getBody(); // {"status":"ok"}
Requirements
{ "require": { "psr/http-message": "^2.0" } }
See Also
- Full Response, Stream, Uri, Request, ServerRequest, UploadedFile templatesreferences/templates.md
- Integration examplesreferences/examples.md