
PHP如何实现RESTful原理
首先定义一个请求数据接收类;然后请求类中根据请求类型,进行访问不通方法;
class Request
{
// 允许的请求方式
private static $method_type = array('get', 'post', 'put', 'patch', 'delete');
// 测试数据
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)) {
// 调用请求方法对应的方法
$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;
}
}再定义一个数据输出类,将数据输出的格式进行统一的封装;最后将方法返回的数据进行输出即可。
Modoer 是一款以本地分享,多功能的点评网站管理系统。采用 PHP+MYSQL 开发设计,开放全部源代码。因具有非凡的访问速度和卓越的负载能力而深受国内外朋友的喜爱,不局限于商铺类点评,真正实现了多类型的点评,可以让您的网站点评任何事与物,同时增加产品模块,也更好的网站产品在网站上展示。Modoer点评系统 2.5 Build 20110710更新列表1.同步 旗舰版系统框架2.增加 限制图片
0
<?php
/**
* 包含一个Response类,即输出类。根据接收到的Content-Type,将Request类返回的数组拼接成对应的格式,加上header后输出
*/
class Response
{
const HTTP_VERSION = "HTTP/1.1";
public function sendResponse($data)
{
// 获取数据
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教程》
立即学习“PHP免费学习笔记(深入)”;
以上就是PHP如何实现RESTful原理的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号