-想您所想,多年经验-
白狐广告电话
白狐广告标志
当前位置:网站首页 - 信息中心
什么是网站接口用PHP调用JSON接口以及编写接口的方法
2017-7-28|阅:1023|来自:白狐广告
数据对接、网站接口...在开发网站的过程中经常会提及这样的问题?所谓的网站接口是网站系统中两个独立的服务器进行信息交换的共享边界。

1、服务器之间的共享边界
简单解释,一个网站其实就是一个服务器,网站所展示的新闻、数据、信息都存在自己的服务器中。


但是当两个网站,也就是两台服务器之间,需要数据传输,或者共享某些数据时,就需要一条通道或是一种方法,让两台服务器进行数据交互。



图中的内容,就是我们所说的共享边界,也就是接口内容(接口位于展示内容的A服务器中,提供访问通道和方法)

比较基础的只有两种服务器接口形式,httpservice和webservice,传输数据的格式有json、xml、vdf等

加密方式有sha1、sha256、md5、base64带密钥验签 


2、实用性强的范例接口
(1)、基于oauth2.0的单点登录
当你的网站,需要QQ、微信等第三方账号的登录功能时,如何验证这个用户在QQ和微信中是有账号的呢?
首先,QQ和微信是不会将用户的用户名和密码发给你的网站的,这是非常不安全的。
所以,双方需要验证一些共同信息,这就是签名。

举例说明一下,微信的消息处理。



签名形式




(2)、jquery的ajax跨域数据传输
当你旗下的两个网站,需要一个互通的数据进行共用时,就需要一种方式进行访问(这种数据一般可以对外公开播放,也都是需要公布并让其他用户能访问的信息)

当你需要跨域的时候,那就需要使用服务器语言进行获取(php、java等)。

如果你还是坚持要用javascript,觉得这样获取速度上有优势,那请使用jsonp(记得jsonp的格式和json是不一样的,前面是有function的)。


调用接口都要有一个接口的地址,我们用网上免费的天气预报接口,只是为了学习接口的使用,并不保证准确。目前,准确的接口都已经收费了。我找到的免费地址是:http://www.weather.com.cn/data/sk/101010100.html 。然我们来用这个地址来完成学习吧。

PHP调用JSON接口,有以下五个步骤:
第一步、声明页面编码,UTF-8:
header("Content-type: text/html; charset=utf-8");
第二步、通过curl返回json字符串:
通过curl返回json字符串
通过curl函数获取返回json字符串
返回json字符串
第三步、把返回的字符串转化为php变量:
字符串转化为php变量

第四步、把字符串转化为数组:
用到数组转化函数:
数组转化函数

调用字符串转函数。
调用字符串
以下部分是测试输出:
测试输出
前台显示结果:


第五步、调用数组元素:
通过这个二维数组,获取相应的信息。
二维数组
前台显示:
JSON接口前台扎展示

总结:
从上面的例子中可以看出,一个简单的接口,其实调用起来还是很方便。通过上面的5个步骤,就可以实现。上面的例子中有两个重点,第一个就是crul函数的调用;第二个就是json字符串转化为数组。



下面介绍如何在PHP中编写接口

一、先简单回答两个问题:

1PHP 可以开发客户端?

答:不可以,因为PHP是脚本语言,是负责完成B/S架构C/S架构S部分,即:服务端的开发。(别去纠结GTKWinBinder

2、为什么选择PHP 作为开发服务端的首选?

答:跨平台(可以运行在UNIXLinuxWINDOWSMac OS下)、低消耗(PHP消耗相当少的系统资源)、运行效率高(相对而言)、MySQL的完美搭档,本身是免费开源的。

二、如何使用PHP开发APIApplicationProgramming Interface,应用程序编程接口)呢?

做过API 的人应该了解,其实开发API 比开发WEB 更简洁,但可能逻辑更复杂,因为API 其实就是数据输出,不用呈现页面,所以也就不存在MVCAPI 只有C),

1、和WEB 开发一样,首先需要一些相关的参数,这些参数,都会由客户端传过来,也许是GET 也许是POST,这个需要开发团队相互之间约定好,或者制定统一规范。

2、有了参数,根据应用需求,完成数据处理,例如:任务进度更新、APP内购、一局游戏结束数据提交等等。

3、数据逻辑处理完之后,返回客户端所需要用到的相关数据,例如:任务状态、内购结果、玩家信息等等数据怎么返给客户端?直接输出的形式,如:JSONXMLTEXT 等等。

4、客户端获取到你返回的数据后,在客户端本地和用户进行交互。

临时写的一个简单API 例子:

<?php

$output = array();

$a = @$_GET['a'] ? $_GET['a'] : '';

$uid = @$_GET['uid'] ? $_GET['uid'] : 0;

if (empty($a)) {

$output = array('data'=>NULL, 'info'=>'白狐建站!', 'code'=>-201);

exit(json_encode($output));

}


//走接口

if ($a == 'get_users') {

//检查用户

if ($uid == 0) {

$output = array('data'=>NULL, 'info'=>'The uid is null!', 'code'=>-401);

exit(json_encode($output));

}


//假设$mysql 是数据库

$mysql = array(

10001 => array(

'uid'=>10001,

'vip'=>5,

'nickname' => 'wang',

'email'=>'418808288@qq.com',

'qq'=>418808288,

'gold'=>1500,

'powerplay'=> array('2xp'=>12,'gem'=>12,'bingo'=>5,'keys'=>5,'chest'=>8),

'gems'=> array('red'=>13,'green'=>3,'blue'=>8,'yellow'=>17),

'ctime'=>13152859989,

'lastLogin'=>13810380242,

'level'=>19,

'exp'=>16758,

),

10002 => array(

'uid'=>10002,

'vip'=>50,

'nickname' => 'dalu',

'email'=>'617896996@qq.com',

'qq'=>NULL,

'gold'=>14320,

'powerplay'=> array('2xp'=>1,'gem'=>120,'bingo'=>51,'keys'=>5,'chest'=>8),

'gems'=> array('red'=>13,'green'=>3,'blue'=>8,'yellow'=>17),

'ctime'=>13520623857,

'lastLogin'=>15720366940,

'level'=>112,

'exp'=>167588,

),

10003 => array(

'uid' => 10003,

'vip' => 5,

'nickname' => 'hb0317',

'email' => 'hb0317@126.com',

'qq' => NULL,

'gold' => 1541,

'powerplay'=> array('2xp'=>2,'gem'=>112,'bingo'=>4,'keys'=>7,'chest'=>8),

'gems' => array('red'=>13,'green'=>3,'blue'=>9,'yellow'=>7),

'ctime' => 13693231513,

'lastLogin'=> 13910396104,

'level' => 10,

'exp' => 1758,

),

);


$uidArr = array(10001,10002,10003);

if (in_array($uid, $uidArr, true)) {

$output = array('data' => NULL, 'info'=>'The user does not exist!', 'code' => -402);

exit(json_encode($output));

}


//查询数据库

$userInfo = $mysql[$uid];


//输出数据

$output = array(

'data' => array(

'userInfo' => $userInfo,

'isLogin' => true,//是否首次登陆

'unread' => 4,//未读消息数量

'untask' => 3,//未完成任务

),

'info' => 'Here is the message which, commonly used in popup window', //消息提示,客户端常会用此作为给弹窗信息。

'code' => 200, //成功与失败的代码,一般都是正数或者负数

);

exit(json_encode($output));

} elseif ($a == 'get_games_result') {

//...

die('您正在调get_games_result 接口!');

} elseif ($a == 'upload_avatars') {

//....

die('您正在调upload_avatars 接口!');

92.}


复制代码,点击测试(对于客户端而言,也是直接调用这样的地址):http://www.internetzg.com/api/test/index.phphttp://www.internetzg.com/api/test/index.php?a=get_usershttp://www.internetzg.com/api/test/index.php?a=get_users&uid=10001http://www.internetzg.com/api/test/index.php?a=get_users&uid=10002http://www.internetzg.com/api/test/index.php?a=get_users&uid=10003

三、实际项目中,我们在开发API 应该注意的几个事项(仅供参考):

1、单文件实现多接口的形式有很多种,例如:if..elseif.. switch动态方法(也就是TP的这种访问函数体的形式)

2、对于数据的输出最好用jsonjson具有相当强大的跨平台性,市场上各大主流编程语言都支持json解析,json正在逐步取代xml,成为网络数据的通用格式

3、接口安全,一定要增加接口验证。例如,客户端和服务端针对不同接口统一做好加密方式,服务端在对于每次接口需要都要进行验证。以保证防止接口被恶意刷新或黑客恶意调用,尤其是大型商业应用。

4、对于线上的API 必须保证所有接口正常且关闭所有的错误信息=> error_reporting(0),在输出JSON 时,不能有任何其它输出,否则,客户端将解析数据失败,直接Crash

5、开发API WEB 有一定的区别,如果是WEB 的话,可能代码出错了,不会导致特别严重的错误,也许只是导致数据写入和查询失败,也许导致WEB 的某个部分错位或乱码。但如果是API,直接Crash

6、做接口开发,不建议使用框架开发,原因概括起来有两点

1)客户端一般对服务端的响应速度有极高要求,因此,使用最原生态的PHP 完成接口开发,是最高效的,假如用到了框架,还需要加载各种不需要多余的文件,就好比夏天穿了件冬天的衣服。试想,你在玩手机的时候,使用一个应用随便一个操作,等半天才有动静,你受的了吗?

2)就是上面第4点提到的,框架对于WEB开发,是件很幸福的事,但对于API而言,你实在不敢想象它会给你出什么岔子!最后你将痛苦不堪~~因为很多框架都是为WEB 诞生的(我也很期待有一天能看到专门为开发API 而生的框架或者扩展)这个也有人纠结,接口效率与稳定性,还得看编码的人,有的人可能写的还不如框架跑的快,也有人觉得用框架没什么问题,这里只是建议,关键看自己的实际情况,同时建议代码上线前压测一下说到这。

最后说一下,腾讯微博淘宝等开放平台,其实那些开放平台,所谓的开放,就是给你提供一个这样的接口,你根据他们提供的技术文档,按他们制定的格式和要求,调它们提供的接口文件(一般都是返回JSON或者XML),你就可以获取到他们的相关信息,例如:QQ用户基本信息、淘宝店铺、商品消息等等。然后在根据这些消息,在你的应用里完成交互。其实,ajax 也是调用API 的接口



标 签: PHP调用接口 JSON接口方法 php编写接口

www.internetzg.com Copyright 2017-2018 | 以上内容白狐广告保留解释权,任何个人或单位不得抄袭COPY本公司网站内容,违者必究。

 

↑上一篇文章: 在Windows下如何自动备份MySQL数…
返回目录    ↓下一篇文章: 阿里云虚拟主机465端口发邮件

白狐网站建设 白狐设计专门从事网站建设平面广告设计,专业致力于为企业及个人提供优质网站设计(网站建设、网站改版)网站优化推广域名空间画册设计(企业画册设计、产品画册设计、样本设计)印刷彩页单页设计印刷名片T恤衫设计制作台历挂历设计制作标志设计( LOGO设计、商标设计)产品包装设计制作艺术照片设计等。公司是由一流的设计师和专业的制作人员组成的运营团队,拥有多年的网站及广告设计制作经验,服务客户遍及北京、河北、山东、江苏等地区。
首 页 | 关于白狐 | 网站建设 | 平面广告 | 产品服务 | 合作伙伴 | 人才招聘 | 友情链接 | 网站地图 | 联系我们 | 站内搜索
白狐广告www.internetzg.com 网站最佳分辨率为1024*768 京ICP备06068476号
白狐广告服务电话:010-53312027 
13693231513技术 13522191688业务 15011320345售后 15810850699优化
网站建设,北京网站建设,手机建站,北京网站建设公司 北京白狐广告有限责任公司 版权所有
白狐广告公司地址:北京市朝阳区朝阳路8号朗廷大厦A座312室 邮编:100024
返回白狐广告顶部