codebr/http-flow

Uma lib leve para manipulação de Request e Response com suporte total a verbos HTTP./A lightweight library for handling Requests and Responses with full support for HTTP verbs.

Installs: 3

Dependents: 1

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/codebr/http-flow

v0.1.1 2025-12-21 14:07 UTC

This package is auto-updated.

Last update: 2025-12-21 14:08:13 UTC


README

Latest Version on Packagist Software License

Uma biblioteca PHP leve, moderna e robusta para manipulação de requisições HTTP. Projetada para ser simples, testável e independente de frameworks pesados.

🚀 Funcionalidades

  • Normalização de Headers: Transforma automaticamente HTTP_USER_AGENT em User-Agent.
  • Suporte a JSON: Deteta e decodifica automaticamente corpos de requisição em JSON.
  • Globais Customizadas: Disponibiliza variáveis como $_PUT, $_PATCH e $_DELETE.
  • Filtros Inteligentes: Métodos only(), except() e input() para manipulação limpa de dados.
  • Testabilidade: Arquitetura pronta para testes unitários com injeção de dependências.
  • Request Handling: Suporte total a JSON, Query Params e Body.
  • Fluent Response: Interface fluida para retornos JSON, HTML e estados de erro.
  • CORS Automático: Gestão de Preflight (OPTIONS) com configuração via ENV.
  • Arquivos de Upload: Suporte a arquivos de upload via multipart/form-data.
  • Arquitetura Limpa: Configurações desacopladas e prontas para testes unitários.
  • Suporte a Uploads: Interface simplificada para gestão de ficheiros ($_FILES).

HTTP_FLOW_ALLOW_ORIGIN=https://meuapp.com HTTP_FLOW_ALLOW_METHODS=GET,POST,PUT,DELETE,OPTIONS HTTP_FLOW_ALLOW_HEADERS=Content-Type,Authorization,X-Requested-With HTTP_FLOW_MAX_AGE=3600 HTTP_FLOW_ALLOW_CREDENTIALS=true

📦 Instalação

Pode instalar a biblioteca via Composer:

composer require codebr/http-flow


use Codebr\HttpFlow\Request;

$request = new Request();

// Obter o método e a URI
echo $request->getMethod(); // GET, POST, PUT...
echo $request->getUri();    // /users/profile

// Busca 'id' em qualquer lugar da requisição, com valor padrão null
$id = $request->input('id');

// Busca com valor padrão se não existir
$page = $request->input('page', 1);

// Retorna apenas os campos desejados
$userData = $request->only(['name', 'email', 'password']);

// Retorna tudo, exceto campos sensíveis
$updateData = $request->except(['is_admin', 'id']);

$headers = $request->getHeaders();
$userAgent = $headers['User-Agent'] ?? 'Unknown';

# Origem permitida (padrão: *)
HTTP_FLOW_ALLOW_ORIGIN=[https://meuapp.com](https://meuapp.com)

# Métodos permitidos (padrão: GET,POST,PUT,DELETE,OPTIONS)
HTTP_FLOW_ALLOW_METHODS=GET,POST,PUT,DELETE

# Headers permitidos
HTTP_FLOW_ALLOW_HEADERS=Content-Type,Authorization,X-Requested-With

# Tempo de cache do Preflight em segundos (padrão: 86400)
HTTP_FLOW_MAX_AGE=3600

# Permitir Cookies/Credenciais (true/false)
HTTP_FLOW_ALLOW_CREDENTIALS=true

use Codebr\HttpFlow\Response;

$response = new Response();

// Retorno JSON com Status Code 201
$response->json(['message' => 'Criado com sucesso'], 201)->send();

// Retorno HTML
$response->html('<h1>Bem-vindo</h1>')->send();

use Codebr\HttpFlow\Request;
use Codebr\HttpFlow\Response;

$request = new Request();

if ($request->getMethod() === 'OPTIONS') {
    (new Response())->options()->send();
    exit;
}

use Codebr\HttpFlow\Request;
use Codebr\HttpFlow\Response;

$request = new Request();

if ($request->getMethod() === 'OPTIONS') {
    (new Response())->options()->send();
    exit;
}

$request = new \Codebr\HttpFlow\Request();

// Pega dados do JSON ou POST de forma segura
$data = $request->only(['email', 'username']);

// Busca um campo específico com fallback
$search = $request->input('search', 'default_term');

Gestão de CORS (Preflight)
Para resolver requisições OPTIONS automaticamente usando as configurações do seu .env:

if ($request->isPreflight()) {
    (new Response())->options()->send();
    exit;


Testabilidade

$request = new Request(
    server: ['REQUEST_METHOD' => 'POST'],
    body: ['user' => 'test']
);