PHPackages                             woss/http - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. woss/http

ActiveLibrary

woss/http
=========

0.1.0(7y ago)03MITPHPPHP ^7.3

Since Feb 8Pushed 7y ago1 watchersCompare

[ Source](https://github.com/acwoss/woss-http)[ Packagist](https://packagist.org/packages/woss/http)[ RSS](/packages/woss-http/feed)WikiDiscussions master Synced 2mo ago

READMEChangelog (1)Dependencies (1)Versions (2)Used By (0)

woss/http [![Build Status](https://camo.githubusercontent.com/d495f35779a13e533032f324dec19d4118c37dae899582037d52b43d0070bf9d/68747470733a2f2f7472617669732d63692e6f72672f6163776f73732f776f73732d687474702e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/acwoss/woss-http)
=========================================================================================================================================================================================================================================================================================

[](#wosshttp-)

> Não, não é mais um framework PHP.

O pacote `Woss\Http` é um compilado de classes que visam facilitar o trabalho sobre o protocolo HTTP na linguagem PHP, deixando de forma transparente e explícita o que acontece na aplicação e permitindo testes unitários mais simples.

São previstos três *namespaces* dentro do pacote, sendo eles:

- `Woss\Http\Message`, com classes para se trabalhar com mensagens HTTP;
- `Woss\Http\Server`, com classes que facilitam o desenvolvimento da aplicação;
- `Woss\Http\Client`, com classes para requisições externas;

Instalação
----------

[](#instalação)

A maneira mais simples é fazer a instalação via Composer:

```
$ composer install woss/http

```

Aplicação
---------

[](#aplicação)

A aplicação construída com `Woss\Http` seguirá o conceito de *middlewares*, onde há a distinção e separação clara das responsabilidades entre cada componente da aplicação. A requisição HTTP se propagará através de uma arquitetura *pipe* até o momento que a resposta HTTP for gerada.

A arquitetura *pipe* suporta três entidades básicas:

1. Funções anônimas `function (Request $request, $next): Response)`;
2. Classes *handlers* que implementam o método `handle(Request $request): Response`;
3. Classes *middlewares* que implementam o método `process(Request $request, $next): Response`;

### Funções anônimas

[](#funções-anônimas)

A entidade baseada na função anônima possui dois parâmetros: `$request`, que representará a requisição HTTP de entrada, e `$next`, que representará a próxima entidade da *pipe*. O retorno deve ser sempre uma instância de `Response`.

```
use Woss\Http\Message\{Request, Response};

function (Request $request, $next): Response
{
    log('debug', (string) $request);

    $response = $next($request);

    log('debug', (string) $response);

    return $response;
}
```

### Classes *Handlers*

[](#classes-handlers)

As classes *handlers* são características por implementarem o método `handle`, que recebe apenas um parâmetro, `$request`, que representará a requisição HTTP de entrada, e gerando uma instância de `Response`. Diferente das funções anônimas e das classes *middlewares*, uma classe *handler* não possui autonomia para propagar a requisição pela *pipe*, então obrigatoriamente ela deverá gerar uma resposta HTTP. Assim, é comum vermos as classes *handlers* apenas no final da *pipe*.

```
use Woss\Http\Message\{Request, Response, Stream};

class ListAllUsers
{
    public function __construct($users)
    {
        $this->users = $users;
    }

    public function handle(Request $request): Response
    {
        $users = $this->users->getAll();
        $content = json_encode($users);

        $body = new Stream('php://memory', 'w');

        $body->write($content);

        $response = new Response($body, 200, [
            'Content-Type' => 'application/json',
            'Content-Length' => strlen($content),
        ]);

        return $response;
    }
}
```

### Classes *Middlewares*

[](#classes-middlewares)

As classes *middlewares* são características por implementarem o método `process`, que recebe dois parâmetros, `$request`, que representa a requisição HTTP de entrada, e `$next`, que representa a próxima entidade da arquitetura *pipe*, retornando sempre uma instância de `Response`. Por possuir o parâmetro `$next`, uma classe *middleware*, assim como a função anônima, possui autoridade para propagar a requisição pelo resto da *pipe*, o que tira dela a obrigação de gerar uma resposta HTTP. Com isso, as classes *middlewares* são mais comuns nas responsabilidades de modificarem a requisição HTTP de entrada e/ou a resposta HTTP produzida por outras entidades.

```
use Woss\Http\Message\{Request, Response};

class Cache
{
    public function __construct($cache)
    {
        $this->cache = $cache;
    }

    public function process(Request $request, $next): Response
    {
        // Se houver cache da resposta, retorne-a
        if ($this->cache->exists($request)) {
            return $this->cache->get($request);
        }

        // Caso contrário, gere a resposta HTTP e a armazene no cache
        $response = $next($request);

        $this->cache->create($request, $response);

        return $response;
    }
}
```

Arquitetura *Pipe*
------------------

[](#arquitetura-pipe)

A arquitetura *pipe* é implementada a partir da classe `Woss\Http\Server\Pipeline`, que implementa o método `handle(Request $request): Response`. Todas as entidades da *pipe* são definitas por um objeto iterável passado ao construtor da classe.

```
use Woss\Http\Message\{ServerRequest, Request, Response};
use Woss\Http\Server\Pipeline;

$pipe = new Pipeline([
    function (Request $request, $next): Response
    {
        log('debug', (string) $request);

        $response = $next($request);

        log('debug', (string) $response);

        return $response;
    },
    new Cache($services->get('cache')),
    new ListAllUsers($services->get('users'))
]);

$request = ServerRequest::fromGlobals();
$response = $pipe->handle($request);

echo (string) $response;
```

###  Health Score

20

—

LowBetter than 14% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity3

Limited adoption so far

Community4

Small or concentrated contributor base

Maturity45

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2652d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/33583e2b1616ad7a5d2a7d5ceb770f8ba3eff1e6908aed292ad38f6fee047088?d=identicon)[acwoss](/maintainers/acwoss)

---

Tags

httpphp

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/woss-http/health.svg)

```
[![Health](https://phpackages.com/badges/woss-http/health.svg)](https://phpackages.com/packages/woss-http)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
