标签:
用interface关键字定义,示例:
interface video(){
public function getVideos();
public function getCount();//这都是虚拟的方法
}
接口的实现:【接口中给的所有方法都必须在示例中实现】
class movie implements video{
public function getVideo(){
//do something
}
public function getCount(){
//do something
}
}
接口地址——返回接口数据——解析数据——客户端
APP(通信)接口:
1、接口地址(http://app.com/api.php?format=xml);
2、接口文件(api.php,处理一些业务逻辑);
3、接口数据
APP如何进行通信:
客户端App触发——》发送http请求(接口地址)——》服务器——》返回客户端
返回的数据格式一般为xml或者json
地址被封装在app里面用户不可见,与一般的web不同
XML:扩展标记语言,节点可以自定义(而HTML内标签是不可自定义的),格式统一,可跨平台使用,适合通信和传输。
示例:
<?xml version=”1.0” encoding=”UTF-8”?>
<item>
<title>singwa</title>
<test id=”1”/>
<description>singwa1</description>
<address>beijing</address>
</item>
XML可读性强;JSON生成数据方面、传输速度方面强。
接口作用:获取数据、提交数据。
封装通信接口数据方法
JSON方式封装通信接口:json_encode()【必须是UTF-8的形式】
示例:
<?php
$arr = {
‘id’ => 1;
‘username => Tom’
}
echo json_encode($arr);
iconv(‘UTF-8’,’GBK’,$data)//用于进行编码转化,本例将$data由UTF-8转化为GBK
通信数据标准格式
1、code:200 //状态码
2、message //提示信息
3、data //返回数据
JSON封装数据方法示例(response.php):
<?php
class Respomse{
public static function json($code,$message = ‘’,$data = array()){
if(!is_numeric($code)){
return ‘’;//如果传过来的$code不是数字返回空
}
$result = array(
‘code’ => $code,
‘message’ => $message,
‘data’ => $data
);
echo json_encode($result);
exit;
}
}
在其他文件调用这个接口:
<?php
require_once(‘./response.php’);
$arr = array(
‘id’ => 1,
‘name’ => ‘fareise’
);
Response::json(200,’数据返回成功’,’$arr’);//这样就会返回一个json数据
XML方式封装接口数据方法
PHP生成XML数据的方法
1、组装成字符串
2、使用系统类(DomDocument;XMLWriter;SimpleXML)
示例:
<?php
class Response{
public static function xml(){
header(“Content-Type:text/xml”);//将类型转化为xml的类型
$xml = “<?xml version=’1.0’ encoding=’UTF-8’?>\n”
$xml.=”<root>\n”;
$xml.=”<code>200</code>\n”;
$xml.=”<message>200</message>\n”;
......
$xml.=”</root>”;
echo $xml;
}
}
XML方式封装通信接口
<?php
class Response{
public static function xmlEncode($code,$message,$data){
if(!is_numeric($code)){
return ‘’;
}
$result = array(
‘code’ => $code,
‘message’ => $message,
‘data’ => $data,
);
header(“Content-Type:text/xml”);
$xml = “<?xml version = ‘1.0’ encoding = ‘UTF-8’?>”
$xml .= “<root>”;
$xml .= self::xmlToEncode($result) //通过定义的这个方法对数据进行xm解析
$xml .= “</root>”;
}
publlc static function amlToEncode($data){ // 通过这样的遍历将每一条数据写成标签
$xml = $attr = “”;
foreach($data as $key => $value){//如果key是数字则转化为<item id=”1”>的形式
if(is_numeric($key)){
$attr = “id = ‘{$key}’”;
$key = “item”;
}
$xml .= “<{$key}{$attr}>”;
//如果是数组,采用递归的方式把数组内每一个元素都用标签输出
$xml .= is_array($value)?self::xmlToEncode($value):$value;
$xml .= “</{key}>”
}
}
}
调用示例:
$data = array(
‘id’ => 1,
‘name’ => fareise
‘type => array(4,5,6)’
)
Response::xmlEncode(200,’sucess’,$data);
综合通信封装方法(两种都支持)
在前两个方法都写好的基础上:
const JSON = ‘json’//设定默认值
public static function show($code,$message = ‘’,$data = array(),$type=self::JSON){
if(!is_numeric($code)){
return ‘’;
}
$type = $_GET[‘format’]?$_GET[‘format’]:self””JSON;
$result = array(
‘code’ => $code,
‘message’ => $message,
‘data’ => $data
);
if($type == ’json’){
self::json($code,$message,$data);
exit;
}elseif($type == ‘array’){
var dump($result)
}elseif($type == ‘xml’){
self::xmlEncode($code,$message,$data);
exit;
}else{
//TODO
}
}
标签:
原文地址:http://my.oschina.net/u/2445805/blog/501166