很多网站提供了对外的API,为什么要使用API呢?
如果我的网站卖mp3,而我找另外一个卖笔记本电脑的网站合作,希望我能够在他们的网站卖我的mp3,如果他们答应的话,就出现了一些问题要解决。
首先是如果我的网站的mp3产品数据如何放入他们的网站?如果一次性操作没问题,但是我的产品会更新的,难道每次让他们手工添加!
如果有人在他们的网站上购买,应该是他们的客户,但是如何自动通知我处理订单?
尽管有一些方法可以处理,比如页面互相跳转,但光靠这样不是很恰当。
所以我要提供API让对方网站使用。
我们知道可以在PHP页面的后面添加参数,比如index.php?action=product&id=134,这样可以知道操作方法是查询(action=article),查询的对象的是id为134的产品(id=134)。
不过各种网站定义动作各不相同,有的用do=product,有的用work=showproduct。暂且不说查询的是产品还是其他的东西,对于任何操作而言,总是针对某些数据,而这些数据的操作方法归纳起来,主要是四种:新增,修改,查询,删除,这就相当于数据库的insert,update,select,delete。
为了统一操作方法,我们可以用一种特殊的风格来进行处理,这就是REST。
完整的REST介绍涉及很多东西,也比较抽象,这里讨论基本的概念和实现方法。
虽然各种网站用不同的语言(PHP,ASP,JSP等等),但是一般都是用http协议进行传输,而且常用的两种数据操作方法是通用的:GET和POST。
这样一来,我们就获得了不同网站进行通讯的一个标准的方法,就是看发出请求的方法。我们可以把GET方法表示查询,POST表示新增。
GET一般是通过URL后面加上参数来传送(表单也可使用),POST一般用于表单。
那么修改和删除呢?其实还有两种发送请求的方法:PUT和DELETE,我们可以把PUT方法表示修改,DELETE表示删除。
先不考虑如何发送PUT和DELETE,我们有了通用的表达数据操作方法的统一方式:
| 操作方法 | 传输方法 |
| 新增 | POST |
| 查询 | GET |
| 修改 | PUT |
| 删除 | DELETE |
有了标准,现在就可以去实践了。可是如果我是PHP网站,对方是ASP网站,我怎么和对方的程序员配合呢?
那么就只能抛开服务器语言,用web2.0时代的交流语言:AJAX。
为了不离开正题太远,我不讨论一些问题,比如AJAX的跨域问题,同时也只使用最简单的AJAX代码。当然也不讨论XML的处理。
我们可以给他四个js代码(实际过程当然不会用那么傻的方式),处理四种数据操作方法。同时我们自己的网站也要加一些PHP代码。
1、查询数据:
javascrīpt代码:
<scrīpt language="Javascrīpt" type="text/Javascrīpt">
var requestObj = new XMLHTTPRequest();
//假设要查询的中国生产的mp3
var case = "from=china";
//注意这里的方法是GET,假设API的页面是mp3.php,我们把参数加在后面。
requestObj.open("GET", "mp3.php?"+case, true);
//对数据编码
requestObj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
//定义查询数据传送回来的处理函数为process
requestObj.onreadystatechange = process;
requestObj.send(null);
</scrīpt>
PHP代码:
if($_SERVER['REQUEST_METHOD']=="GET")
{
/*
这个时候$_GET数组里面就有了$_GET["from"],
假设数据在数据库,我们就查询符合条件的参数,然后以xml格式输出。
如果不清楚PHP如何处理xml,可以参考我的xml栏目,里面有simpleXML用法介绍。
*/
}
2、新增数据
javascrīpt代码:
<scrīpt language="Javascrīpt" type="text/Javascrīpt">
var requestObj = new XMLHTTPRequest();
//假设用户id为59的用户,购买的产品id为213的东西
var newData = "userid=59&productid=213";
//注意这里的方法是POST,假设API的页面是mp3.php。
requestObj.open("POST", "mp3.php", true);
//对数据编码
requestObj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
//注意发送数据newData
requestObj.send(newData);
</scrīpt>
PHP代码:
if($_SERVER['REQUEST_METHOD']=="POST")
{
/*
这个时候$_POST数组里面就有了发送过来的$_POST["userid"]和$_POST["productid"],
这时候我们就把数据插入数据库
*/
}
喘口气,继续写,有语音输入就好了