之前發(fā)布了一篇關于我的
行車服務
appiOS
端代碼簡析的文章:文章地址绘证。 此篇是對這個項目后端PHP
代碼的簡析镜廉。
iOS端代碼地址: iOS代碼,PHP代碼菱鸥。如果你覺得有幫助,希望能夠點個Star
躏鱼,感謝~
筆者對于PHP
學習也剛開始不久氮采,所以此篇不敢妄言指導,只是把這個項目后端代碼的結構染苛、實現(xiàn)講述一遍鹊漠,希望大家多多指教。
適合想要自己嘗試使用PHP
搭建一個API
項目的同學閱讀茶行。
項目結構
-
封裝好的公共文件
-
helper/
- 這個部分包括
MySQL
交互躯概、JSON
包裝函數(shù)、`返回結果函數(shù)畔师。
-
-
各個接口實現(xiàn)文件
-
interface/
- 這個部分是各個接口的實現(xiàn)文件娶靡,由路由文件按需調(diào)用。
-
-
入口文件看锉,接口路由
-
receiver.php
- 這個部分是整個項目的路由文件姿锭,接收請求,然后分發(fā)給各個接口實現(xiàn)文件伯铣。
-
代碼實現(xiàn)
-
公共文件
helper/
:-
common.php
:
-
returnData ($msg, $code, $data)
:
適用于獲取數(shù)據(jù)類型的接口,它帶有data
參數(shù)腔寡。
返回結果示例:
{ "msg": "ok", "code": "1", "data": { "count": "3", "points_list": [{ "id": "19", "poi_name": "sss", "poi_address": "sss", "uid": "fuck", "points": "30" }, { "id": "25", "poi_name": "洗車裝飾服務", "poi_address": "北三環(huán)西路76號附近", "uid": "B0FFHF5BKD", "points": "30" }] }
-
}
- `returnMsg ($msg, $code)`: 適用于僅返回狀態(tài)的接口跃巡。 返回結果示例:
{
"msg": "添加成功",
"code": "1"
}
```
-
jsonHelper.php
:-
arrayRecursive(&$array, $function, $apply_to_keys_also = false)
函數(shù)作用是對數(shù)組中的元素遞歸地進行傳入的$function
操作赁咙。 -
JSON($array)
函數(shù)用于將數(shù)組包裝為JSON
格式笛粘。
-
-
sqlHelper.php
:這個文件中對所使用數(shù)據(jù)庫名稱、賬戶信息等進行設置郑兴,大家可以按照自己的信息自行在此配置犀斋。
-
路由文件
receiver.php
:- 這個文件是整個項目的調(diào)用入口贝乎,具體接口調(diào)用時的
url
示例即為:服務器IP地址/DriverEpoch-Server/receiver.php
。 - 本文件解析參數(shù)中的
if
參數(shù)叽粹,然后分發(fā)到對應的接口文件览效。 - 例如,
if=Login
虫几,即為調(diào)用登錄接口锤灿,分發(fā)到登錄接口的實現(xiàn)文件:
case "Login": require "interface/Login.php"; break;
- 這個文件是整個項目的調(diào)用入口贝乎,具體接口調(diào)用時的
-
各個接口實現(xiàn)文件
interface/
:這部分我對于兩個類型各選取一個接口來講述一下。
-
返回狀態(tài)類型:
AddPlace
:- 這個接口用來為用戶添加歷史足跡辆脸。
- 參數(shù)列表:
- user_id: 用戶id
- latitude:緯度
- longitude:經(jīng)度
- place_name:地點名稱
- place_address:地點地址
- 很簡單但校,解析到
POST
方式傳入的各個參數(shù)之后,構建一條mysql
語句啡氢,作用是向對應的表插入一條數(shù)據(jù):$sql = "INSERT INTO historyPlaces (user_id, latitude, longitude, place_name, place_address) VALUES ('$user_id', '$latitude', '$longitude', '$place_name', '$place_address')";
- 執(zhí)行之后状囱,若
mysql
表示執(zhí)行成功,則返回JSON
格式的成功信息倘是。否則返回失敗信息亭枷,此處就要使用前文提到的封裝好的工具函數(shù)。
-
返回狀態(tài)+數(shù)據(jù)類型:
GetPlaces
:- 這個接口用于獲取用戶的所有歷史足跡搀崭。
- 參數(shù)列表:
- user_id:用戶id
- 這種類型的接口比剛剛的稍微復雜一些叨粘。拿到參數(shù)后,構建一條查詢語句瘤睹,查詢用戶的所有歷史遺跡:
$sql = "SELECT add_time,place_name,place_address FROM historyPlaces WHERE user_id = '$user_id' ORDER BY add_time";
- 取到結果后升敲,若結果條數(shù)為0,則返回結果條數(shù)為0的信息轰传。否則冻晤,將
mysql
返回結果的每一行都包裝成為數(shù)組的一個元素,然后將數(shù)組包裝為JSON
绸吸,返回給客戶端鼻弧。
$places_list = null; $i = 0; $num = mysqli_num_rows($sqlResult); while($row = mysqli_fetch_array($sqlResult)) { $places_list[$i]['add_time'] = $row['add_time']; $places_list[$i]['place_name'] = $row['place_name']; $places_list[$i]['place_address'] = $row['place_address']; $i++; if ($i >= $num){ break; } } $data['count'] = $i; $data['places_list'] = $places_list; returnData("ok", 1, $data);
-
其他接口的實現(xiàn)文件大同小異,有一些具體的點大家可以和我繼續(xù)交流锦茁。
寫在最后:
PHP
的語法非常簡單攘轩,我個人覺得不太需要刻意去看語法,有其他語言基礎的同學看幾份代碼就可以上手寫码俩,勇于嘗試度帮,加油!- 我后續(xù)會再寫一篇關于自己部署
LAMP
架構的PHP
項目的教程,希望能和前文形成一個自己DIY全端項目的教程笨篷。
項目已開源瞳秽,如果覺得有用,希望點一下star
感謝
halo