Nota Bene: يستخدم هذا المشروع Semver و Changelog. لكنها ليست نسخة رئيسية مستقرة. أي تحديث بسيط (Fe 0.5.* -> 0.6.*) يمكن أن يكسر التوافق الخلفي!
إطار PHP7 البسيط لخدمات REST للبناء السريع بناءً على الوسيطة ، PSR-7 و React.
يمكن العثور على مثيل Runned بواسطة Link ، انظر أيضًا مثال Repo.
$ composer require free-elephants/rest-daemon
انظر مثال في المثال/rest-server.php والوثائق.
# your rest-server.php script
$server = new RestServer('127.0.0.1', 8080, '0.0.0.0', ['*']); // <- it's default arguments values
$server->run();
# can be runned as
$ php ./rest-server.php
يمكن لأي معالج طريقة نقطة النهاية أن يكون تطبيقًا قابلاً للاتصال بالبرامج الوسيطة: وظيفة أو فئة مع طريقة __Invoke ().
<?php
class GetAttributeHandler extends AbstractEndpointMethodHandler
{
public function __invoke ( ServerRequestInterface $ request , ResponseInterface $ response , callable $ next )
{
$ name = $ request -> getAttribute ( ' name ' , ' World ' );
$ response -> getBody ()-> write ( ' {
"hello": " ' . $ name . ' !"
} ' );
return $ next ( $ request , $ response );
}
}
$ greetingAttributeEndpoint = new BaseEndpoint ( ' /greeting/{name} ' , ' Greeting by name in path ' );
$ greetingAttributeEndpoint -> setMethodHandler ( ' GET ' , new GetAttributeHandler ());
$ server -> addEndpoint ( $ greetingAttributeEndpoint );انظر كيفية إنشاء الخادم لخطوة بخطوة في برنامج نصي واحد
يمكنك استخدام PHP-DI (أو تطبيق حاوية PSR-11 آخر) وتكوين ملفات التوجيه مع RESTSERVERBUILDER لمزيد من التكوين والترميز بشكل أقل.
انظر مثال مع التوجيه القائم على الملفات وتكوين التبعيات: rest-server.php
يمكنك الارتباط بكل طريقة في المسار معالج ، وتنظيم طرق اختياريًا حسب الوحدات النمطية. بشكل افتراضي ، يحتوي الخادم الافتراضي على وحدة افتراضية واحدة لجميع نقاط النهاية. انظر مثال: Routes.php
بشكل افتراضي ، قم بتزويد مجموعة الخادم ببعض البرامج الوسيطة المفيدة. يمكنك تمديده أو تجاوزه:
<?php
$ requestCounter = function (
ServerRequestInterface $ request ,
ResponseInterface $ response ,
callable $ next
) {
static $ requestNumber = 0 ;
printf ( ' [%s] request number #%d handled ' . PHP_EOL , date ( DATE_ISO8601 ), ++ $ requestNumber );
return $ next ( $ request , $ response );
};
$ extendedDefaultMiddlewareCollection = new DefaultEndpointMiddlewareCollection ([], [ $ requestCounter ]);
$ server -> setMiddlewareCollection ( $ extendedDefaultMiddlewareCollection ); سيتم لف معالج طريقة كل نقطة نهاية هذه المجموعة ويسمى بين المعرفة كما after before الوسيطة. يمكنك أيضًا تكوين مجموعة الأوساط الوسيطة الافتراضية مع الوصول إلى كل الوسيطة المدمجة بواسطة المفتاح: هذه المجموعة تنفذ واجهة ArrayAccess.
<?php
$ server -> getMiddlewareCollection ()-> getBefore ()-> offsetUnset ( FreeElephants RestDaemon Middleware MiddlewareRole:: NO_CONTENT_STATUS_SETTER );... سيتم تنفيذها ...
... سيتم تنفيذها ...