В качестве альтернативы 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 © ЛК