Restful是一种设计风格而不是标准,比如一个接口原本是这样的:
1
|
http:
//www.test.com/user/view/id/1
|
表示获取id为1的用户信息,如果使用Restful风格,可以变成这样:
1
|
http:
//www.test.com/user/1
|
可以很明显的看出这样做的好处:
1、更简洁的URL,对程序员友好
2、不暴露内部代码结构,更安全
那么,如何实现这个接口呢?首先,我们需要接收到/user/1部分。
1
2
3
4
|
$path
=
$_SERVER
[
'PATH_INFO'
];
$arr
=
explode
(
'/'
,
$path
);
print_r(
$arr
);
|
得到下面的结果:
1
2
3
4
5
6
|
Array
(
[0] =>
[1] => User
[2] => 1
)
|
获取到了参数,下面的操作就很简单了:
1
2
3
4
5
6
7
8
9
10
11
|
if
(
$arr
[1] ==
'user'
){
$model
=
new
UserModel();
$id
=
$arr
[2];
//读取用户信息
$user_info
=
$model
->find(
$id
);
echo
json_encode(
$user_info
);
}
|
这样,我们就实现了一个Restful风格的API。
下面,我们再看如何实现读取用户列表的接口,传统方式:
1
|
http:
//www.test.com/user/list
|
使用Restful风格,可以更加简洁:
1
|
http:
//www.test.com/user
|
和读取用户信息的区别是,user后面没有id,所以我们可以在读取部分的基础上做一下修改:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
if
(
$arr
[1] ==
'user'
){
$model
=
new
UserModel();
$id
=
$arr
[2];
if
(
$id
){
//读取用户信息
$user_info
=
$model
->find(
$id
);
echo
json_encode(
$user_info
);
}
else
{
//读取用户列表
$user_list
=
$model
->select();
echo
json_encode(
$user_list
);
}
}
|
这样就实现了读取用户列表的接口。
下面再看如何实现增加用户的接口,传统方式:
1
|
http:
//www.test.com/user/add
|
Restful风格:
1
|
http:
//www.test.com/user
|
和读取用户列表的接口是一样的,怎么区分呢?其实很简单,读取是GET请求,而增加是POST请求,用户信息都存在POST参数中,所以可以对代码进行下面的修改:
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
|
if
(
$arr
[1] ==
'user'
){
$model
=
new
UserModel();
$id
=
$arr
[2];
if
(
$id
){
//读取用户信息
$user_info
=
$model
->find(
$id
);
echo
json_encode(
$user_info
);
}
else
{
if
(IS_POST){
//增加用户
$res
=
$model
->add(
$_POST
);
if
(
$res
){
echo
'success'
;
}
else
{
echo
'fail'
;
}
}
else
{
//读取用户列表
$user_list
=
$model
->select();
echo
json_encode(
$user_list
);
}
}
}
|
同样的接口,可以依据HTTP请求方式来执行不同的逻辑。
这就是实现Restful风格API的核心思路,依次类推,我们可以实现编辑用户接口和删除用户接口:
1
|
http:
//www.test.com/user/1
|
只要使用不同的请求方式,就能区分开了。我们可以用PUT请求来执行编辑操作,用DELETE请求来执行删除操作。
具体代码就不写了,有兴趣的朋友可以自己尝试实现以下。
在ThinkPHP框架中也提供了对Restful风格的支持,原理也是类似的。
总结一下,Restful风格就是,使用简单的URL和HTTP请求方式来实现接口。