Como alternativa ao Siler, algo leve e simples que funciona como uma biblioteca com o Swoole pronto para uso, recomendo fortemente o Nano! Confira: https://nano.hyperf.wiki/#/en/
Siler é um conjunto de abstrações de alto nível de uso geral visando uma API para programação declarativa em PHP.
Arquivos e funções como cidadãos de primeira classe
Dependência zero , tudo está em cima das funções integradas do PHP
Extremamente rápido , sem sobrecarga adicional - benchmark 1 , benchmark 2 e benchmark 3
Arquivos simples e funções PHP simples em um servidor HTTP de nível de produção, de alto desempenho, escalável, simultâneo e sem bloqueio.
Leia o tutorial.
compositor requer leocavalcante/siler
É isso. Na verdade, Siler é uma biblioteca, não uma estrutura (talvez uma microestrutura); o fluxo geral de controle do programa é ditado por você. Portanto, não há configurações ocultas ou estruturas de diretório predefinidas.
use SilerFunctional como λ; // Só para ser legal, não use identificadores não-ASCII ;)use SilerRoute;Routeget('/', λputs('Hello, World!'));
Nada mais, nada menos. Você nem precisa dizer ao Siler para run
ou algo parecido ( puts
funciona como um echo
avaliado preguiçosamente ).
use SilerRoute;use SilerHttpResponse;Routeget('/', fn() => Responsejson(['message' => 'Olá, mundo!']));
A função Responsejson
adicionará automaticamente Content-type: application/json
nos cabeçalhos de resposta.
Siler fornece suporte de primeira classe para Swoole. Você pode usar regularmente os módulos Route
, Request
e Response
para um servidor Swoole HTTP.
use SilerHttpResponse;use SilerRoute;use SilerSwoole;$handler = function () {Routeget('/', fn() => Responsejson('Olá, Mundo!')); };$port = 8000;echo "Ouvindo na porta $portn";Swoolehttp($handler, $port)->start();
Instale a dependência de pares:
compositor requer webonyx/graphql-php
digite Consulta {olá: String}
use SilerRoute;use SilerGraphQL;$type_defs = file_get_contents(__DIR__ . '/schema.graphql');$resolvers = ['Query' => ['hello' => fn ($root, $args, $context, $info) => 'Olá, mundo!'] ];$schema = GraphQLschema($type_defs, $resolvers);Routepost('/graphql', fn() => GraphQLinit($schema));
Outra dependência de pares:
compositor requer doutrina/anotações
Então:
/** * @SilerGraphQLAnnotationObjectType() */classe final Consulta {/** * @SilerGraphQLAnnotationField() */public static function hello($root, $args, $context, $info): string{return 'Olá, mundo!'; } }
use SilerGraphQL;use SilerRoute;$schema = GraphQLannotated([Query::class]);Routepost('/graphql', fn() => GraphQLinit($schema));
O nome do tipo de objeto será adivinhado a partir do nome da classe, o mesmo para o nome do campo, e seu tipo de retorno (ou seja: escalar string
PHP ===
escalar String
GraphQL).
Documentação
Exemplos
Licença MIT
Direitos autorais 2020 © LC