/minizord-http

Componente http para o Minizord, implementando a PSR-7, PSR-17.

Primary LanguagePHPMIT LicenseMIT

logo

Minizord - Template

Apenas o template para os componentes de Minizord!

contributors last update forks stars open issues license


🌟 Sobre o projeto

O objetivo é aprender.

Esse pacote é uma implementação PSR-7 e PSR-17, uma série de classes que tem o papel de representar entidades básicas de uma requisição http, como por exemplo a Uri, a Stream e até mesmo a própria Request.

Esse pacote é quase como a espinha dorsal de qualquer framework php, por lhe proporcionar várias classes de fácil manipulação, podendo escalar sua aplicação fácilmente.

Veja mais nas minhas observações no final deste read-me.

🎯 Features

  • Classe representando a uri (Uri)
  • Classe representando um stream de recurso (Stream)
  • Classe representando um arquivo upado (UploadedFile)
  • Classe representando uma requisição (Request)
  • Classe representando uma resposta (Response)
  • Request abstrata podendo ser extendida e criar sua própria
  • Factories para criação das classes
  • Método para criar uma ServerRequest atráves das variáveis globais
  • Método para popular sua classe através das variáveis globais
  • Método para criar várias UploadedFiles através da variável global $_FILES

⚡ Como usar

‼️ Pré-requisitos

É necessário que você tenha o composer instalado e php 8.1+.

⚙️ Instalação

Instale o pacote minizord/http com composer

  composer require minizord/http

🚀 Exemplos

Explicação de como usar, para saber mais detalhes veja a documentação.

use Minizord\Http\Factory\RequestFactory;
use Minizord\Http\Factory\ResponseFactory;
use Minizord\Http\Factory\ServerRequestFactory;
use Minizord\Http\Factory\StreamFactory;
use Minizord\Http\Factory\UploadedFileFactory;
use Minizord\Http\Factory\UriFactory;

$uriFactory = new UriFactory();
$streamFactory = new StreamFactory();
$requestFactory = new RequestFactory();
$responseFactory = new ResponseFactory();
$uploadedFactory = new UploadedFileFactory();
$serverRequestFactory = new ServerRequestFactory();

$uri = $uriFactory->createUri('https://example.com.br/path/?arg=value');

$stream = $streamFactory->createStream('content');
$stream = $streamFactory->createStreamFromFile('path/to/file.txt', 'w+');
$stream = $streamFactory->createStreamFromResource(fopen('path/to/file.txt', 'w+'));

$request = $requestFactory->createRequest('POST', $uri);

$response = $responseFactory->createResponse(400, 'Bad Request');

$uploadedFile = $uploadedFactory->createUploadedFile($stream, 1024, UPLOAD_ERR_OK, 'file.txt', 'text/plain');
$uploadedFiles = $uploadedFactory->createUploadedFilesFromGlobal(); // $_FILES;

$serverRequest = $serverRequestFactory->createServerRequest('POST', $uri, []);
$serverRequest = $serverRequestFactory->createFromGlobals(); // $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES

🔧 Desenvolvimento

Clone o projeto

  git clone https://github.com/MauricioRobertoDev/minizord-http

Entre na pasta do projeto

  cd minizord-http

Instale as dependências

  composer install

🧪 Rodando os testes

Para rodar os testes use o comando baixo

  composer test

👋 Contribuintes

Contribuições são sempre bem vindas!


🔒 License

Licença MIT (MIT). Consulte o arquivo de licença para obter mais informações.


🤝 Contato

Mauricio Roberto - mauricio.roberto.dev@gmail.com

Link do projeto: https://github.com/MauricioRobertoDev/minizord-http


💬 Observações

Eu dei inicio ao projeto por este componente, pois olhei as interfaces e pensei 'hummm.. Tem várias interfaces já definidas, é só implementar elas, deve ser fácil', não poderia estar mais enganado.

Já na classe URI fui introduzido ao mundo das RFC e a primeira reação ao abrir o txt não poderia ser outra a não ser 'o que diabos é isso?', letras e mais letras com uma barra lateral que parecia que jamais terminaria.

Mas claro a internet é maravilhosa e acabai encontrando sites pra facilitar a vida, só queria deixar registrado.

Nesta implementação e no mundo das RFCs, percebi que algumas RFC citadas já estavam obsoletas e pensei primeiramente que deveria então criar a implementação se baseando nas novas.

Porem com pesquisa o que entendi é ser proposital, há várias RFC que ainda não foram abraçadas, é o que acontece com a RFC 7230 que deve ser usada para validar os headers http, ela já é obsoleta através da RFC 9112, mas aparentemente não foi muito aceita por restringir de mais os valores dos headers para apenas caracteres ASCII visíveis, enquanto a anterior permitia ASCII visíveis e mais alguns caracteres especiais.

💎 Créditos/Reconhecimento


🔬 Referências