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