PHP实现RESTful风格的API实例(二)
Response.php :包含一个Request类,即输出类。根据接收到的Content-Type,将Request类返回的数组拼接成对应的格式,加上header后输出
<?php
/**
* 输出类
*/
class Response
{
const HTTP_VERSION = "HTTP/1.1"; //返回结果
public static 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);
} else if (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;
}
}
index.php :入口文件,调用Request类取得数据后交给Response处理,最后返回结果
<?php
//数据操作类
require('Request.php');
//输出类
require('Response.php');
//获取数据
$data = Request::getRequest();
//输出结果
Response::sendResponse($data);
PHP实现RESTful风格的API实例(二)的更多相关文章
- PHP实现RESTful风格的API实例(三)
接前一篇PHP实现RESTful风格的API实例(二) .htaccess :重写URL,使URL以 /restful/class/1 形式访问文件 Options +FollowSymlinks R ...
- PHP实现RESTful风格的API实例(一)
最近看了一些关于RESTful的资料,自己动手也写了一个RESTful实例,以下是源码 目录详情: restful/ Request.php 数据操作类 Response.php 输出类 index. ...
- Gin实战:Gin+Mysql简单的Restful风格的API(二)
上一篇介绍了Gin+Mysql简单的Restful风格的API,但代码放在一个文件中,还不属于restful风格,接下来将进行进一步的封装. 目录结构 ☁ gin_restful2 tree . ├─ ...
- PHP实现RESTful风格的API实例
原生方式实现,直接撸代码 Request.php :包含一个Request类,即数据操作类.接收到URL的数据后,根据请求URL的方式(GET|POST|PUT|PATCH|DELETE)对数据进行相 ...
- restful风格的API
在说restful风格的API之前,我们要先了解什么是rest.什么是restful.最后才是restful风格的API! PS(REST:是一组架构约束条件和原则,REST是Roy Thomes F ...
- 测开大佬告诉你:如何5分钟快速创建restful风格的API接口-使用django restframework框架
一.思考❓❔ 1.创建API接口难吗? 软件测试工程师: 只测过API接口, 从没创建过 应该需要掌握一门后端开发语言和后端开发框架吧!? 脑容量有限,想想就可怕 2.如何创建API接口呢? 使用Dj ...
- PHP实现Restful风格的API
Restful是一种设计风格而不是标准,比如一个接口原本是这样的: http://www1.qixoo.com/user/view/id/1表示获取id为1的用户信息,如果使用Restful风格,可以 ...
- [01] 浅谈RESTful风格的API
1.什么是RESTful风格的API REST,即Representational State Transfer,可以理解为"(资源的)表现层状态转化". 在网络上,我们通过浏览器 ...
- Gin实战:Gin+Mysql简单的Restful风格的API
我们已经了解了Golang的Gin框架.对于Webservice服务,restful风格几乎一统天下.Gin也天然的支持restful.下面就使用gin写一个简单的服务,麻雀虽小,五脏俱全.我们先以一 ...
随机推荐
- enum类型学习笔记
如:enum color {red,white,yellow,green} 枚举出一种类型中的多个变量 enum本质为int,可以作为int使用: enum默认值为0,1,2... 以上的定义中: e ...
- HTTP版本进化过程
http版本之间的区别以及变化过程[更新中...]
- 导致人生失败的31种原因(转自csdn博客)
人生的最大悲剧,就是孜孜不倦的努力却终于失败! 美国一位学者曾经分析了数千人的经历,结果是总人数的98%都是失败者.并由此归纳了人们失败的主要原因,有31种之多.当你逐项阅读它们时,要一一检查自己,以 ...
- 设置代码Code高亮显示成蓝色
下面方法是让设置的关键字高亮显示,考虑到了注释与字符串的影响,所以备用,以便将来能够用到. private static void ColorizeCode(RichTextBox rtb) { st ...
- 大文件下载控件(down2)-示例更新-Xproer.HttpDownloader
版权所有 2009-2016 荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/down2/i ...
- maven 搜索不到想从本地仓库依赖的jar包--重建本地maven仓库索引
问题:有时候本地仓库有相关的jar包,但是在pom.xml中利用工具搜索不到 菜单栏设置显示Maven Respositorise视图:Windows--Show View--Other.. (对 ...
- 对于git的认识
对于git的认识,我只想说,我不会把他的概念复制下来在博客上再发一遍,我对于他的了解是代源码的开放编写.对于git我会在今后去认真的理解他,不是所谓的抄袭.不会的东西我会尽力去学习.
- Android--全局获取Context
1.Android 提供了一个Application 类,每当应用程序启动的时候,系统就会自动将这个类进行初始化.这里我们可以定制一个自己的Application 类,以便于管理程序内一些全局的状态信 ...
- Android BaseAdapter用法
BaseAdapter 适配器 BaseAdapter是一个抽象类,因此要写自已的适配器,段继承此类,并实现以下方法: @Overridepublic int getCount() { return ...
- python之raise、assert、with/as环境管理器
要故意出发异常,可以使用raise语句,形式如下: raise <name> #manually trigger an exception raise<name>,<v ...