在php中怎么實現(xiàn)RESTful風(fēng)格?這篇文章運用了實例代碼展示,代碼非常詳細(xì),可供感興趣的小伙伴們參考借鑒,希望對大家有所幫助。

為柯橋等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及柯橋網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計、網(wǎng)站制作、柯橋網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
首先定義一個請求數(shù)據(jù)接收類;然后請求類中根據(jù)請求類型,進行訪問不通方法;
class Request
{
// 允許的請求方式
private static $method_type = array('get', 'post', 'put', 'patch', 'delete');
// 測試數(shù)據(jù)
private static $test_class = array(
1 => array('name'=>'測試一班','count'=>18),
2 => array('name'=>'測試二班','count'=>15)
);
public static function getRequest()
{
// 請求方法
$method = strtolower($_SERVER['REQUEST_METHOD']);
if (in_array($method, self::$method_type)) {
// 調(diào)用請求方法對應(yīng)的方法
$data_name = $method . "Data";
return self::$data_name($_REQUEST);
}
return false;
}
// GET 獲取信息
private static function getData($request_data)
{
$class_id = (int)$request_data['class'];
if ($class_id > 0) {
// GET /class/ID: 獲取某個指定班的信息
return self::$test_class[$class_id];
}else{
// GET /class: 列出所有班級
return self::$test_class;
}
}
// POST /class 新建一個班級
private static function postData($request_data)
{
$class_id = (int)$request_data['class'];
if ($class_id == 0) {
return false;
}
$data = array();
if (!empty($request_data['name']) && isset($request_data['count'])) {
$data['name'] = $request_data['name'];
$data['count'] = $request_data['count'];
self::$test_class[] = $data;
return self::$test_class;
}else{
return false;
}
}
// PUT /class/ID 更新某個指定班級的信息(全部信息)
private static function putData($request_data)
{
$class_id = (int)$request_data['class'];
if ($class_id == 0) {
return false;
}
$data = array();
if (!empty($request_data['name']) && isset($request_data['count'])) {
$data['name'] = $request_data['name'];
$data['count'] = (int)$request_data['count'];
self::$test_class[$class_id] = $data;
return self::$test_class;
}else{
return false;
}
}
// PATCH /class/ID 更新某個指定班級的信息 (部分信息)
private static function pacthData($request_data)
{
$class_id = (int)$request_data['class'];
if ($class_id == 0) {
return false;
}
if (!empty($request_data['name'])) {
self::$test_class[$class_id]['name'] = $request_data['name'];
}
if (isset($request_data['count'])) {
self::$test_class[$class_id]['count'] = $request_data['count'];
}
return self::$test_class;
}
// DELETE /class/ID 刪除某個班
private static function deleteData($request_data)
{
$class_id = (int)$request_data['class'];
if ($class_id == 0) {
return false;
}
unset(self::$test_class[$class_id]);
return self::$test_class;
}
}再定義一個數(shù)據(jù)輸出類,將數(shù)據(jù)輸出的格式進行統(tǒng)一的封裝;最后將方法返回的數(shù)據(jù)進行輸出即可。
<?php
/**
* 包含一個Response類,即輸出類。根據(jù)接收到的Content-Type,將Request類返回的數(shù)組拼接成對應(yīng)的格式,加上header后輸出
*/
class Response
{
const HTTP_VERSION = "HTTP/1.1";
public function sendResponse($data)
{
// 獲取數(shù)據(jù)
if ($data) {
$code = 200;
$message = "OK";
}else{
$code = 404;
$data = array('error' => "Not Found");
$message = "Not Found";
}
header(self::HTTP_VERSION . " $code $message");
$content_type = isset($_SERVER['CONTENT_TYPE']) ? $_SERVER['CONTENT_TYPE'] : $_SERVER['HTTP_ACCEPT'];
if (strpos($content_type, 'application/json') !== false) {
header("Content-Type: application/json");
echo self::encodeJson($data);
}elseif (strpos($content_type, 'application/xml') !== false) {
header("Content-Type: application/xml");
echo self::encodeXml($data);
}else{
header("Content-Type: text/html");
echo self::encodeHtml($data);
}
}
// json 格式
private static function encodeJson($responseData)
{
return json_encode($responseData);
}
// xml 格式
private static function encodeXml($responseData)
{
$xml = new SimpleXMLElement('<?xml version="1.0"?><rest></rest>');
foreach ($responseData as $key => $value) {
if (is_array($value)) {
foreach ($value as $k => $v) {
$xml->addChild($k,$v);
}
}else{
$xml->addChild($key,$value);
}
}
return $xml->asXML();
}
// html 格式
private static function encodeHtml($responseData)
{
$html = "<table border='1'>";
foreach ($responseData as $key => $value) {
$html .= "<tr>";
if (is_array($value)) {
foreach ($value as $k => $v) {
$html .= "<td>$k</td><td>$v</td>";
}
}else{
$html .= "<td>$key</td><td>$value</td>";
}
$html .= "</tr>";
}
$html .="</table>";
return $html;
}
}
?>以上就是php實現(xiàn)RESTful風(fēng)格的方法介紹,詳細(xì)使用情況還得要大家自己使用過才能知道具體要領(lǐng)。如果想閱讀更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
新聞名稱:php中怎么實現(xiàn)RESTful風(fēng)格
分享路徑:http://www.chinadenli.net/article6/iiehig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、App開發(fā)、網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、定制網(wǎng)站、移動網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)