Restful是一种设计风格而不是标准,比如一个接口原本是这样的:

http://www1.qixoo.com/user/view/id/1
表示获取id为1的用户信息,如果使用Restful风格,可以变成这样:

http://www1.qixoo.com/user/1
可以很明显的看出这样做的好处:

1、更简洁的URL,对程序员友好

2、不暴露内部代码结构,更安全

那么,如何实现这个接口呢?首先,我们需要接收到/user/1部分。

$path = $_SERVER[‘PATH_INFO‘];
$arr = explode(‘/‘,$path);

print_r($arr);
得到下面的结果:

Array
(
[0] => 
[1] => User
[2] => 1
)
获取到了参数,下面的操作就很简单了:

if($arr[1] == ‘user‘){

$model = new UserModel();
$id = $arr[2];

//读取用户信息
$user_info = $model->find($id);

echo json_encode($user_info);

}
这样,我们就实现了一个Restful风格的API。

下面,我们再看如何实现读取用户列表的接口,传统方式:

http://www1.qixoo.com/user/list
使用Restful风格,可以更加简洁:

http://www1.qixoo.com/user
和读取用户信息的区别是,user后面没有id,所以我们可以在读取部分的基础上做一下修改:

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);
}
}
这样就实现了读取用户列表的接口。

下面再看如何实现增加用户的接口,传统方式:

http://www1.qixoo.com/user/add
Restful风格:

http://www1.qixoo.com/user
和读取用户列表的接口是一样的,怎么区分呢?其实很简单,读取是GET请求,而增加是POST请求,用户信息都存在POST参数中,所以可以对代码进行下面的修改:

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的核心思路,依次类推,我们可以实现编辑用户接口和删除用户接口:

http://www1.qixoo.com/user/1
只要使用不同的请求方式,就能区分开了。我们可以用PUT请求来执行编辑操作,用DELETE请求来执行删除操作。

具体代码就不写了,有兴趣的朋友可以自己尝试实现以下。

在ThinkPHP框架中也提供了对Restful风格的支持,原理也是类似的。

总结一下,Restful风格就是,使用简单的URL和HTTP请求方式来实现接口。

PHP实现Restful风格的API(转)的更多相关文章

  1. PHP实现RESTful风格的API实例(三)

    接前一篇PHP实现RESTful风格的API实例(二) .htaccess :重写URL,使URL以 /restful/class/1 形式访问文件 Options +FollowSymlinks R ...

  2. PHP实现RESTful风格的API实例(二)

    接前一篇PHP实现RESTful风格的API实例(一) Response.php :包含一个Request类,即输出类.根据接收到的Content-Type,将Request类返回的数组拼接成对应的格 ...

  3. PHP实现RESTful风格的API实例(一)

    最近看了一些关于RESTful的资料,自己动手也写了一个RESTful实例,以下是源码 目录详情: restful/ Request.php 数据操作类 Response.php 输出类 index. ...

  4. PHP实现Restful风格的API

    Restful是一种设计风格而不是标准,比如一个接口原本是这样的: http://www1.qixoo.com/user/view/id/1表示获取id为1的用户信息,如果使用Restful风格,可以 ...

  5. restful风格的API

    在说restful风格的API之前,我们要先了解什么是rest.什么是restful.最后才是restful风格的API! PS(REST:是一组架构约束条件和原则,REST是Roy Thomes F ...

  6. [01] 浅谈RESTful风格的API

    1.什么是RESTful风格的API REST,即Representational State Transfer,可以理解为"(资源的)表现层状态转化". 在网络上,我们通过浏览器 ...

  7. Gin实战:Gin+Mysql简单的Restful风格的API(二)

    上一篇介绍了Gin+Mysql简单的Restful风格的API,但代码放在一个文件中,还不属于restful风格,接下来将进行进一步的封装. 目录结构 ☁ gin_restful2 tree . ├─ ...

  8. Gin实战:Gin+Mysql简单的Restful风格的API

    我们已经了解了Golang的Gin框架.对于Webservice服务,restful风格几乎一统天下.Gin也天然的支持restful.下面就使用gin写一个简单的服务,麻雀虽小,五脏俱全.我们先以一 ...

  9. springMvc中restful风格的api路径中把小数点当参数,SpringMvc中url有小数点

    在springMvc web项目中restful风格的api路径中有小数点会被过滤后台拿不到最后一个小数点的问题, 有两种解决方案: 1:在api路径中加入:.+ @RequestMapping(&q ...

  10. Dubbo 03 Restful风格的API

    目录 Dubbo03 restful风格的API 根路径 协议 版本 用HTTP协议里的动词来实现资源的增删改查 用例 swagger(丝袜哥) OpenAPI 资源 编写API文档 整合Spring ...

随机推荐

  1. Spring Boot 2.x基础教程:使用集中式缓存Redis

    之前我们介绍了两种进程内缓存的用法,包括Spring Boot默认使用的ConcurrentMap缓存以及缓存框架EhCache.虽然EhCache已经能够适用很多应用场景,但是由于EhCache是进 ...

  2. 安装Ubuntu 出现ubi partman crashed,ubi-partman failed with exit code 10

    出现这个问题好像是因为硬盘中有遗留的raid信息导致. 在安装选项中添加 nodmraid参数,再启动进行安装就好了 如果不会添加参数可以参考这篇文章:安装ubuntu时黑屏三种解决办法 就和添加 n ...

  3. CopyOnWriteArrayList源码阅读笔记

    简介 ArrayList是开发中使用比较多的集合,它不是线程安全的,CopyOnWriteArrayList就是线程安全版本的ArrayList.CopyOnWriteArrayList同样是通过数组 ...

  4. python基础 Day4

    python Day4 1.列表 列表初识 之前的的三种str.int.bool在有的条件下不够用 str:存储少量的数据. 切片还是对其进行任何操作,获取的内容都是str类型.存储的数据单一. 列表 ...

  5. Spring Boot Jpa 多条件查询+排序+分页

    事情有点多,于是快一个月没写东西了,今天补上上次说的. JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将 ...

  6. 操作系统-文件系统(5)Linux文件系统管理

    主流分区机制有MBR和GPT两种 MBR分区:第一个扇区最重要,里面有:引导代码(Bootstrap code area)及分区表(partition table), 其中Bootstrap code ...

  7. MySQL数据和索引占用空间查询

    MySQL数据和索引占用空间查询 查询所有数据库占用磁盘空间大小的SQL语句 SELECT table_schema, -- 数据库名称 concat( TRUNCATE ( sum( data_le ...

  8. Redis高可用——副本机制

    目录 概念 配置 同步方式 起点 主从握手 部分同步 完全同步 执行完全同步判断条件 完全同步代码实现 为实现Redis服务的高可用,Redis官方为我们提供了副本机制(或称主从复制)和哨兵机制.副本 ...

  9. MyTerm入选北极代码库计划,喜获「Arctic Code Vault Contributor」勋章

  10. 由浅入深理解 IOC 和 DI

    目录 由浅入深理解 IOC 和 DI 开闭原则 OCP(Open Closed Principle) 面向抽象编程 逐步理解实现 IOC 和 DI 的过程(LOL Demo 示例) 比较尴尬的编写程序 ...