lieoo's blog

记录第一个 PHP 接口 (代码)

不知道有多少人和我一样,从来都不喜欢从 “Hello world!” 开始,总是觉得不满足,也没有成就感,所以自己更偏向于直接照着网上现成代码,直接手敲写一遍,正是所谓“不管怎么样,先跑起来再说”,然后再慢慢理解渗透,我觉得这种方式更适合我这种希望获得较大成就感的人,这种方式更适合我自己,让我进步更快。

所以以下代码片段推荐以我的方式去操作。

根据上一篇文章,我们的服务器已经支持了 PHP 的编译环境,PHP 文件默认打开方式是 .php 结尾。
所以我们直接将搭建完成的站点目录下的 index.html 直接重命名为 index.php

需要以列表的形式展现文件,平铺形式无法重命名 😓

选择编辑 index.php 文件,先将输入至在线编辑器里完成效果,一会再对于代码进行解释分析:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
//A
$output = array();
$a = $_GET['a'] ? $_GET['a'] : '';
$uid = $_GET['uid'] ? $_GET['uid'] : 0;
//B
if ($a == 'getappstatus') {
//先假设 $mysql 是数据库 增查删改 操作都应该在此实现
$mysql = array(
10001 =>'https://www.fuckbaidu.com',
10002 =>'https://www.google.com',
10003 => 'https://stackoverflow.com',
);
//C
$output = array(
'url' => $mysql[$uid]
);
exit(json_encode($output));
}

编辑完成后直接点击保存,这时就可以感觉到 PHP 作为世界上最好的语言优势 -> 不需要部署,直接保存就可以分分钟上线!

可以直接访问我的接口(method:GET)
http://23.106.139.64/?a=getappstatus&uid=10001
http://23.106.139.64/?a=getappstatus&uid=10002
http://23.106.139.64/?a=getappstatus&uid=10003

根据 uid 传递参数不同 返回不同的链接 URL 非常不完美的实现了本次需求。

代码分析

<?php 声明标记这是一个 PHP 脚本
A 相当于定义以及初始化全局变量
B 根据接口传递进来的全局参数 $a 进行 数据库查找 操作,不同业务,不同页面,应该使用不同库表,在此不多解释
C 根据库表查询 传递key 返回value ,以 JSON 数据交换的形式格式化编码对象,返回给客户端后,退出脚本,完成一次操作。

完美的接口

刚刚的代码提到,目前实现的功能需求是不完美的,有些情况没有考虑到,举两个例子:

1.客户端 Request http://23.106.139.64/?a=getappstatus&uid=
假如客户端没有传递任何 uid 参数的话,这样我们的接口返回就是一个 null 对象,类型对于客户端是非常危险的,可能会造成客户端无法解析导致 Crash 崩溃现象。

2.客户端 Request http://23.106.139.64/?a=getappstatus&uid=123456
假如客户端传递的参数是库表里面不存在的话,返回的也是一个 null 对象,情况和第一种一样。

这时候我们来完善一下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
$output = array();
$a = $_GET['a'] ? $_GET['a'] : '';
$uid = $_GET['uid'] ? $_GET['uid'] : 0;
if (empty($a)) {
$output = array(
'url'=> '',
'info'=> '坑爹啊!',
'code'=> -201);
exit(json_encode($output));
}
if ($a == 'getappstatus') {
//检查参数
if ($uid == 0) {
$output = array(
'url'=>'',
'info'=>'The uid is null!',
'code'=> -401
);
exit(json_encode($output));
}
$mysql = array(
10001 =>'https://www.fuckbaidu.com',
10002 =>'https://www.google.com',
10003 => 'https://stackoverflow.com',
);
if (empty($mysql[$uid])) {
$output = array(
'url'=> '',
'info'=> 'The uid does not exist!',
'code'=> -201);
exit(json_encode($output));
}
$output = array(
'url'=> $mysql[$uid],
'info' => '',
'code' => 200,
);
exit(json_encode($output));
}

这时我们的目的就达到了!完成了此次的需求任务。并且完美的实现了服务端接口
可以访问:
不带任何参数 http://23.106.139.64/
传递空参数 -> http://23.106.139.64/?a=getappstatus&uid=
传递异常参数 -> http://23.106.139.64/?a=getappstatus&uid=123456
正常传参 ->http://23.106.139.64/?a=getappstatus&uid=10001

耗时两小时,可以收拾收拾东西下班了。
可以在简历上写上几个大字: 熟悉 PHP 接口开发了