一、api store簡介
api store是屬於一個API彙總平台,可以向外提供各種的資料服務,比較有代表性的有dev store,百度api store和彙總資料等等,這類服務通過向外提供rest api介面來暴露給第三方的開發人員。
api store提供了很多類型的資料服務,有生活常用,應用開發,金融理財,旅遊票務等等api,但是有些介面是有收費的,同時也提供了很多免費的介面,這裡就用手機號碼歸屬地查詢作為一個demo來做api的調用展示。 二、shell對rest介面的支援
在處理restful api這塊,一直是java的強項,特別是近年來流行的spring boot架構,微服務的理念已成為流行的趨勢。這裡介紹用更輕量級的shell來調用api介面,同時溫習一下shell的指令碼吧。
shell處理restful api時,shell支援curl命令,curl命令對http類比發送http請求提供很良好的支援。同時在處理json資料這塊,shell提供了jq工具,對json進行了很好的解釋支援。 三、代碼實現思路 1. 手機號碼歸屬地的api
本文的調用的api來自於百度api store,其官方公布的api介面如下:
curl --get --include'http://apis.baidu.com/apistore/mobilenumber/mobilenumber?phone=15210011578' -H 'apikey:您的apikey'
2.JSON返回樣本 :
{"errNum": 0,"retMsg": "success","retData": {"phone": "15210011578","prefix": "1521001","supplier": "移動 ","province": "北京 ","city": "北京 ","suit": "152卡"}}
3.返回結果json的解析
(1) jq的安裝和使用:
mac的安裝命令:brew install jq
CentOS or Ubuntu安裝命令:
apt-get -qq -y install jq || yum -y install jq (2) jsonStr代表以上的json返回樣本。
echo $jsonStr | jq '.' #格式化json並校正json字串是否合法
(3) 提取json的欄位值
echo $jsonStr | jq '.retMsg' #取得返回的retMsgecho $jsonStr | jq '.retData' | jq '.phone' #取得返回的phone
四、源碼樣本
#!/bin/bash#author:zhengsc#describe:查詢服務#查詢手機號歸屬地#變數定義APIKEY=7531365f3dc9873af649bce596aacb92 #apikeyRESTAPI_PHONE='http://apis.baidu.com/apistore/mobilenumber/mobilenumber?phone=' #調用api的查詢地址PHONEPATTERN='^1[34578][0-9]{9}$' #手機號Regex校正EXIT='^[a-z|A-Z]*$'#菜單showMenu(){read -p "****************************************** mobile number query tool ** author:zhengsc ** date:2016-09-23 ** exit: a-z ******************************************請輸入您的手機號碼:" phone}#調用介面查詢#附json結果返回的格式#{# "errNum": 0,# "retMsg": "success",# "retData": {# "phone": "15270864042",# "prefix": "1527086",# "supplier": "移動",# "province": "江西",# "city": "南昌",# "suit": "152卡"# }#}phoneQuery(){json=$(curl -s --get "$RESTAPI_PHONE${phone}" -H "apikey:${APIKEY}")#echo "${json}" | jq '.'parseJson ${json}}#json解釋parseJson(){jsonStr=$1retMsg=$(echo ${jsonStr} | jq '.retMsg') #返回碼if [ "${retMsg}" = '"success"' ]; thenprovince=$(echo ${jsonStr} | jq '.retData' | jq '.province') #省city=$(echo ${jsonStr} | jq '.retData' | jq '.city') #市supplier=$(echo ${jsonStr} | jq '.retData' | jq '.supplier') #電訊廠商suit=$(echo ${jsonStr} | jq '.retData' | jq '.suit') #電話卡類型echo "歸屬地查詢結果:${province}${city}${supplier}${suit}"elseecho "查詢失敗!"fi}installjq(){ if [[ ! `which jq` ]]; then echo "您的系統沒有安裝jq工具,請先安裝jq工具! " # adaptive for CentOS or Ubuntu apt-get -qq -y install jq || yum -y install jq [ $? -ne 0 ] && echo "jq工具安裝失敗! ";echo "jq工具安裝成功! " echo "$(which jq) 已經找到!"fi}#主函數main(){installjq #安裝jq工具showMenu #調用菜單函數if [[ "${phone}" =~ $EXIT ]]; thenecho "您已退出查詢工具,謝謝使用"exit #按任意字母鍵退出查詢工具fiif [[ "${phone}" =~ $PHONEPATTERN ]]; thenphoneQuery ${phone}elseecho "您輸入的手機號碼格式不正確"showMenufi}#主函數調用main
五、運行截圖
這裡寫圖片描述