PHP教程:REST API示例

系统 2080 0

如果你现在正使用iphone、android以及Web等多种平台工作,请看一下这篇文章,它会告诉你如何使用PHP创建RESTful API。Representational state transfer (REST) 是一个用于向不同应用分发数据的软件系统。Web服务系统会以JSON或者XML方式响应状态码。

REST API处理流程

数据库

数据库表users包含了user_id, user_fullname, user_email, user_password 和 user_status字段,十分简单。

1 CREATE TABLE IF NOT EXISTS `users`
2 (
3 `user_id` int (11) NOT NULL AUTO_INCREMENT,
4 `user_fullname` varchar (25) NOT NULL ,
5 `user_email` varchar (50) NOT NULL ,
6 `user_password` varchar (50) NOT NULL ,
7 `user_status` tinyint(1) NOT NULL DEFAULT '0' ,
8 PRIMARY KEY (`user_id`)
9 ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Rest API类:api.php

代码十分简单,你需要修改数据库配置信息,如数据库名、数据库账户以及密码。

1 require_once ( "Rest.inc.php" );
2
3 class API extends REST
4 {
5 public $data = "" ;
6 const DB_SERVER = "localhost" ;
7 const DB_USER = "Database_Username" ;
8 const DB_PASSWORD = "Database_Password" ;
9 const DB = "Database_Name" ;
10
11 private $db = NULL;
12
13 public function __construct()
14 {
15 parent::__construct(); // Init parent contructor
16 $this ->dbConnect(); // Initiate Database connection
17 }
18
19 //Database connection
20 private function dbConnect()
21 {
22 $this ->db = mysql_connect(self::DB_SERVER,self::DB_USER,self::DB_PASSWORD);
23 if ( $this ->db)
24 mysql_select_db(self::DB, $this ->db);
25 }
26
27 //Public method for access api.
28 //This method dynmically call the method based on the query string
29 public function processApi()
30 {
31 $func = strtolower (trim( str_replace ( "/" , "" , $_REQUEST [ 'rquest' ])));
32 if ((int)method_exists( $this , $func ) > 0)
33 $this -> $func ();
34 else
35 $this ->response( '' ,404);
36 // If the method not exist with in this class, response would be "Page not found".
37 }
38
39 private function login()
40 {
41 ..............
42 }
43
44 private function users()
45 {
46 ..............
47 }
48
49 private function deleteUser()
50 {
51 .............
52 }
53
54 //Encode array into JSON
55 private function json( $data )
56 {
57 if ( is_array ( $data )){
58 return json_encode( $data );
59 }
60 }
61 }
62
63 // Initiiate Library
64 $api = new API;
65 $api ->processApi();

提交登陆

通过访问REST API地址http://localhost/rest/login/ 显示从users表中查询出的用户数据。Restful API 的登录状态是根据状态码工作的。如果状态码为200,则登陆成功;否则状态码为204,会显示失败信息。更多的状态码信息请查看示例文件中的Rest.inc.php。

1 private function login()
2 {
3 // Cross validation if the request method is POST else it will return "Not Acceptable" status
4 if ( $this ->get_request_method() != "POST" )
5 {
6 $this ->response( '' ,406);
7 }
8
9 $email = $this ->_request[ 'email' ];
10 $password = $this ->_request[ 'pwd' ];
11
12 // Input validations
13 if (! empty ( $email ) and ! empty ( $password ))
14 {
15 if (filter_var( $email , FILTER_VALIDATE_EMAIL)){
16 $sql = mysql_query( "SELECT user_id, user_fullname, user_email FROM users WHERE user_email = '$email' AND user_password = '" .md5( $password ). "' LIMIT 1" , $this ->db);
17 if (mysql_num_rows( $sql ) > 0){
18 $result = mysql_fetch_array( $sql ,MYSQL_ASSOC);
19
20 // If success everythig is good send header as "OK" and user details
21 $this ->response( $this ->json( $result ), 200);
22 }
23 $this ->response( '' , 204); // If no records "No Content" status
24 }
25 }
26
27 // If invalid inputs "Bad Request" status message and reason
28 $error = array ( 'status' => "Failed" , "msg" => "Invalid Email address or Password" );
29 $this ->response( $this ->json( $error ), 400);
30 }

获取用户信息

通过访问REST API 地址http://localhost/rest/users/ 获取用户的信息。

1 private function users()
2 {
3 // Cross validation if the request method is GET else it will return "Not Acceptable" status
4 if ( $this ->get_request_method() != "GET" )
5 {
6 $this ->response( '' ,406);
7 }
8 $sql = mysql_query( "SELECT user_id, user_fullname, user_email FROM users WHERE user_status = 1" , $this ->db);
9 if (mysql_num_rows( $sql ) > 0)
10 {
11 $result = array ();
12 while ( $rlt = mysql_fetch_array( $sql ,MYSQL_ASSOC))
13 {
14 $result [] = $rlt ;
15 }
16 // If success everythig is good send header as "OK" and return list of users in JSON format
17 $this ->response( $this ->json( $result ), 200);
18 }
19 $this ->response( '' ,204); // If no records "No Content" status
20 }

删除用户信息

根据user_id删除特定用户的信息,只需要访问REST API地址http://localhost/rest/deleteUser/

1 private function deleteUser()
2 {
3
4 if ( $this ->get_request_method() != "DELETE" ){
5 $this ->response( '' ,406);
6 }
7 $id = (int) $this ->_request[ 'id' ];
8 if ( $id > 0)
9 {
10 mysql_query( "DELETE FROM users WHERE user_id = $id" );
11 $success = array ( 'status' => "Success" , "msg" => "Successfully one record deleted." );
12 $this ->response( $this ->json( $success ),200);
13 }
14 else
15 {
16 $this ->response( '' ,204); // If no records "No Content" status
17 }
18 }

Chrome拓展

测试PHP restful API 响应的一个chrome的插件为 Advanced REST client Application

.htaccess code
使用.htaccess使URL更加友好。在demo示例中修改htaccess.txt to .htaccess。

1 < IfModule mod_rewrite.c>
2 RewriteEngine On
3 RewriteCond %{REQUEST_FILENAME} !-d
4 RewriteCond %{REQUEST_FILENAME} !-s
5 RewriteRule ^(.*)$ api.php?rquest=$1 [QSA,NC,L]
6
7 RewriteCond %{REQUEST_FILENAME} -d
8 RewriteRule ^(.*)$ api.php [QSA,NC,L]
9
10 RewriteCond %{REQUEST_FILENAME} -s
11 RewriteRule ^(.*)$ api.php [QSA,NC,L]
12 </ IfModule >

Demo示例下载:

PHP示例源码:REST API示例(104)

原文出自: http://www.9lessons.info/2012/05/create-restful-services-api-in-php.html

本文由PHP爱好者原创翻译!转载请注明链接!


PHP教程:REST API示例


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论