Nota Bene: โครงการนี้ใช้ Semver และ Changelog แต่มันไม่ใช่รุ่นหลักที่มั่นคง การอัปเดตเล็กน้อย (Fe 0.5.* -> 0.6.*) สามารถทำลายความเข้ากันได้ย้อนหลัง!
เฟรมเวิร์ก Simple PHP7 สำหรับบริการที่เหลืออาคารอย่างรวดเร็วโดยใช้มิดเดิลแวร์ PSR-7 และ React
อินสแตนซ์ที่รันได้สามารถพบได้โดยลิงก์ยังดูตัวอย่าง 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
คุณสามารถเชื่อมโยงกับทุกวิธีใน Route A Handler และเลือกเส้นทางตามโมดูล โดยเซิร์ฟเวอร์เริ่มต้นมี 1 โมดูลเริ่มต้นสำหรับจุดสิ้นสุดทั้งหมด ดูตัวอย่าง: route.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 );... จะถูกนำไปใช้ ...
... จะถูกนำไปใช้ ...