之前发布了一篇关于我的行车服务appiOS端代码简析的文章:文章地址。 此篇是对这个项目后端PHP代码的简析。

iOS端代码地址: iOS代码PHP代码。如果你觉得有帮助,希望能够点个Star,感谢~

笔者对于PHP学习也刚开始不久,所以此篇不敢妄言指导,只是把这个项目后端代码的结构、实现讲述一遍,希望大家多多指教。
适合想要自己尝试使用PHP搭建一个API项目的同学阅读。

项目结构

  • 封装好的公共文件

    • heloper/
    • 这个部分包括MySQL交互、JSON包装函数、`返回结果函数。
  • 各个接口实现文件

    • interface/
    • 这个部分是各个接口的实现文件,由路由文件按需调用。
  • 入口文件,接口路由

    • receiver.php
    • 这个部分是整个项目的路由文件,接收请求,然后分发给各个接口实现文件。

代码实现

  • 公共文件 heloper/

    • common.php

      这个文件封装了两个包装返回结果的函数。

      • returnData ($msg, $code, $data)
        适用于获取数据类型的接口,它带有data参数。
        返回结果示例:

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        {
        "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)
        适用于仅返回状态的接口。
        返回结果示例:

        1
        2
        3
        4
        {
        "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,即为调用登录接口,分发到登录接口的实现文件:
      1
      case "Login": require "interface/Login.php"; break;
  • 各个接口实现文件interface/

    这部分我对于两个类型各选取一个接口来讲述一下。

    • 返回状态类型:AddPlace
      • 这个接口用来为用户添加历史足迹。
      • 参数列表:
        • user_id: 用户id
        • latitude:纬度
        • longitude:经度
        • place_name:地点名称
        • place_address:地点地址
      • 很简单,解析到POST方式传入的各个参数之后,构建一条mysql语句,作用是向对应的表插入一条数据:

        1
        $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
      • 这种类型的接口比刚刚的稍微复杂一些。拿到参数后,构建一条查询语句,查询用户的所有历史遗迹:

        1
        $sql = "SELECT add_time,place_name,place_address FROM historyPlaces WHERE user_id = '$user_id' ORDER BY add_time";
      • 取到结果后,若结果条数为0,则返回结果条数为0的信息。否则,将mysql返回结果的每一行都包装成为数组的一个元素,然后将数组包装为JSON,返回给客户端。

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        $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);

其他接口的实现文件大同小异,有一些具体的点大家可以和我继续交流。

写在最后:

  • PHP的语法非常简单,我个人觉得不太需要刻意去看语法,有其他语言基础的同学看几份代码就可以上手写,勇于尝试,加油!
  • 我后续会再写一篇关于自己部署LAMP架构的PHP项目的教程,希望能和前文形成一个自己DIY全端项目的教程。

项目已开源,如果觉得有用,希望点一下star~感谢~
halo