PHPRESTful-RESTfulWebservice实例-实例

PHP RESTful

REST(英文:Representational State Transfer,简称REST) ,指的是一组构造约束条件和原则。

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

  • 直观简短的资源地址:URI,譬如:http://example.com/resources/。
  • 传输的资源:Web服务同意与返回的网络媒体种类,譬如:JSON,XML,YAM等。
  • 对资源的操作: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 服务类 */Class Site {private $sites = array;public function getAllSite{return $this->sites;}public function getSite{$site = array ? $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//$ RestController.php?view=single&id=$1 [nc,qsa]

RESTful Web Service 控制器

在 .htaccess 文件中,大家通过设置参数 'view' 来获得 RestController.php 文件中对应的请求,通过获得 'view' 不一样的参数来分发到不一样的办法上。RestController.php 文件代码如下:

实例

<?phprequire_once;$view = "";if)$view = $_GET["view"];/* * RESTful service 控制器 * URL 映射*/switch{ case "all":// 处置 REST Url /site/list/$siteRestHandler = new SiteRestHandler;$siteRestHandler->getAllSites;break;case "single":// 处置 REST Url /site/show/<id>/$siteRestHandler = new SiteRestHandler;$siteRestHandler->getSite;break; case "" ://404 - not found;break;}?>

容易的 RESTful 基础类

以下提供了 RESTful 的一个基类,用于处置响应请求的 HTTP 状况码,SimpleRest.php 文件代码如下:

实例

<?php /* * 一个容易的 RESTful web services 基类 * 大家可以基于这个类来扩展需要*/class SimpleRest {private $httpVersion = "HTTP/1.1"; public function setHttpHeaders{$statusMessage = $this -> getHttpStatusMessage;header;header;}public function getHttpStatusMessage{$httpStatus = array',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] : $status[500];}}?>

RESTful Web Service 处置类

以下是一个 RESTful Web Service 处置类 SiteRestHandler.php,继承了上面大家提供的 RESTful 基类,类中通过判断请求的参数来决定返回的 HTTP 状况码及数据格式,实例中大家提供了三种数据格式: "application/json" 、 "application/xml" 或 "text/html":

SiteRestHandler.php 文件代码如下:

实例

<?php require_once;require_once; class SiteRestHandler extends SimpleRest { function getAllSites { $site = new Site;$rawData = $site->getAllSite; if) {$statusCode = 404;$rawData = array;} else {$statusCode = 200;} $requestContentType = $_SERVER['HTTP_ACCEPT'];$this ->setHttpHeaders;if !== false){$response = $this->encodeJson;echo $response;} else if !== false){$response = $this->encodeHtml;echo $response;} else if !== false){$response = $this->encodeXml;echo $response;}}public function encodeHtml {$htmlResponse = "<table border='1'>";foreach {$htmlResponse .= "<tr><td>". $key. "</td><td>". $value. "</td></tr>";}$htmlResponse .= "</table>";return $htmlResponse;}public function encodeJson {$jsonResponse = json_encode;return $jsonResponse;}public function encodeXml {// 创建 SimpleXMLElement 对象$xml = new SimpleXMLElement;foreach {$xml->addChild;}return $xml->asXML;}public function getSite { $site = new Site;$rawData = $site->getSite; if) {$statusCode = 404;$rawData = array;} else {$statusCode = 200;} $requestContentType = $_SERVER['HTTP_ACCEPT'];$this ->setHttpHeaders;if !== false){$response = $this->encodeJson;echo $response;} else if !== false){$response = $this->encodeHtml;echo $response;} else if !== false){$response = $this->encodeXml;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/,

网站源码下载

实例中用到的代码可点击以下按钮下载:

网站源码下载

上一篇:PHP5Filesystem函数-PHPFilesystem简介-安装 下一篇:没有了