php接口和APP(通信)接口的区别
什么是php接口?
接口interface 是一个规定,给人继承用的东西,有点像抽象类
在里面定义的方法,却不去实例化,而需要别的类去implements 它,而且必须一一实现接口定义的所有方法。
例如:
interface Shop
{
public function buy($gid);
public function sell($gid);
public function view($gid);
}
我声明一个shop接口类,定义了三个方法:买(buy),卖(sell),看(view),那么继承此类的所有子类都必须实现这3个方法少一个都 不行,如果子类没有实现这些话,就无法运行。实际上接口类说白了,就是一个类的模板,一个类的规定,如果你属于这类,你就必须遵循我的规定,少一个都不 行,但是具体你怎么去做,我不管,那是你的事,如:
class BaseShop implements Shop
{
public function buy($gid)
{
echo('你购买了ID为 :'.$gid.'的商品');
}
public function sell($gid)
{
echo('你卖了ID为 :'.$gid.'的商品');
}
public function view($gid)
{
echo('你查看了ID为 :'.$gid.'的商品');
}
}
什么是通信接口?
程序设计方面App 是Application 的缩写
在vc++中,app是应用程序的入口和出口,一般在这里处理一些启动和退出程序时需要读取或写入的设置信息,还有设置一些全局变量
接口的组成
基本组成部分
- 接口地址:客户端发送请求或者是接收后台发送过来的数据。
- 接口文件(在服务器端):处理业务逻辑。
- 接口数据。
接口数据类型
目前用来写接口的数据类型比较流行的是json和XML两种类型。
XML:XML 是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(markup)是关键部分。您可以创建内容,然后使用限定标记标记它,从而使每个单词、短语或块成为可识别、可分类的信息。您创建的文件,或文档实例 由元素(标记)和内容构成。当从打印输出读取或以电子形式处理文档时,元素能够帮助更好地理解文档。元素的描述性越强,文档各部分越容易识别。自从出现标记至今,带有标记的内容就有一个优势,即在计算机系统缺失时,仍然可以通过标记理解打印出来数据。
json:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
JSON和XML的区别
我们可以从三个方面进行行分析:
可读性:重我们打印出来的数据结构我们不难看出,XML数据结构是一个树形结构,所有的节点和数据值可以一目了然,而json则是以一个key:values的形式呈现出来,数据少的时候还好说,一旦数据多了根本看不出来。
XML数据结构
JSON数据结构
数据生成:json要比XML便捷,XML的节点必须成对出现,要有始有终。json数据只需要以key/values的形式出项无形中节约了存储空间。
数据传输:在数据传输方面json数据要比XML小所以json的传输效率要比XML要好。
注意:
- json格式只能接受UTF-8编码的数据,其他编码方式的数据会返回null.
- XML的节点不能为数字。
接口编写
通信接口数据标准格式
conde 状态码(200,400等);
message 提示信息(数据返回成功等);
data 返回数据;
以json格式传输数据
Response.php
<?php
class Response{
/**
* 按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
);
echo json_encode($result);
exit;
}
}
?>
ceshi.php
<?php
require_once('./response.php');
$arr = array(
'id'=>1,
'name'=>'zhansan'
);
Response::json('200','success',$arr);
?>
以XML格式传输数据
/**
* 按XML方式输出通信数据
* @param integer $code [状态码]
* @param string $message [提示信息]
* @param array $data [数据]
* return string
*/
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'?>";
$xml.="<root>";
$xml.=self::xmlTOEncode($result);
$xml.="</root>";
echo $xml;
}
/**
* [xmlTOEncode 数据处理]
* @param [array] $data [要处理的数据]
* @return [array] [description]
*/
public static function xmlTOEncode($data)
{
$xml = $attr="";
foreach($data as $key=>$value)
{
if(is_numeric($key)){
$attr.="id={$key}";
$key.="item";//防止节点出现数字报错
}
$xml.="<{$key}>";
$xml.=is_array($value)?self::xmlTOEncode($value):$value;//递归处理数组
$xml.="</{$key}>";
}
return $xml;
}
将格式传输数据写活
/**
* 按综合方式输出通信数据
* @param integer $code [状态码]
* @param string $message [提示信息]
* @param array $data [数据]
* @param strind $type [传输类型]
* return string
*/
const JSON = "json";
public static function show($code,$message='',$data=array(),$type){
if(!is_numeric($code)){
return '';
}
$result = array(
'code'=>$code,
'message'=>$message,
'data'=>$data
);
if($type=='json')
{
self::json($code,$message,$data);
exit;
}elseif($type=='xml')
{
self::xmlEncode($code,$message,$data);
exit;
}
}