「PHP」行車服務app後端代碼簡析

以前發佈了一篇關於個人行車服務appiOS端代碼簡析的文章:文章地址。 此篇是對這個項目後端PHP代碼的簡析。php

iOS端代碼地址: iOS代碼PHP代碼。若是你以爲有幫助,但願可以點個Star,感謝~mysql

筆者對於PHP學習也剛開始不久,因此此篇不敢妄言指導,只是把這個項目後端代碼的結構、實現講述一遍,但願你們多多指教。
適合想要本身嘗試使用PHP搭建一個API項目的同窗閱讀。git

項目結構

  • 封裝好的公共文件

    • helper/
    • 這個部分包括MySQL交互、JSON包裝函數、`返回結果函數。
  • 各個接口實現文件

    • interface/
    • 這個部分是各個接口的實現文件,由路由文件按需調用。
  • 入口文件,接口路由

    • receiver.php
    • 這個部分是整個項目的路由文件,接收請求,而後分發給各個接口實現文件。

代碼實現

  • 公共文件 helper/

    • common.php
      這個文件封裝了兩個包裝返回結果的函數。
      • returnData ($msg, $code, $data)
        適用於獲取數據類型的接口,它帶有data參數。
        返回結果示例:
        {
          "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": "北三環西路76號附近",
                  "uid": "B0FFHF5BKD",
                "points": "30"
              }]
          }
        }複製代碼
      • returnMsg ($msg, $code)
        適用於僅返回狀態的接口。
        返回結果示例:
        {
          "msg": "添加成功",
          "code": "1"
        }複製代碼
    • jsonHelper.php
      • arrayRecursive(&$array, $function, $apply_to_keys_also = false)函數做用是對數組中的元素遞歸地進行傳入的$function操做。
      • JSON($array)函數用於將數組包裝爲JSON格式。
    • sqlHelper.php
      這個文件中對所使用數據庫名稱、帳戶信息等進行設置,你們能夠按照本身的信息自行在此配置。
  • 路由文件receiver.php

    • 這個文件是整個項目的調用入口,具體接口調用時的url示例即爲:服務器IP地址/DriverEpoch-Server/receiver.php
    • 本文件解析參數中的if參數,而後分發到對應的接口文件。
    • 例如,if=Login,即爲調用登陸接口,分發到登陸接口的實現文件:
      case "Login": require "interface/Login.php"; break;複製代碼
  • 各個接口實現文件interface/

    這部分我對於兩個類型各選取一個接口來說述一下。github

    • 返回狀態類型:AddPlace
      • 這個接口用來爲用戶添加歷史足跡。
      • 參數列表:
        • user_id: 用戶id
        • latitude:緯度
        • longitude:經度
        • place_name:地點名稱
        • place_address:地點地址
      • 很簡單,解析到POST方式傳入的各個參數以後,構建一條mysql語句,做用是向對應的表插入一條數據:
        $sql = "INSERT INTO historyPlaces (user_id, latitude, longitude, place_name, place_address) VALUES ('$user_id', '$latitude', '$longitude', '$place_name', '$place_address')";複製代碼
      • 執行以後,若mysql表示執行成功,則返回JSON格式的成功信息。不然返回失敗信息,此處就要使用前文提到的封裝好的工具函數。
    • 返回狀態+數據類型:GetPlaces
      • 這個接口用於獲取用戶的全部歷史足跡。
      • 參數列表:
        • user_id:用戶id
      • 這種類型的接口比剛剛的稍微複雜一些。拿到參數後,構建一條查詢語句,查詢用戶的全部歷史遺蹟:
        $sql = "SELECT add_time,place_name,place_address FROM historyPlaces WHERE user_id = '$user_id' ORDER BY add_time";複製代碼
      • 取到結果後,若結果條數爲0,則返回結果條數爲0的信息。不然,將mysql返回結果的每一行都包裝成爲數組的一個元素,而後將數組包裝爲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);複製代碼

其餘接口的實現文件大同小異,有一些具體的點你們能夠和我繼續交流。sql

寫在最後:

  • PHP的語法很是簡單,我我的以爲不太須要刻意去看語法,有其餘語言基礎的同窗看幾份代碼就能夠上手寫,敢於嘗試,加油!
  • 我後續會再寫一篇關於本身部署LAMP架構的PHP項目的教程,但願能和前文造成一個本身DIY全端項目的教程。

項目已開源,若是以爲有用,但願點一下star~感謝~
halo數據庫

相關文章
相關標籤/搜索