23.5.3  WebAPI框架应用

程序框架其实就是一个半成品项目,在应用框架时,核心的服务程序只应用,不需要改动。当然如果有必要,也可以根据项目的需要对框架进行二次开发。本节内容主要基于我们的框架,完成对WebAPI的访问交互。例如,现在有这样一个简单需求,在客户端PHP程序中,需要通过我们自定义的API对远端数据库中的表user(使用本章前面介绍过的表user),进行增、删、改、查等操作。

首先,我们需要在服务器中创建一个user表的操作模型类,通过统一的操作模型对表进行管理。当然,对表操作的数据访问模型可以编写得很“智能”,本例只是为了完成效果,用最简单的方法实现对表user的操作。在项目的根目录创建一个“models”目录,对每个表的操作都在这个目录中创建一个单独的操作类。根据需求只需要对一个表user进行操作,所以只需要在该目录下创建一个user.php的文件,并在文件中声明一个User类。另外,对每个数据表操作的模型类,都需要先连接数据库,所以可以先声明一个父类,把所有共性的表操作都在这个父类中声明。本例只将数据库的连接操作看作共性问题,放在根目录model.php文件声明的Model类中,代码如下所示:

Model类作为所有数据模型的父类,通过connect()方法加载配置文件config.php,根据数据库配置信息连接到数据库,可以让所有子类调用该方法,并完成对数据库的连接操作。我们在models目录中创建的user.php文件,声明的User类继承了Model类,代码如下所示:

在User类中只声明一些对表user进行增、删、改、查的操作方法,如果需要对其他表进行同样的操作,可以再声明一些同样的类文件。User类中的这些方法,可以在控制器中通过创建User类的对象直接进行访问。同样,每个业务操作流程也需要声明一个独立的控制器文件。控制器和其中的操作方法,是通过我们定义的框架,在路由表中和用户的操作请求绑定的。根据用户不同的操作请求,通过路由映射到控制器中对应的方法。按本例的需求,创建一个目录“controllers”,并在该目录下声明一个usercontroller.php文件,并在文件中声明一个UserController类,代码如下所示:

如果有其他的业务需求,可以按本类的格式,再继续添加新的控制器。在本类中声明一些通用操作方法,通过创建数据操作模型User类对象,对表user进行操作,将运行结果再通过Response类返给客户端。

有了控制器,下一步就需要编辑api.php文件中的路由表,将我们声明的接口发布出去。注册路由表信息如下所示:

如果整个项目文件已经上传到Web根目录下,按RESTful API的要求,需要一个独立的域名空间。可以在本机进行简单测试,通过修改Windows系统下的hosts文件,添加一条记录,将域名api.itxdl.cn指定到本机“127.0.0.1”。打开“C:/Windows/System32/drivers/etc/hosts”文件,在最后一行加一条记录,如下所示:

添加完成后直接保存即可生效,当然只能在本机测试使用。可以通过域名提供商购买,并将域名指向自己的服务器地址,也可以在Linux下通过配置DNS服务实现。现在访问API的URL为:

https://api.itxdl.cn/index.php/v1/资源名称?参数

按RESTful API的规范,还需要隐藏主入口文件index.php。这可以通过Web服务器Apache提供的URL rewrite扩展模块实现。在index.php文件所在的同级目录下(本例在Web文档根目录下),创建 “.htaccess”文件,添加几条Apache URL重写指令来实现,文件“.htaccess”的内容如下所示:

文件编辑完成后不用重新启动Web服务器即可生效,如果主入口文件不是放在Web服务器的根目录下的,只需要在第三条index.php前加上所在的路径即可。现在访问API的URL为:

https://api.itxdl.cn/v1/资源名称?参数

到现在自定义的简单API已经开发完成,如果让客户端访问,还需要提供详细的API文档。可以通过www.showdoc.cc平台注册一个账号来管理文档,我们通过简单的表格编写部分自己定义的API文档,如表23-6所示。

表23-6  自己定义的API文档

《细说PHP》第四版 样章 第23章 自定义PHP接口规范 9的更多相关文章

  1. 《细说PHP》第四版 样章 第二章 PHP的应用与发展 1

    <细说PHP>第四版 样章 第二章 PHP的应用与发展 1 学习任何编程语言之前,先了解一下它的应用与发展是很有必要的.从Web开发的历史看来,PHP.Python和Ruby几乎是同时出现 ...

  2. 《java编程思想(第四版)》第一二章学习笔记

    目录 一.Introduction 1.抽象过程 2.面向对象语言(包括Java)的五个基本特性 3.每个对象都提供服务 4.public.private.protected三者的区别 5.Java的 ...

  3. 《细说PHP》 第四版 样章 第二章 PHP的应用与发展 5

    2.5  如何学习PHP PHP以其简单易学的特点,以及敏捷开发的优势,从一个几乎不被人知的开源项目,慢慢成长为技术人员首选的动态Web设计工具,与其他语言相比,PHP表现得更好.更快.更简单易学.尽 ...

  4. 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 11

    23.6  使用第三方接口服务实例 接供服务的第三方接口平台有很多,现在的项目中也经常用到一些第三方接口,如支付宝.微信.短信.邮件接口等,我们需要借助第三方的能力来实现产品的某些功能.如果自己已经掌 ...

  5. 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 8

    23.5.2  架构详解 本例的实现最重要的就是服务层的设计,有两个配置文件config.php和api.php,其中文件config.php是全局的配置文件,用于整个程序全局需要的参数设置.可以根据 ...

  6. 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 6

    23.4  API的设计原则和规范 API是服务提供方和使用方之间对接的通道,前面我们设计的一些简单API的例子,基本上比较随意,没有使用任何规范.设想一下,每个平台都可能存在大量的API,如果API ...

  7. 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 3

    23.2  接口实现的基础 大家都很了解函数在本地应用,通过名称调用函数执行,并通过传递不同参数,函数有不同执行,执行后给调用者返回结果.如果把一个函数做成一个接口远程访问,也需要这几个步骤.使用HT ...

  8. 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 1

    如今的项目开发中,接口是很普遍的应用技术.现在好多项目组都单独设有接口开发人员.像腾讯.微博.淘宝等开放平台,其所谓的开放,就是提供一些可调用的接口,用于获取相关的信息.例如,微信用户基本信息.淘宝店 ...

  9. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 12

    18.9  管理表books实例 在Web项目中,几乎所有模块都要和数据表打交道,而对表的管理无非就是增.删.改.查等操作,所以熟练掌握对表进行管理的这些常见操作是十分有必的.本例为了能更好地展示PD ...

随机推荐

  1. MySQL Error Log 文件丢失导致The server quit without updating PID file启动失败的场景

    今天在做mysql sniff测试的时候,中间重启MySQL实例的过程中,出现了"The server quit without updating PID file"这个经典的错误 ...

  2. diango创建一个app

    创建一个app terminal里执行命令 python manage.py startapp app名称 注册 settings配置 INSTALLED_APPS = [ 'app01', 'app ...

  3. linux/kali安装及更新源以及输入法等配置

    准备工作1.kali 镜像的下载,官网选择对应的版本下载https://www.kali.org/downloads/ 2.VMware的安装,同官网可下载 更新源总结#更新源gedit /etc/a ...

  4. Java之Map接口(双列集合)

    Map集合概述 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对象关系的对 ...

  5. C语言程序设计100例之(21):折半查找

    例21  折半查找 问题描述 顺序查找是一种最简单和最基本的检索方法.其基本思想是:从检索表的一端(如表中第一个记录或最后一个记录)开始,逐个进行记录的关键字和给定值的比较.若某个记录的关键字和给定值 ...

  6. [C++]Game模板-正面视角

    前言 本来是想打一个小游戏的-- 可是打到一半思路断了-- 只打出了模板--先把模板拿出来放着 Code //head #include <iostream> #include <c ...

  7. rmi与rpc的区别

    这里简单说一下RMI和RPC的区别. 什么是RMI RMI(Remote Method Invocation,远程方法调用),能够让在客户端Java虚拟机上的对象像调用本地对象一样调用服务端Java虚 ...

  8. python进程基础点整理

    操作系统 串行: 一个程序完完整整的执行完再执行下一个 并发: 看起来像是同时运行,其实就是程序间的切换频率比较快,看不出来 并行:真正的同时运行 多道技术 空间复用:共用一个内存条,多个进程相互隔离 ...

  9. SpringCloud的入门学习之概念理解、Config配置中心

    1.SpringCloud Config分布式配置中心.分布式系统面临的配置问题. 答:微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务.由于每个 ...

  10. jvm虚拟机笔记<二> 垃圾回收与内存分配

    确定对象已废弃需要两步: 利用可达性分析算法(与GC roots有关联——虚拟机栈中的对象,方法区静态对象,方法区常量对象,本地方法引用的对象)判断是否需要回收. 是否覆盖过finalize方法并执行 ...