寫下這個文章的原因是,我發(fā)現(xiàn)身邊一些的朋友可能是因為之前沒有接觸過API,以至于對API有些不解和抵觸.
因為微信開發(fā)/地圖定位/各種大數(shù)據(jù)的信息查詢,讓接口(api)成為了一個非常常用的工具.這篇文章是我自己的一些理解,由于本人也是個小白,肯定有很多地方不到位,希望能指出.首先,我們從API是什么開始說.
1.API是什么?
維基百科的解釋是:
應(yīng)用程序接口 (Application Programming Interface 簡稱:API)為:“‘電腦操作系統(tǒng)(Operating system)’或‘程序庫’提供給應(yīng)用程序調(diào)用使用的代碼”。其主要目的是讓應(yīng)用程序開發(fā)人員得以調(diào)用一組例程功能授霸,而無須考慮其底層的源代碼為何际插、或理解其內(nèi)部工作機制的細(xì)節(jié)。API本身是抽象的辛辨,它僅定義了一個接口瑟枫,而不涉及應(yīng)用程序在實際實現(xiàn)過程中的具體操作。
簡而言之接口就是一個抽象的,不需要考慮內(nèi)部細(xì)節(jié)的東西.你拿來用就可以了.這么講可能抽象了一些,我們舉個例子:
以百度地圖IP定位的API為例:
服務(wù)地址:
http://api.map.baidu.com/location/ip
接口參數(shù):
返回結(jié)果:
{
address: "CN|北京|北京|None|CHINANET|1|None", #地址
content: #詳細(xì)內(nèi)容
{ address: "北京市", #簡要地址
address_detail: #詳細(xì)地址信息
{ city: "北京市", #城市
city_code: 131, #百度城市代碼
district: "", #區(qū)縣
province: "北京市", #省份
street: "", #街道
street_number: "" #門址
}, point: #百度經(jīng)緯度坐標(biāo)值
{ x: "116.39564504", y: "39.92998578"
}
},
status: 0 #返回狀態(tài)碼
}
<u>那么,服務(wù)地址/接口參數(shù)/返回結(jié)果分別是什么意思呢?</u>
我們一一來理解:
服務(wù)地址: 即我們需要數(shù)據(jù)請求的頁面地址.
請求參數(shù) 有的時候我們不只從接口上取值,我們還需要用一種特殊的方式告訴服務(wù)器,我們需要什么數(shù)據(jù),你給我們需要的就可以了,別瞎給.這種方式通常是URL傳參的形式.比如百度的這個api就可以這樣傳.
http://api.map.baidu.com/location/ip?ak=E4805d16520de693a3fe707cdc962045&ip=202.198.16.3&coor=bd09ll
通過url,我們告訴百度,我們的ak(access key)是:E48....62045,我們要定位的ip是:202.198.16.3,coor是:bd09ll(告訴百度我們需要經(jīng)緯坐標(biāo)).
這就是一中最最常用的使用API的方式.
返回結(jié)果 上面我們通過URL傳參的方式告訴了百度服務(wù)器,我們需要的是IP為202.198.16.3的位置信息,而且需要經(jīng)緯坐標(biāo)值(coor=bd09ll),并且我們的Ak值是對的,這時候,百度就會輸出一個結(jié)果在頁面里,通常是JSON字符串的形式.如:
{
address: "CN|吉林|長春|None|CERNET|1|None",
content: {
address: "吉林省長春市",
address_detail: {
city: "長春市",
city_code: 53,
district: "",
province: "吉林省",
street: "",
street_number: ""
},
point: {
x: "125.31364243", y: "43.89833761"
}
}, status: 0
}
我們可以通過讀取url頁面的形式來獲取返回的json字符串.再應(yīng)用到我們的項目中.
上述就是一個最簡單的API使用,也是最本質(zhì)/常用的一種.(傳值和取值)
從上面的例子中,我們就可以知道,為什么API不需要考慮程序的內(nèi)部細(xì)節(jié)了吧?其實它就好像一個封裝好的電池,我們放到卡槽里用就行了,不需要去了解內(nèi)部結(jié)構(gòu).
對于大型的API內(nèi)部封裝的算法是非常復(fù)雜的.但它的原理并不難,我們自己就可以嘗試著寫上一個小小的API.這里我給個例子:
<?php
#假設(shè)存為index.php到根目錄
header ('content-type:text/html;charset=utf-8');
$con = mysql_connect("localhost","root","root");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db('chaxun',$con);
$token=isset($_GET['token'])?$_GET['token']:"1";
if ($token==123) {
$sql="SELECT * FROM data;";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
$rst[]=$row;
}
$rst_json = json_encode($rst);
echo $rst_json;
}else{
echo "token錯誤!";
}
mysql_close();
?>
上面的例子,
我們API服務(wù)地址就是:http://localhost/index.php
接口參數(shù)我們需要傳一個token=123
返回結(jié)果就是一個查詢數(shù)據(jù)庫的結(jié)果,轉(zhuǎn)換的json字符串.
完整的url拼起來就是:http://localhost/index.php?token=123
看吧,其實寫個接口就這么簡單.
好困,睡了,明天再來補完整.