当前位置: 首页 > 工具软件 > PHP Macaw > 使用案例 >

php 实现restful,php中怎么实现RESTful风格

赵灼光
2023-12-01

php中怎么实现RESTful风格

发布时间:2020-05-15 17:43:28

来源:亿速云

阅读:175

作者:Leah

在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;

}

}

再定义一个数据输出类,将数据输出的格式进行统一的封装;最后将方法返回的数据进行输出即可。<?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"?>');

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 = "

foreach ($responseData as $key => $value) {

$html .= "

";

if (is_array($value)) {

foreach ($value as $k => $v) {

$html .= "

$k$v";

}

}else{

$html .= "

$key$value";

}

$html .= "

";

}

$html .="

";

return $html;

}

}

?>

以上就是php实现RESTful风格的方法介绍,详细使用情况还得要大家自己使用过才能知道具体要领。如果想阅读更多相关内容的文章,欢迎关注亿速云行业资讯频道!

 类似资料: