อัปเกรดจากเวอร์ชัน 3 RC6 เพื่อรองรับ PHP ล่าสุด
Restler เป็น Web API Server หลายรูปแบบที่เรียบง่ายและมีประสิทธิภาพซึ่งเขียนด้วย PHP
เพียงจัดการกับตรรกะทางธุรกิจของคุณใน PHP แล้ว Restler จะดูแลส่วนที่เหลือ!
@url GET my/custom/url/{param}
ความคิดเห็น PHPDoc เวอร์ชันที่เสถียรและล่าสุดที่สุดอยู่ที่สาขา master
เวอร์ชันก่อนหน้านี้อยู่ในสาขาเวอร์ชัน เช่น v4
, v3
, v2
และ v1
สาขาเวอร์ชันที่มีเวอร์ชันปัจจุบัน เช่น v5
ใช้สำหรับสร้างรีลีสถัดไป เอกสารประกอบอาจไม่ได้รับการอัปเดตบ่อยครั้งและสงวนไว้สำหรับผู้ที่กล้าได้กล้าเสีย
สาขาฟีเจอร์ เช่น features/html
และ features/router
มีไว้เพื่อการทดลองเพื่อลองใช้คุณสมบัติเท่านั้น อาจรวมกันได้เมื่อพร้อม
ติดตั้งพื้นที่เก็บข้อมูลนี้เพื่อลองใช้ตัวอย่าง
ตรวจสอบให้แน่ใจว่า PHP 5.4 ขึ้นไปพร้อมใช้งานบนเซิร์ฟเวอร์ของคุณ เราแนะนำให้ใช้เวอร์ชันล่าสุดเพื่อประสิทธิภาพที่ดีขึ้น
Restler ใช้ Composer เพื่อจัดการการขึ้นต่อกัน ขั้นแรก ให้ดาวน์โหลดสำเนาของ composer.phar
สามารถเก็บไว้ในโฟลเดอร์โปรเจ็กต์ของคุณหรือในอุดมคติแล้วใน usr/local/bin
เพื่อใช้งานทั่วโลกสำหรับทุกโปรเจ็กต์ของคุณ หากคุณใช้ Windows คุณสามารถใช้ตัวติดตั้ง windows ของผู้แต่งแทนได้
คุณสามารถติดตั้ง Restler ได้โดยการรันคำสั่ง create project ในเทอร์มินัลของคุณ แทนที่ {projectName} ด้วยชื่อโปรเจ็กต์จริงของคุณ มันจะสร้างโฟลเดอร์ที่มีชื่อนั้นและติดตั้ง Restler
php composer.phar create-project luracast/restler {projectName}
บันทึก:-
หากคุณไม่ต้องการรูปแบบเพิ่มเติมและเครื่องมือ BDD คุณสามารถรวม >
--no-dev
เพื่อบังคับใช้การแยกแพ็คเกจ devหากคุณต้องการลองใช้สาขา bleading edge v3 หรือฟีเจอร์ใด ๆ > สาขารวม
3.x-dev
หรือdev-features/html
ในคำสั่งด้านบน
หลังจากติดตั้ง Composer ให้ดาวน์โหลดเฟรมเวิร์ก Restler เวอร์ชันล่าสุด และแตกเนื้อหาลงในไดเร็กทอรีบนเซิร์ฟเวอร์ของคุณ ถัดไป ในรูทของโปรเจ็กต์ Restler ของคุณ ให้รันคำสั่ง php composer.phar install
(หรือ composer install
) เพื่อติดตั้งการขึ้นต่อกันของเฟรมเวิร์กทั้งหมด กระบวนการนี้จำเป็นต้องติดตั้ง Git บนเซิร์ฟเวอร์เพื่อให้การติดตั้งเสร็จสมบูรณ์
หากคุณต้องการอัปเดตเฟรมเวิร์ก Restler คุณอาจใช้คำสั่ง php composer.phar update
หมายเหตุ:- หากคุณไม่ได้รับอนุญาตให้ติดตั้ง composer และ git บนเซิร์ฟเวอร์ของคุณ คุณสามารถติดตั้งและรันบนเครื่องพัฒนาของคุณได้ ไฟล์และโฟลเดอร์ผลลัพธ์สามารถอัปโหลดและใช้งานบนเซิร์ฟเวอร์ได้
ตามหลักการแล้ว โฟลเดอร์สาธารณะควรถูกแมปเป็นรูทเว็บของคุณ ซึ่งเป็นทางเลือก แต่แนะนำให้หลีกเลี่ยงการเปิดเผยไฟล์และโฟลเดอร์ที่ไม่จำเป็น
ลองใช้ตัวอย่างสดใน localhost ของคุณ
คุณสามารถเปิดเซิร์ฟเวอร์ในตัวของ PHP ด้วยคำสั่ง
composer serve
อัพเดต base_url ที่ระบุใน behat.yml
จากนั้นลองใช้คำสั่งต่อไปนี้
vendor/bin/behat
หรือคุณสามารถรัน
composer test
การดำเนินการนี้จะทดสอบตัวอย่างกับลักษณะการทำงานที่คาดหวัง เป็นต้น
Feature : Testing CRUD Example
Scenario : Creating new Author with JSON
Given that I want to make a new "Author"
And his "name" is "Chris"
And his "email" is "[email protected]"
And the request is sent as JSON
When I request "/examples/_007_crud/authors"
Then the response status code should be 200
And the response should be JSON
And the response has a "id" property
เรียบร้อยแล้ว ขอให้มีความสุขในการพักผ่อน! -
เรามีสองตัวเลือกในการสร้างเซิร์ฟเวอร์ API ของ Restler ของคุณเอง
ตัวเลือกที่สะดวกที่สุดคือการใช้เทมเพลตแอปพลิเคชันเช่น Restler Application ซึ่งมีการผสานรวมกับแพ็คเกจมากมายเพื่อช่วยเราในเรื่องตรรกะทางธุรกิจเช่นกัน หากคุณเลือกตัวเลือกนี้ ให้เลือกสาขาในพื้นที่เก็บข้อมูลนั้นและดำเนินการตามคำแนะนำที่มีอยู่
สร้างโปรเจ็กต์ตั้งแต่เริ่มต้นเพื่อให้คุณสามารถควบคุมทุกแง่มุมของแอปพลิเคชันของคุณได้อย่างเต็มที่ หากคุณเลือกตัวเลือกนี้ ให้ทำตามขั้นตอนด้านล่าง
composer init
และปฏิบัติตามเพื่อสร้าง composer.json
restler/framework
และ ^5
สำหรับข้อจำกัดเวอร์ชันcomposer require restler/framework:^5
เรากำลังใช้
restler/framework
แทนluracast/restler
เพื่อลดพื้นที่ที่จำเป็นสำหรับแพ็คเกจ มันมาจาก https://github.com/Luracast/Restler-Framework ซึ่งมีเพียงเนื้อหาของโฟลเดอร์ src ที่นี่
แม้ว่าคุณจะสร้างตั้งแต่เริ่มต้น การตรวจสอบเทมเพลตแอปพลิเคชันจะช่วยในการตัดสินใจเกี่ยวกับโครงสร้างโฟลเดอร์และค้นหาแพ็คเกจที่มีประโยชน์อื่นๆ
สร้าง คลาส API ของคุณด้วยวิธีการสาธารณะและวิธีการป้องกันที่จำเป็นทั้งหมด
สร้าง เกตเวย์ (public/index.php) ดังนี้
<?php
require_once __DIR__ . ' /../vendor/autoload.php ' ;
use Luracast Restler Restler ;
$ r = new Restler ();
$ r -> addAPIClass ( ' YourApiClassNameHere ' ); // repeat for more
$ r -> handle (); //serve the response
เปิดใช้งานการเขียน URL ใหม่
ตรวจสอบให้แน่ใจว่าคำขอทั้งหมดไปที่ index.php โดยเปิดใช้งานการเขียน URL ใหม่สำหรับเว็บไซต์ของคุณ
ตัวอย่างเช่น:-
หากคุณอยู่บน Apache คุณสามารถใช้ไฟล์ .htaccess เช่น
DirectoryIndex index.php
< IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ index.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
</ IfModule >
< IfModule mod_php5.c>
php_flag display_errors On
</ IfModule >
หมายเหตุ:- สิ่งนี้จำเป็นต้องตั้ง
AllowOverride
เป็นAll
แทนที่จะเป็นNone
ในไฟล์httpd.conf
และอาจต้องมีการปรับแต่งบางอย่างในการกำหนดค่าเซิร์ฟเวอร์บางอย่าง โปรดดูเอกสาร mod_rewrite สำหรับข้อมูลเพิ่มเติม
หากคุณใช้ Nginx คุณต้องตรวจสอบให้แน่ใจว่าคุณได้ตั้ง server_name
และส่งสคริปต์ PHP ไปที่ cgi (PHP-FPM) ที่รวดเร็วในการฟัง 127.0.0.1:9000
server {
listen 80;
server_name api.luracast.com; //change it to match your server name
//... other stuff
location ~ .php$ {
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
include fastcgi_params;
}
//... other stuff
}
หมายเหตุ:- สิ่งนี้จำเป็นต้องติดตั้งและกำหนดค่า PHP, PHP-FPM อย่างเหมาะสม โปรดดูตัวอย่าง PHP FastCGI สำหรับข้อมูลเพิ่มเติม
ปรับแต่งให้เหมาะกับความต้องการของคุณ
<?php
require_once __DIR__ . ' /../vendor/autoload.php ' ;
use Luracast Restler Restler ;
use Luracast Restler Defaults ;
//set the defaults to match your requirements
Defaults:: $ throttle = 20 ; //time in milliseconds for bandwidth throttling
//setup restler
$ r = new Restler ();
$ r -> addAPIClass ( ' YourApiClassNameHere ' ); // repeat for more
$ r -> addAPIClass ( ' Explorer ' ); //from restler framework for API Explorer
$ r -> addFilterClass ( ' RateLimit ' ); //Add Filters as needed
$ r -> handle (); //serve the response
สำรวจ API และทดลองใช้โดยเปิด explorer/index.html
จากเว็บรูทบนเบราว์เซอร์ของคุณ
มีความสุขในการสำรวจ! -
หมายเหตุ:- การใช้ eAccelerator สามารถทำให้ Restler ล้มเหลวในขณะที่ลบความคิดเห็นออก สามารถดูข้อมูลเพิ่มเติมได้ที่นี่
Restler รองรับคำอธิบายประกอบในรูปแบบของความคิดเห็น PHPDoc สำหรับการปรับแต่ง API อย่างละเอียด
มีการบันทึกไว้โดยละเอียดภายใต้คำอธิบายประกอบ
เพื่อปกป้อง API ของคุณ ให้ตรวจสอบสิทธิ์และอนุญาตผู้ใช้ที่ถูกต้อง
<?php
require_once ' ../restler.php ' ;
use Luracast Restler Restler ;
$ r = new Restler ();
$ r -> addAPIClass ( ' YourApiClassNameHere ' ); // repeat for more
$ r -> addAuthenticationClass ( ' CustomAuth ' ); //Add Authentication classes as needed
$ r -> handle (); //serve the response
ตามค่าเริ่มต้น Restler จะทำงานในโหมดแก้ไขข้อบกพร่องที่ได้รับการปรับแต่งเพิ่มเติมสำหรับนักพัฒนา API โดยการแสดงข้อความแสดงข้อผิดพลาดโดยละเอียดและเตรียมผลลัพธ์ API ให้เป็นรูปแบบที่อ่านได้ของมนุษย์
เมื่อเปิดโหมดการใช้งานจริง คุณจะได้รับการปรับปรุงประสิทธิภาพเนื่องจากจะแคชเส้นทาง (การแยกวิเคราะห์ความคิดเห็นจะเกิดขึ้นเพียงครั้งเดียวแทนที่จะเป็นการเรียก API ทุกครั้ง) ไฟล์อื่นๆ สองสามไฟล์ และหลีกเลี่ยงการให้ข้อมูลการแก้ไขข้อบกพร่อง
<?php
require_once ' ../restler.php ' ;
use Luracast Restler Restler ;
//setup restler
$ r = new Restler ( true ); //turn on production mode by passing true.
//If you are using file based cache (the default) make sure cache folder is
//writable. when you make changes to your code make sure you delete the
// routes.php inside the cache folder
//...
หมายเหตุ:- เมื่อโหมดการผลิตถูกตั้งค่าเป็น
true
โหมดจะใช้แคชเสมอและตรวจไม่พบการเปลี่ยนแปลงและเส้นทางใหม่ หากมี ไปป์ไลน์การรวมอย่างต่อเนื่องหรือ Git Hook ของคุณควรลบไฟล์นี้ในระหว่างกระบวนการปรับใช้ หรือคุณสามารถส่งพารามิเตอร์ตัวที่สองไปยังคอนสตรัคเตอร์ของ Restler เพื่อรีเฟรชแคชเมื่อจำเป็นต้องใช้การเปลี่ยนแปลง
composer serve
composer test
หลังจากรันเซิร์ฟเวอร์โดยที่ composer serve
ในหน้าต่างอื่น$restler->addAPIClass("Luracast/Restler/Explorer", 'swagger')
แมปกับ /swagger
คลาสเส้นทางได้รับการปรับปรุงเพื่อให้มีเมธอด findAll เพื่อแสดงรายการเส้นทางทั้งหมดสำหรับเวอร์ชันเฉพาะของ API ยกเว้นเส้นทางที่ระบุและวิธีการ http
เมื่อพบคุณสมบัติทางเวทย์มนตร์ที่ใช้โดยเส้นทางโดยไม่สนใจคุณสมบัติที่แท้จริง สิ่งนี้มีประโยชน์สำหรับคลาส Dynamic Model เช่น Eloquent
ขณะนี้เส้นทางอนุญาตให้ @required
และ @properties
เป็นอาร์เรย์เมื่อพารามิเตอร์เป็นวัตถุ สิ่งนี้ช่วยให้เราเลือกและเลือกคุณสมบัติสำหรับวิธี API แต่ละวิธีที่แตกต่างกันได้ ตัวอย่าง {@properties property1,property2,property3}
{@required property1,property2}
ทำให้ API ค้นหาพร็อพเพอร์ตี้ 3 รายการเท่านั้น และจำเป็นต้องมี 2 รายการ
ปรับคลาส Nav ให้เหมาะสม ตอนนี้ใช้ Routes::findAll()
พร้อมกับคลาส Explorer
คลาส Restler มีเมธอด setBaseUrls เพื่อตั้งค่า URL ฐานที่ยอมรับได้ซึ่งสามารถตั้งค่าได้โดยใช้ $_SERVER['HTTP_HOST']
อ่านบทความนี้เพื่อทำความเข้าใจว่าทำไม สิ่งนี้มีประโยชน์ในกรณีต่อไปนี้เมื่อ
ขณะนี้คลาส Restler อนุญาตให้แทนที่รหัสสถานะโดยตั้งค่า $this->restler->responseCode
จากเมธอด api
ปรับปรุงคลาสฟอร์มเพื่อส่งคุณสมบัติที่ฝังไปยังเทมเพลต emmet ตัวอย่างเช่น
/**
* {@id form1}
*
* @param string $name
* @param int $age
*/
สร้างแบบฟอร์มต่อไปนี้
<form role="form" id="form1" method="POST" ...
เนื่องจากเทมเพลต emmet มีรหัสอยู่ในนั้น (ดูด้านล่าง)
form[role=form id=$id# name=$name# method=$method# action=$action# enctype=$enctype#]
@param
เพื่อตั้งค่าแอตทริบิวต์ html (เช่น id, ยอมรับ ฯลฯ) ได้อย่างง่ายดาย@class
comment ตัวอย่าง: - @class Validator {@holdException}
ทำให้ตัวตรวจสอบเก็บข้อยกเว้นแทนที่จะทิ้ง@property
, @property-read
, @property-write
เพื่อรองรับการบันทึกคุณสมบัติไดนามิกstring[]
, DateTime[]
Scope::$resolver
String
เป็น Text
เพื่อรองรับ PHP 7 (String เป็นคีย์เวิร์ดที่สงวนไว้ใน php7)