Como alternativa a Siler, algo liviano y simple que funciona como una biblioteca con Swoole listo para usar, ¡recomiendo Nano! Compruébalo: https://nano.hyperf.wiki/#/en/
Siler es un conjunto de abstracciones de alto nivel de propósito general que apuntan a una API para programación declarativa en PHP.
Archiva y funciona como ciudadano de primera.
Dependencia cero , todo está por encima de las funciones integradas de PHP
Increíblemente rápido , sin gastos generales adicionales: punto de referencia 1 , punto de referencia 2 y punto de referencia 3
Archivos planos y funciones PHP antiguas funcionando en un servidor HTTP de alto rendimiento, escalable, concurrente y sin bloqueo.
Lee el tutorial.
compositor requiere leocavalcante/siler
Eso es todo. En realidad, Siler es una biblioteca, no un marco (tal vez un micromarco), usted dicta el flujo de control general del programa. Por lo tanto, no hay configuraciones ocultas ni estructuras de directorios predefinidas.
utilice SilerFunctional como λ; // Solo para ser interesante, no uses identificadores que no sean ASCII ;)usa SilerRoute;Routeget('/', λputs('¡Hola, mundo!'));
Nada más, nada menos. Ni siquiera necesitas decirle a Siler que run
o algo así ( puts
como un echo
evaluado perezosamente).
use SilerRoute;use SilerHttpResponse;Routeget('/', fn() => Responsejson(['message' => '¡Hola, mundo!']));
La función Responsejson
agregará automáticamente Content-type: application/json
en los encabezados de respuesta.
Siler brinda soporte de primera clase para Swoole. Puede utilizar regularmente los módulos Route
, Request
y Response
para un servidor HTTP Swoole.
use SilerHttpResponse;use SilerRoute;use SilerSwoole;$handler = function () {Routeget('/', fn() => Responsejson('¡Hola mundo!')); };$port = 8000;echo "Escuchando en el puerto $portn";Swoolehttp($handler, $port)->start();
Instalar dependencia de pares:
el compositor requiere webonyx/graphql-php
escriba consulta {hola: cadena}
use SilerRoute;use SilerGraphQL;$type_defs = file_get_contents(__DIR__ . '/schema.graphql');$resolvers = ['Query' => ['hola' => fn ($root, $args, $context, $info) => '¡Hola mundo!'] ];$esquema = GraphQLschema($type_defs, $resolvers);Routepost('/graphql', fn() => GraphQLinit($esquema));
Otra dependencia de pares:
El compositor requiere doctrina/anotaciones.
Entonces:
/** * @SilerGraphQLAnnotationObjectType() */Consulta de clase final {/** * @SilerGraphQLAnnotationField() */función estática pública hola($root, $args, $context, $info): string{return '¡Hola, mundo!'; } }
use SilerGraphQL;use SilerRoute;$schema = GraphQLannotated([Query::class]);Routepost('/graphql', fn() => GraphQLinit($schema));
El nombre del tipo de objeto se adivinará a partir del nombre de la clase, lo mismo para el nombre del campo y su tipo de retorno (es decir, escalar string
PHP ===
escalar String
GraphQL).
Documentación
Ejemplos
licencia MIT
Copyright 2020 © LC