Skip to content

Latest commit

 

History

History
94 lines (69 loc) · 2.07 KB

File metadata and controls

94 lines (69 loc) · 2.07 KB

Request and Response

liquidrazor/http-contracts provides the public HTTP request and response contracts in include/ and immutable default implementations in lib/.

Request

Contract:

  • LiquidRazor\HttpContracts\Include\Contract\HttpRequestInterface

Default implementation:

  • LiquidRazor\HttpContracts\Lib\Request\HttpRequest

Implemented request accessors:

  • method(): string
  • uri(): UriInterface
  • path(): string
  • queryParams(): array
  • headers(): HeaderBagInterface
  • cookies(): array
  • body(): ?string
  • requestBody(): RequestBodyInterface
  • uploadedFiles(): array
  • attributes(): array
  • protocolVersion(): string

The request object does not:

  • read PHP globals
  • read php://input
  • perform routing
  • perform validation
  • perform authorization

Response

Contract:

  • LiquidRazor\HttpContracts\Include\Contract\HttpResponseInterface

Default implementation:

  • LiquidRazor\HttpContracts\Lib\Response\HttpResponse

Implemented response accessors:

  • statusCode(): int
  • reasonPhrase(): string
  • headers(): HeaderBagInterface
  • body(): ?string
  • cookies(): array
  • protocolVersion(): string
  • attributes(): array

The response object does not:

  • emit headers
  • write output
  • terminate execution

Example

<?php

declare(strict_types=1);

use LiquidRazor\HttpContracts\Include\Enum\RequestBodyType;
use LiquidRazor\HttpContracts\Lib\Request\HeaderBag;
use LiquidRazor\HttpContracts\Lib\Request\HttpRequest;
use LiquidRazor\HttpContracts\Lib\Request\RequestBody;
use LiquidRazor\HttpContracts\Lib\Request\Uri;
use LiquidRazor\HttpContracts\Lib\Response\HttpResponse;

$request = new HttpRequest(
    method: 'POST',
    uri: new Uri(path: '/contracts'),
    path: '/contracts',
    headers: new HeaderBag(['Content-Type' => 'application/json']),
    requestBody: new RequestBody(
        type: RequestBodyType::JSON_ASSOCIATIVE,
        raw: '{"name":"LiquidRazor"}',
        parameters: ['name' => 'LiquidRazor'],
    ),
);

$response = new HttpResponse(
    statusCode: 201,
    reasonPhrase: 'Created',
    body: '{"ok":true}',
);