PHP สงบ
REST (อังกฤษ: การถ่ายโอนรัฐ Representational เรียก REST) หมายถึงชุดของข้อ จำกัด ทางด้านสถาปัตยกรรมและหลักการ
ส่วนที่เหลือสไตล์การออกแบบเว็บ API ที่เรียกว่าสงบ API มันถูกกำหนดจากสามแหล่งข้อมูลต่อไปนี้:
- ทรัพยากรที่อยู่ที่ใช้งานง่ายโดยย่อ: URI ตัวอย่างเช่น:
http://example.com/resources/
- ทรัพยากรเกียร์: บริการเว็บยอมรับการกลับมาของประเภทสื่ออินเทอร์เน็ตเช่น JSON, XML, YAM เช่น
- การดำเนินงานของทรัพยากร: วิธีการบริการเว็บในซีรีส์ของการร้องขอทรัพยากรสนับสนุน (เช่น: โพสต์ได้รับการใส่หรือลบ)
กวดวิชานี้เราจะใช้ PHP (ไม่มีกรอบ) เพื่อสร้างบริการเว็บ RESTful คุณสามารถดาวน์โหลดในตอนท้ายของบทความในการใช้รหัสในส่วนนี้
ในการกวดวิชานี้คุณจะได้เรียนรู้ต่อไปนี้:
- สร้าง Webservice สงบ
- ใช้พื้นเมือง PHP, ไม่ขึ้นอยู่กับกรอบการทำงานใด ๆ
- รูปแบบ REST URI ที่จะปฏิบัติตามกฎระเบียบ
- บริการสงบยอมรับและรูปแบบอาจจะกลับมา JSON, XML และอื่น ๆ
- รหัสสถานะ HTTP การตอบสนองที่สอดคล้องกันขึ้นอยู่กับสถานการณ์
- ส่วนหัวของการร้องขอการสาธิต
- ใช้โปรแกรม REST เพื่อทดสอบบริการเว็บสงบ
ตัวอย่างของ Webservice สงบ
รหัสต่อไปนี้เป็นชั้นบริการสงบ Site.php:
ตัวอย่าง
/ *
* กวดวิชานี้จะแสดงให้เห็นถึงตัวอย่างของการสงบ
* บริการชั้นสงบ
* /
เว็บไซต์ชั้น {
$ เว็บไซต์ส่วนตัว = array (
1 => 'TaoBao'
2 => 'Google'
3 => 'w3big'
4 => 'Baidu'
5 => 'Weibo'
6 => 'Sina'
);
ฟังก์ชั่นที่สาธารณะ getAllSite () {
กลับ $ this -> เว็บไซต์;
}
ฟังก์ชั่นที่สาธารณะ getSite ($ ID) {
$ เว็บไซต์ = array ($ id = > ($ นี้ -> เว็บไซต์ [$ ID]) $ นี้ -> เว็บไซต์ [$ ID] :? $ นี้ -> เว็บไซต์ [1]);
กลับ $ เว็บไซต์;
}
}
?>
การทำแผนที่สงบบริการ URI
สงบบริการ URI ควรจะกำหนดให้สั้นอยู่ทรัพยากรภาพ เซิร์ฟเวอร์ htaccess ของ Apache ควรจะตั้งค่าเขียนกฎที่สอดคล้องกัน
ตัวอย่างนี้เราจะใช้สองกฎ URI:
1 เพื่อให้ได้รายชื่อของเว็บไซต์ทั้งหมด:
http://localhost/restexample/site/list/
2 โดยใช้ ID สำหรับเว็บไซต์ที่ระบุ URI ที่ต่อไปนี้จะได้รับรหัสจาก 3 เว็บไซต์:
http://localhost/restexample/site/list/3/
กฎการกำหนดค่าhtaccess ไฟล์ของโครงการมีดังนี้
# 开启 rewrite 功能 Options +FollowSymlinks RewriteEngine on # 重写规则 RewriteRule ^site/list/$ RestController.php?view=all [nc,qsa] RewriteRule ^site/list/([0-9]+)/$ RestController.php?view=single&id=$1 [nc,qsa]
ควบคุมการบริการเว็บสงบ
ในhtaccess ไฟล์เราจะได้รับ RestController.php ยื่นคำขอที่สอดคล้องกันโดยการตั้งค่าพารามิเตอร์ 'มุมมอง' โดยได้รับค่าพารามิเตอร์ที่แตกต่างกัน 'ดู' เพื่อแจกจ่ายกับวิธีการที่แตกต่างกันRestController.php รหัสไฟล์จะเป็นดังนี้:
ตัวอย่าง
require_once ( "SiteRestHandler.php");
มุมมอง $ = "";
(isset ($ _GET & # ถ้า ; "มุมมอง" & # 93; 91))
มุมมอง $ = $ _GET & # 91 ; "มุมมอง" & # 93 ;;
/ *
* บริการควบคุมสงบ
* แม็พ URL
* /
สวิทช์ ($ มุมมอง) {
กรณี "ทุกคน":
// จัดการส่วนที่เหลือ Url เว็บไซต์ / / / รายการ
$ siteRestHandler = ใหม่ SiteRestHandler ();
$ siteRestHandler -> getAllSites ();
break;
กรณี "เดี่ยว":
// จัดการส่วนที่เหลือ Url เว็บไซต์ / / การแสดง / < ID> /
$ siteRestHandler = ใหม่ SiteRestHandler ();
$ siteRestHandler -> getSite ($ _GET [ "id"]);
break;
กรณี "":
// 404 - ไม่พบ;
break;
}
?>
ที่เรียบง่ายสงบเรียนมูลนิธิ
ต่อไปนี้จะให้ชั้นฐานสงบสำหรับการประมวลผลในการตอบสนองต่อการร้องขอของรหัสสถานะ HTTP ที่ SimpleRest.php รหัสไฟล์จะเป็นดังนี้:
ตัวอย่าง
/ *
* ง่ายบริการเว็บสงบชั้นฐาน
* เราสามารถขยายชั้นนี้ตามความต้องการ
* /
ระดับ SimpleRest {
$ ส่วนตัว httpVersion = "HTTP / 1.1 ";
setHttpHeaders ทำงานสาธารณะ ($ contentType, $ statusCode) {
$ = $ StatusMessage นี้ -> getHttpStatusMessage ($ statusCode);
ส่วนหัว ($ นี้ -> httpVersion " " $ statusCode .. "" $ StatusMessage .. );
ส่วนหัว ( "Content-Type:" $ contentType.);
}
ฟังก์ชั่นที่สาธารณะ getHttpStatusMessage ($ statusCode) {
$ httpStatus = array (
100 => 'ดำเนินการต่อ'
101 => 'การสลับโปรโตคอล'
200 => 'ตกลง'
201 => 'สร้าง'
202 => 'ยอมรับ'
203 => 'ไม่มีสิทธิ์ข้อมูล '
204 => 'ไม่มีเนื้อหาที่'
205 => "รีเซ็ตเนื้อหา '
206 => 'เนื้อหาบางส่วน'
300 => 'หลายทางเลือก'
301 => 'ย้ายถาวร'
302 => 'พบ'
303 => 'ดูอื่น ๆ '
304 => 'Not Modified'
305 => 'ใช้พร็อก'
306 => '(ไม่ได้ใช้)' ,
307 => 'ชั่วคราวเปลี่ยนเส้นทาง'
400 => 'ร้องขอไม่ถูกต้อง'
401 => 'ไม่ได้รับอนุญาต "
402 => 'ต้องชำระเงิน'
403 => 'พระราชวังต้องห้าม'
404 => 'ไม่พบ'
405 => 'วิธีการที่ไม่อนุญาต' ,
406 => 'ยอมรับไม่ได้'
407 => 'พร็อกซีรับรองความถูกต้องต้องใช้' ,
408 => 'Request Timeout'
409 => 'ขัดแย้ง'
410 => 'ไป'
411 => 'ความยาวที่จำเป็น'
412 => 'Precondition ล้มเหลว',
413 => 'ขอ Entity ขนาดใหญ่เกินไป '
414 => 'ขอ URI เกินไป ยาว'
415 => 'ไม่สนับสนุนประเภทสื่อ' ,
416 => 'ขอช่วงไม่พอใจ '
417 => 'ความคาดหวังล้มเหลว',
500 => 'ข้อผิดพลาดภายในเซิร์ฟเวอร์' ,
501 => 'Not Implemented'
502 => 'Bad เกตเวย์'
503 => 'ไม่พร้อมใช้งานบริการ'
504 => 'เกตเวย์หมดเวลา'
505 => 'HTTP เวอร์ชันไม่สนับสนุน ');
ผลตอบแทน ($ httpStatus [$ statusCode] ) $ httpStatus [$ statusCode]: สถานะ $ [500] ;?
}
}
?>
เว็บระดับการประมวลผลบริการสงบ
ต่อไปนี้เป็นสงบบริการเว็บจัดการระดับ SiteRestHandler.php สืบทอดข้างต้นเราให้ชั้นฐานสงบชั้นจะถูกกำหนดโดยพารามิเตอร์ของการร้องขอเพื่อตรวจสอบว่ารหัสสถานะ HTTP กลับมาและรูปแบบข้อมูลที่เรามีให้ตัวอย่างของสามรูปแบบข้อมูล: "application / JSON", "application / XML" หรือ "text / html":
SiteRestHandler.php รหัสไฟล์จะเป็นดังนี้:
ตัวอย่าง
require_once ( "SimpleRest.php");
require_once ( "Site.php");
ระดับ SiteRestHandler ขยาย SimpleRest {
getAllSites ฟังก์ชั่น () {
$ = เว็บไซต์เว็บไซต์ใหม่ ();
$ = $ ข้อมูลดิบเว็บไซต์ -> getAllSite ();
ถ้า (ที่ว่างเปล่า ($ ข้อมูลดิบ)) {
$ statusCode = 404;
$ ข้อมูลดิบ = array ( 'ข้อผิดพลาด' => 'ไม่พบเว็บไซต์!');
} else {
$ statusCode = 200;
}
$ requestContentType = $ _SERVER [ 'HTTP_ACCEPT '];
$ this -> setHttpHeaders ($ requestContentType , $ statusCode);
ถ้า (strpos ($ requestContentType ' application / JSON')! == เท็จ) {
การตอบสนอง $ = $ นี้ -> encodeJson ($ ข้อมูลดิบ);
echo $ ตอบสนอง
} else if (strpos ($ requestContentType 'text / html')! == เท็จ) {
การตอบสนอง $ = $ นี้ -> encodeHtml ($ ข้อมูลดิบ);
echo $ ตอบสนอง
} else if (strpos ($ requestContentType 'application / XML)! == เท็จ) {
การตอบสนอง $ = $ นี้ -> encodeXml ($ ข้อมูลดิบ);
echo $ ตอบสนอง
}
}
ฟังก์ชั่นที่สาธารณะ encodeHtml ($ responseData) {
$ htmlResponse = "<table border = '1'>";
foreach ($ responseData เป็น $ key = > $ value) {
.. $ htmlResponse = "<TR > <td>" $ สำคัญ "</ td> <td>" $ ค่า "</ td> </ tr>" ... ;
}
. $ htmlResponse = "</ table >";
กลับ $ htmlResponse;
}
ฟังก์ชั่นที่สาธารณะ encodeJson ($ responseData) {
$ jsonResponse = json_encode ($ responseData) ;
ผลตอบแทน $ jsonResponse;
}
ฟังก์ชั่นที่สาธารณะ encodeXml ($ responseData) {
// สร้าง SimpleXMLElement วัตถุ
$ = XML ใหม่ SimpleXMLElement ( '< เว็บไซต์> </ เว็บไซต์> <XML version = "1.0" ??>');
foreach ($ responseData เป็น $ key = > $ value) {
$ XML -> addChild ($ คีย์ , $ value);
}
ผลตอบแทน $ XML -> asXML () ;
}
ฟังก์ชั่นที่สาธารณะ getSite ($ ID) {
$ = เว็บไซต์เว็บไซต์ใหม่ ();
$ = $ ข้อมูลดิบเว็บไซต์ -> getSite ($ ID);
ถ้า (ที่ว่างเปล่า ($ ข้อมูลดิบ)) {
$ statusCode = 404;
$ ข้อมูลดิบ = array ( 'ข้อผิดพลาด' => 'ไม่พบเว็บไซต์!');
} else {
$ statusCode = 200;
}
$ requestContentType = $ _SERVER [ 'HTTP_ACCEPT '];
$ this -> setHttpHeaders ($ requestContentType , $ statusCode);
ถ้า (strpos ($ requestContentType ' application / JSON')! == เท็จ) {
การตอบสนอง $ = $ นี้ -> encodeJson ($ ข้อมูลดิบ);
echo $ ตอบสนอง
} else if (strpos ($ requestContentType 'text / html')! == เท็จ) {
การตอบสนอง $ = $ นี้ -> encodeHtml ($ ข้อมูลดิบ);
echo $ ตอบสนอง
} else if (strpos ($ requestContentType 'application / XML)! == เท็จ) {
การตอบสนอง $ = $ นี้ -> encodeXml ($ ข้อมูลดิบ);
echo $ ตอบสนอง
}
}
}
?>
ต่อไปเราผ่านทาง http: // localhost / restexample / เว็บไซต์ / รายการ / ครั้งผลการส่งออกมีดังนี้
ไคลเอ็นต์บริการเว็บสงบ
แล้วเราสามารถใช้ "แอ็ดวานซ์ส่วนที่เหลือลูกค้า" ลูกค้าบริการเว็บสงบเบราว์เซอร์ Google Chrome เพื่อขอรับบริการของเรา
ตัวอย่างของการร้องขอ http: // localhost / restexample / เว็บไซต์ / รายการ /ที่อยู่ข้อมูลที่ได้รับจะคล้ายกับการยอมรับ: application / JSON
3 คำขอ w3big เว็บไซต์ ID (กวดวิชา) ที่อยู่การเข้าถึงคือ http: // localhost / restexample / เว็บไซต์ / รายการ / 3 /
แหล่งที่มาของการดาวน์โหลด
รหัสที่ใช้ในตัวอย่างให้คลิกปุ่มด้านล่างเพื่อดาวน์โหลด: