一、APP接口简介
APP接口和PHP面向对象中的接口是不一样的。
PHP面向对象中的接口,是一个特殊的抽象类,使用interface关键字定义。下边是一个PHP面向对象接口的例子
/**
*接口里边定义的是一些抽象方法,它在接口中是不实现的
* 接口就是一个标准,一个规范
*/
interface video{
public function getVideos();
public function getCount();
}
class movie implements video{ //一个类要去实现这个接口时,接口中的抽象方法,都必须在该类中实现,一个都不能少
public function getVideos()
{
// TODO: Implement getVideos() method.
echo "getVideos";
}
public function getCount()
{
// TODO: Implement getCount() method.
echo "getCount";
}
}
movie::getVideos();
(1)APP接口
比如说 拉钩网app,一款客户端软件,要开发的话,需要客户端开发工程师(布局页面、获得数据并填充到页面),这里的数据就来自APP接口也叫通信接口,当加载客户端时,会发送一个请求APP地址,这个地址叫“接口地址”,请求之后,接口会返回接口数据,然后客户端开发工程师解析这些数据(比如json格式或xml格式等),最后将数据填充到客户端。客户端开发工程师不会关心接口里边是怎么实现的,他只关心接口地址和接口数据。
(2)APP(通信)接口定义
它需要满足三个条件
1,接口地址。 是为了让客户端发送请求的
2,接口文件。 这个文件是在服务端的,用来处理一些业务逻辑,比如获取首页数据等
3,接口数据。 也就是接口返回的数据
(3)APP如何进行通信
(4)客户端APP通信格式区别
(想了解XML,点这里)
(想了解Json,点这里)
1,可读性方面。XML的可读性更高,因为它的结构非常清晰,用户可以很快速定位到某个节点当中
2,生成数据方面。生成json数据,php中只需要使用json_encode()即可,生成xml则需要拼接字符串,所以相对来说,json更方便
3,传输速度方面。很显然是json数据,因为json数据更小
(5)APP接口做的事情
1,获取数据。从数据库中或缓存中获取数据,然后通过jie’kou数据返回给客户端
2,提交数据。通过接口提交数据给服务器,然后服务器入库处理,或者其它处理
二、封装通信接口方法
<?php
class Res{
const JSON = 'json';
/**
*Json方式封装通信数据方法
*
* @param integer $code 状态码
* @param string $message 提示信息
* @param array $data 数据
* return string
*/
public static function json($code, $message = '', $data = array())
{
if (!is_numeric($code)) {
return '';
}
$result = array(
'code' => $code,
'message' => $message,
'data' => $data
);
return json_encode($result);
}
/**
*XML方式封装通信数据方法
*
* @param integer $code 状态码
* @param string $message 提示信息
* @param array $data 数据
* return string
*/
public static function xml($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>";
echo $xml;
}
public static function xmlToEncode($data){
$xml = $attr = "";
foreach ($data as $key=>$value){
if(is_numeric($key)){
$attr = " id='{$key}'";
$key = "item";
}
$xml .= "<{$key}{$attr}>";
$xml .= is_array($value) ? self::xmlToEncode($value) : "$value";
$xml .= "</$key>\n";
}
return $xml;
}
/**
*综合通信方式封装
*@param integer $code 状态码
*@param string $message 提示信息
*@param array $data 数据
*@param string $type 数据类型 json/xml
*return string
*/
public static function show($code, $message = '', $data = array(), $type = self::JSON){//返回数据格式默认为 json
if(!is_numeric($code)){
return '';
}
$type = isset($_GET['format']) ? $_GET['format'] : $type; //这个是当url中声明数据格式时 www.App.com/response.php?format=json
$result = array(
'code' => $code,
'message' => $message,
'data' => $data
);
if($type == 'json'){
$jsonData = self::json($code, $message, $data);
var_dump($jsonData);
exit;
}elseif ($type == 'array'){//数组形式
var_dump($result);
}elseif ($type == 'xml'){
self::xml($code, $message, $data);
//var_dump($xmlData);
exit;
}
}
}
$data = array(
'id' => 1,
'name' => 'shulv',
'age' => 18,
'type' => array(4,5,6),//注意XML节点不可以是数字 所以想到将其设置成这种形式 <item id="下标">value</item>
'test' => array(1,520, 66 => array(123, 'test'))
);
Res::show(200, "success", $data, 'array');