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.
- 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
É necessário que você tenha o composer instalado e php 8.1+.
Instale o pacote minizord/http com composer
composer require minizord/http
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
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
Para rodar os testes use o comando baixo
composer test
Contribuições são sempre bem vindas!
Licença MIT (MIT). Consulte o arquivo de licença para obter mais informações.
Mauricio Roberto - mauricio.roberto.dev@gmail.com
Link do projeto: https://github.com/MauricioRobertoDev/minizord-http
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.
- Regex101 - Testar regex
- Pinoy Code Streamer - Implementação básica
- Mozilla - Visão geral do HTTP
- Mozilla - Evolução do HTTP
- Mozilla - Cabeçalhos HTTP
- IANA - Lista de códigos HTTP
- PHP - Lista de erros ao upar um arquivo
- PHP - Diferença entre 1 arquivo e vários enviados
- PHP - Dicas para tratar o $_FILES
- PHP - Variáveis do $_SERVER
- PHP - Dicas de como pegar todos os header
- Diego Brocanelli - Como realizar parse da query string