В качестве альтернативы Siler, чему-то легкому и простому, работающему как библиотека со Swoole из коробки, я настоятельно рекомендую Nano! Проверьте это: https://nano.hyperf.wiki/#/en/
Siler — это набор высокоуровневых абстракций общего назначения, предназначенных для API для декларативного программирования на PHP.
Файлы и функции как первоклассные граждане
Нулевая зависимость , все основано на встроенных функциях PHP.
Невероятно быстро , без дополнительных затрат — тест 1 , тест 2 и тест 3.
Плоские файлы и старые добрые функции PHP работают на высокопроизводительном, масштабируемом, параллельном и неблокирующем HTTP-сервере производственного уровня.
Прочтите учебник.
композитору требуется leocavalcante/siler
Вот и все. На самом деле Siler — это библиотека, а не фреймворк (может быть, микрофреймворк), общий поток управления программой диктуется вами. Таким образом, никаких скрытых конфигураций или предопределенных структур каталогов.
используйте SilerFunctional в качестве λ; // Просто ради интереса не используйте идентификаторы, отличные от ASCII ;)use SilerRoute;Routeget('/', λputs('Hello, World!'));
Ни больше, ни меньше. Вам даже не нужно сообщать Siler о run
или что-то в этом роде ( puts
работает как лениво оцениваемое echo
).
используйте SilerRoute;use SilerHttpResponse;Routeget('/', fn() => Responsejson(['message' => 'Hello, World!']));
Функция Responsejson
автоматически добавит Content-type: application/json
в заголовки ответов.
Siler обеспечивает первоклассную поддержку Swoole. Вы можете регулярно использовать модули Route
, Request
и Response
для HTTP-сервера Swoole.
используйте SilerHttpResponse; используйте SilerRoute; используйте SilerSwoole; $handler = function () {Routeget('/', fn() => Responsejson('Hello, World!')); };$port = 8000;echo "Прослушивание порта $portn";Swoolehttp($handler, $port)->start();
Установите одноранговую зависимость:
композитору требуется webonyx/graphql-php
введите запрос {привет: строка}
используйте SilerRoute; используйте SilerGraphQL; $type_defs = file_get_contents(__DIR__ . '/schema.graphql'); $resolvers = ['Query' => ['hello' => fn ($root, $args, $context, $info) => 'Привет, мир!'] ];$schema = GraphQLschema($type_defs, $resolvers);Routepost('/graphql', fn() => GraphQLinit($schema));
Еще одна зависимость от сверстников:
композитору требуется доктрина/аннотации
Затем:
/** * @SilerGraphQLAnnotationObjectType() */final class Query {/** * @SilerGraphQLAnnotationField() */public static function hello($root, $args, $context, $info): string{return 'Hello, World!'; } }
используйте SilerGraphQL;use SilerRoute;$schema = GraphQLannotated([Query::class]);Routepost('/graphql', fn() => GraphQLinit($schema));
Имя типа объекта будет угадываться на основе имени класса, того же, что и имя поля, и типа возвращаемого значения (т. е.: string
скаляр PHP ===
String
скаляр GraphQL).
Документация
Примеры
Лицензия MIT
Copyright 2020 © ЛК