Skip to main content

PSR-7 and PSR-17 Implementation

PSR Standards Compliance

This package provides complete implementations of:

WebRequest implements the PSR-7 HTTP Message Interface specification, which provides interfaces for HTTP messages (requests and responses) and their components.

Components

Message Classes

ClassDescriptionImplements
MessageBase implementation for requests and responsesPSR-7 MessageInterface
RequestHTTP request implementationPSR-7 RequestInterface
ResponseHTTP response implementationPSR-7 ResponseInterface
ServerRequestServer-side HTTP requestPSR-7 ServerRequestInterface

Stream Implementations

ClassDescriptionUse Case
StreamBaseBase stream implementationBase class for all streams
MemoryStreamIn-memory streamString data, JSON payloads
FileStreamFile-based streamReading from files
TempFileStreamTemporary file streamLarge data that shouldn't stay in memory
NullStreamDiscards all dataTesting, ignoring response bodies
UploadedFileUploaded file handlerProcessing file uploads

Usage Examples

Creating a Request

<?php
$uri = \ByJG\Util\Uri::getInstanceFromString('http://www.example.com/page');
$request = \ByJG\WebRequest\Psr7\Request::getInstance($uri);

Creating a Response

<?php
$response = new \ByJG\WebRequest\Psr7\Response(200);
$response = $response->withBody(new \ByJG\WebRequest\Psr7\MemoryStream('{"key":"value"}'));

Working with Streams

<?php
// Create a memory stream
$stream = new \ByJG\WebRequest\Psr7\MemoryStream('Hello world');
echo $stream->getContents(); // "Hello world"

// Create a file stream
$stream = new \ByJG\WebRequest\Psr7\FileStream('/path/to/file.txt');

PSR-17 Factory Implementation

WebRequest also implements PSR-17 HTTP Factories for creating PSR-7 objects:

  • RequestFactory: Creates Request objects
  • ResponseFactory: Creates Response objects
  • ServerRequestFactory: Creates ServerRequest objects
  • StreamFactory: Creates Stream objects
  • UploadedFileFactory: Creates UploadedFile objects
tip

PSR-17 factories provide a standardized way to create PSR-7 objects, making your code more interoperable with other PSR-compliant libraries.

Usage example:

<?php
$factory = new \ByJG\WebRequest\Factory\RequestFactory();
$request = $factory->createRequest('GET', 'http://example.com');