简介
什么时候需要写app接口,在app客户端,很多地方需要调用数据,这个时候就需要用接口来调用数据库的数据,在与客户端对接,把数据返回给客户端
数据库->数据库|缓存->调用接口->客户端;
APP接口介绍
app通信接口定义需要三部分:
I:接口地址:如http://app.com/api.php?format=xml;
II:接口文件:如api.php处理一些业务逻辑;
III:接口数据;
app如何通讯:
->发送http请求(http://app.com/api.php?format=xml;) ↓
客户端-> <- 服务器
↑ 返回数据 (比较常用的是XML,JSON) <-
XML和JSON格式的区别
XML:扩展标记语言(里面的标签可以自己定义)XML格式统一。跨平台、跨语言。非常适合通信和传输,已成为业界标准。
特点
①必须有一个根节点,且只能有一个根节点,不能有两个。
②结束标签。<test></test> 和<test />都可以
③节点可以自定义
④XML:可读性很高
JSON:是一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.可在不同平台之间进行数据交换.兼容性高,完全独立于语言文本格式.
两种形式:字符串和数组,因为字符串不便于理解一般用数组模式传数据;
特点:
key=>val;{"code":200,"message":"\u6210\u529f\u8fd4\u56de\u6570\u636e","data":{"id":"1","name":"\u5218\u9526\u9f99","type":[4,8,12],"test":{"0":4,"1":44,"88":[2312,"paw"],"name":"hah","asd":"qwe"}}};
JSON:生成数据更方便 只需要json_encode()就可以
JSON:传输速度更快
app接口主要作用:
①获取数据:从数据库或缓存中获取数据,然后通过接口数据返回给客户端.
②提交数据:通过接口提交数据给服务器,然后服务器入库处理等.
JSON方式封装通信接口:
①json数据的转换只需要用一个函数json_encode;(该函数只接受UTF-8编码数据,如果不是则返回空值;)
②通信数据标准格式: code:状态码; message:提示信息; data:返回数据;
③判断状态码是否正确;
④直接调用这个方法,返回数据,则调取接口成功;
<?php
class Response{
<pre name="code" class="html">② public static function json($code,$message='',$data=array()){
③ if(!is_numeric($code)){
return '';
}
$result=array(
'code' => $code,
'message' => $message,
'data' => $data,
);
① echo json_encode($result);
exit;
}
}
$data=array(
'id' => '1',
'name' => '刘锦龙',
'type' => array(4,8,12),
'test' => array(4,44,88=>array(2312,'paw'),'name'=>'hah','asd'=>'qwe'),
);
④Response::json(200,'成功返回数据',$data);
?>
XML方式封装通信接口:
首先学习一下生成XML数据,用字符组装
<pre name="code" class="html"><?php
class Response{
public static function xml(){ header("Content-Type:text/xml");//转换访问类型 $xml="<?xml version='1.0' encoding='UTF-8'?>\n";//xml头信息 $xml.="<root>\n"; $xml.="<code>200</code>\n";
$xml.="<message>数据返回返回</message>\n";
$xml.="</root>"; echo $xml; }
?> 封装xml通信接口:
①封装方式和json方法类似;首先需要通信数据标准格式: code:状态码; message:提示信息; data:返回数据;
②判断状态码是否正确;
③为了正确显示数组数据,需要封装一个方法来处理数组,xmlToEncode;
④访问成功,返回数据;
<?php
class Response{
public static function xmlEncode($code,$message,$data=array()){
② 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'?>\n";
$xml.="<root>\n";
$xml.=self::xmlToEncode($result);
$xml.="</root>\n";
echo $xml;
}
③ public static function xmlToEncode($data){
$xml=$attr='';
foreach($data as $key => $value ){
if(is_numeric($key)){
$attr=" id='$key'";
$key='item';
}else{
$attr="";
}
$xml.="<{$key}{$attr}>";
$xml.=is_array($value)?self::xmlToEncode($value):$value;
$xml.="</{$key}>\n";
}
return $xml;
}
};
$data=array(
'id' => '1',
'name' => '刘锦龙',
'type' => array(4,8,12),
'test' => array(4,44,88=>array(2312,'paw'),'name'=>'hah','asd'=>'qwe'),
);
④Response::show(200,'成功返回数据',$data);
?>
综合方式封装接口
为了区分需要返回的接口类型;在访问之前先判断一下类型再调用;
<pre name="code" class="html"><?php
class Response{
const JSON='json'; public static function show($code,$message='',$data=array(),$type=self::JSON){ if(!is_numeric($code)){ return ''; } $type=isset($_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); }else{ //TODO; } }