首页 » Web前端 » php写rest技巧_PHP编程 RESTful

php写rest技巧_PHP编程 RESTful

访客 2024-12-15 0

扫一扫用手机浏览

文章目录 [+]

符合REST设计风格的Web API称为RESTful API。
它从以下三个方面资源进行定义:

直不雅观简短的资源地址:URI,比如:http://example.com/resources/

php写rest技巧_PHP编程 RESTful

传输的资源:Web做事接管与返回的互联网媒体类型,比如:JSON,XML,YAM等。

php写rest技巧_PHP编程 RESTful
(图片来自网络侵删)

对资源的操作:Web做事在该资源上所支持的一系列要求方法(比如:POST,GET,PUT或DELETE)。

本教程我们将利用 PHP(不用框架) 来创建一个 RESTful web service,在文章末端你可以下载本章节利用到的代码。

通过本教程你将学习到以下内容:

创建一个 RESTful Webservice。

利用原生 PHP, 不依赖任何框架。

URI 模式须要遵照 REST 规则。

RESTful service 接管与返回的格式可以是 JSON, XML等。

根据不同情形相应对应的 HTTP 状态码。

演示要求头的利用。

利用 REST 客户端来测试 RESTful web service。

RESTful Webservice 实例

以下代码是 RESTful 做事类 Site.php:

实例

<?php/ 菜鸟教程 RESTful 演示实例 RESTful 做事类 /ClassSite{private$sites = array(1 => 'TaoBao', 2 => 'Google', 3 => 'Runoob', 4 => 'Baidu', 5 => 'Weibo', 6 => 'Sina'); publicfunctiongetAllSite(){return$this->sites; }publicfunctiongetSite($id){$site = array($id => ($this->sites[$id]) ? $this->sites[$id] : $this->sites[1]); return$site; }}?>

RESTful Services URI 映射

RESTful Services URI 该当设置为一个直不雅观简短的资源地址。
Apache 做事器的 .htaccess 应设置好对应的 Rewrite 规则。

本实例我们将利用两个 URI 规则:

1、获取所有站点列表:

http://localhost/restexample/site/list/

2、利用 id 获取指定的站点,以下 URI 为获取 id 为 3 的站点:

http://localhost/restexample/site/list/3/

项目的 .htaccess 文件配置规则如下所示:

# 开启 rewrite 功能Options +FollowSymlinksRewriteEngine on# 重写规则RewriteRule ^site/list/$ RestController.php?view=all [nc,qsa]RewriteRule ^site/list/([0-9]+)/$ RestController.php?view=single&id=$1 [nc,qsa]

RESTful Web Service 掌握器

在 .htaccess 文件中,我们通过设置参数 'view' 来获取 RestController.php 文件中对应的要求,通过获取 'view' 不同的参数来分发到不同的方法上。
RestController.php 文件代码如下:

实例

<?phprequire_once(\"大众SiteRestHandler.php\"大众); $view = \"大众\"大众;if(isset($_GET[\"大众view\公众]))$view = $_GET[\公众view\公众];/ RESTful service 掌握器 URL 映射/switch($view){case\"大众all\"大众: // 处理 REST Url /site/list/$siteRestHandler = newSiteRestHandler(); $siteRestHandler->getAllSites(); break; case\"大众single\公众: // 处理 REST Url /site/show/<id>/$siteRestHandler = newSiteRestHandler(); $siteRestHandler->getSite($_GET[\"大众id\"大众]); break; case\公众\公众 : //404 - not found;break;}?>

大略的 RESTful 根本类

以下供应了 RESTful 的一个基类,用于处理相应要求的 HTTP 状态码,SimpleRest.php 文件代码如下:

实例

<?php/ 一个大略的 RESTful web services 基类 我们可以基于这个类来扩展需求/classSimpleRest{private$httpVersion = \公众HTTP/1.1\"大众; publicfunctionsetHttpHeaders($contentType, $statusCode){$statusMessage = $this -> getHttpStatusMessage($statusCode); header($this->httpVersion. \"大众\"大众. $statusCode .\公众\公众. $statusMessage); header(\公众Content-Type:\"大众. $contentType); }publicfunctiongetHttpStatusMessage($statusCode){$httpStatus = array(100 => 'Continue', 101 => 'Switching Protocols', 200 => 'OK', 201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative Information', 204 => 'No Content', 205 => 'Reset Content', 206 => 'Partial Content', 300 => 'Multiple Choices', 301 => 'Moved Permanently', 302 => 'Found', 303 => 'See Other', 304 => 'Not Modified', 305 => 'Use Proxy', 306 => '(Unused)', 307 => 'Temporary Redirect', 400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found', 405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required', 408 => 'Request Timeout', 409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Request Entity Too Large', 414 => 'Request-URI Too Long', 415 => 'Unsupported Media Type', 416 => 'Requested Range Not Satisfiable', 417 => 'Expectation Failed', 500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable', 504 => 'Gateway Timeout', 505 => 'HTTP Version Not Supported'); return($httpStatus[$statusCode]) ? $httpStatus[$statusCode] : $status[500]; }}?>

RESTful Web Service 处理类

以下是一个 RESTful Web Service 处理类 SiteRestHandler.php,继续了上面我们供应的 RESTful 基类,类中通过判断要求的参数来决定返回的 HTTP 状态码及数据格式,实例中我们供应了三种数据格式: \"大众application/json\"大众 、 \公众application/xml\"大众 或 \"大众text/html\公众:

SiteRestHandler.php 文件代码如下:

实例

<?phprequire_once(\"大众SimpleRest.php\"大众);require_once(\"大众Site.php\"大众); classSiteRestHandlerextendsSimpleRest{functiongetAllSites(){$site = newSite(); $rawData = $site->getAllSite(); if(empty($rawData)){$statusCode = 404; $rawData = array('error' => 'No sites found!'); }else{$statusCode = 200; }$requestContentType = $_SERVER['HTTP_ACCEPT']; $this ->setHttpHeaders($requestContentType, $statusCode); if(strpos($requestContentType,'application/json') !== false){$response = $this->encodeJson($rawData); echo$response; }elseif(strpos($requestContentType,'text/html') !== false){$response = $this->encodeHtml($rawData); echo$response; }elseif(strpos($requestContentType,'application/xml') !== false){$response = $this->encodeXml($rawData); echo$response; }}publicfunctionencodeHtml($responseData){$htmlResponse = \"大众<table border='1'>\"大众; foreach($responseDataas$key=>$value){$htmlResponse .= \"大众<tr><td>\公众. $key. \"大众</td><td>\公众. $value. \公众</td></tr>\"大众; }$htmlResponse .= \公众</table>\公众; return$htmlResponse; }publicfunctionencodeJson($responseData){$jsonResponse = json_encode($responseData); return$jsonResponse; }publicfunctionencodeXml($responseData){// 创建 SimpleXMLElement 工具$xml = newSimpleXMLElement('<?xml version=\公众1.0\"大众?><site></site>'); foreach($responseDataas$key=>$value){$xml->addChild($key, $value); }return$xml->asXML(); }publicfunctiongetSite($id){$site = newSite(); $rawData = $site->getSite($id); if(empty($rawData)){$statusCode = 404; $rawData = array('error' => 'No sites found!'); }else{$statusCode = 200; }$requestContentType = $_SERVER['HTTP_ACCEPT']; $this ->setHttpHeaders($requestContentType, $statusCode); if(strpos($requestContentType,'application/json') !== false){$response = $this->encodeJson($rawData); echo$response; }elseif(strpos($requestContentType,'text/html') !== false){$response = $this->encodeHtml($rawData); echo$response; }elseif(strpos($requestContentType,'application/xml') !== false){$response = $this->encodeXml($rawData); echo$response; }}}?>

接下来我们通过 http://localhost/restexample/site/list/ 访问,输出结果如下:

RESTful Web Service 客户端

接下来我们可以利用 Google Chrome 浏览器的 \"大众Advance Rest Client\公众 作为 RESTful Web Service 客户端来要求我们的做事。

实例中要求 http://localhost/restexample/site/list/ 地址,吸收数据类似为 Accept: application/json

要求 id 为 3 的站点 Runoob(菜鸟教程),访问地址为 http://localhost/restexample/site/list/3/,

标签:

相关文章

大数据时代,智慧与创新的双向奔赴

随着互联网的普及和技术的飞速发展,大数据时代已经悄然到来。在这个时代,数据成为了最具价值的资源,而如何有效利用这些数据,推动智慧与...

Web前端 2024-12-16 阅读0 评论0

phpif语句编写技巧_PHP IfElse 语句

PHP 条件语句当您编写代码时,您常常须要为不同的判断实行不同的动作。您可以在代码中利用条件语句来完成此任务。在 PHP 中,供应...

Web前端 2024-12-16 阅读0 评论0

大数据时代,未来之路的引领与创新

在当今这个信息爆炸的时代,大数据已成为推动社会进步的重要力量。从商业决策到政府治理,从科学研究到日常生活,大数据的应用无处不在,正...

Web前端 2024-12-16 阅读0 评论0

若何插入php文件技巧_php的文件上传

这里首先声明一下这一章的内容比较多,比较难,你要抱着和自己去世磕的态度。细微之处不放过,多敲多练是王道。 学习就像爬山,得一步一步...

Web前端 2024-12-16 阅读0 评论0

大数据时代,浩天科技引领行业新风向

随着互联网、物联网、云计算等技术的飞速发展,大数据已经成为当今世界最具影响力的新兴领域之一。浩天科技作为大数据领域的领军企业,凭借...

Web前端 2024-12-16 阅读0 评论0