《细说PHP》第四版 样章 第23章 自定义PHP接口规范 3
23.2 接口实现的基础
大家都很了解函数在本地应用,通过名称调用函数执行,并通过传递不同参数,函数有不同执行,执行后给调用者返回结果。如果把一个函数做成一个接口远程访问,也需要这几个步骤。使用HTTP的GET或POST等,通过URL并附带参数请求接口,接口执行后将返回值传回远端的调用者。请求者可以是浏览器,可以是PHP或其他语言程序,也可以是页面中的Ajax等。当然,接口返回值的格式也是统一的,要让各种语言和设备的请求者可以操作,通常使用XML或JSON格式作为返回数据。
23.2.1 实现接口的访问流程
下面,我们实现一个简单的开放接口,构建一个函数通过指定ID获取一条数据返回。模拟一张简单用户数据表“user”,并插入几条数据。模拟MySQL数据库中user表的3条数据如表23-1所示。
表23-1 模拟MySQL数据库中user表的3条数据

在Web服务器中,创建一个名为“userapi.php”的脚本文件。文件中声明一个show()函数,用于从数据表“user”中获取一条指定的记录。代码如下所示:

在上面的代码中,如果用户通过URL传递正确的id参数,可以获取user表中对应的一条记录,并以关联数组格式返回。如果参数传递不正确或数据表中没有查找到数据,则也以数组格式返回相应的错误码和错误消息。通过浏览器访问接口文件演示如图23-6所示。

图23-6 通过浏览器访问接口文件演示
本例其实算不上实现一个开放接口,就是用浏览器远程访问一个PHP函数,所以还需要对本例继续进行加工,本例只是让读者了解基本的接口访问流程。
23.2.2 处理接口的返回值
上例中,接口返回的是PHP数组,使用浏览器显示给用户没有问题,但如果能遍历数组加上格式输出就更好了。如果不是浏览调用接口,而是在别的PHP程序中或其他编程语言中,以及App中调用这个接口,返回PHP数组格式不一定合适。接口的返回数据格式,一定要让所有的编程语言都可以解析。通常使用XML或JSON作为数据交互格式。下面,简单介绍这两种格式及其使用方法。
Ø XML格式
扩展标记语言(Extensible Markup Language,XML),用于标记电子文件,使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML使用DTD(文档类型定义,Document Type Definition)来组织数据,格式统一,跨平台和语言,早已成为业界公认的标准。XML非常适合Web传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。一条用户信息使用XML语言定义如下:

将上例userapi.php文件进行简单修改,输出XML格式的数据,作为接口的返回值。PHP将数组转换成XML格式的方法有很多,最简单的办法是遍历数组,然后将数组元素中的“下标”和“值”转换成XML节点,再直接输出,修改后代码片段如下所示:

在上例中,自定义一个函数arrayToXml(),用于将数组转换成XML格式。同样使用浏览器通过正确的URL测试,会在浏览器中显示一条XML格式的用户信息。如果URL中没有带ID参数,或数据库中没有对应的数据,在浏览器中也会用XML格式显示错误信息。如果在其他平台或语言中访问同样的URL,也可以操作这样XML格式的数据。
Ø JSON格式
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有良好的可读性和便于快速编写的特性,可在不同平台之间进行数据交换。JSON采用兼容性很高的、完全独立于语言的文本格式,同时也具备类似于所有编程语言体系的行为。这些特性使JSON成为理想的数据交换语言。一条用户信息使用JSON格式定义如下所示。

中文和特殊符号返回的结果会转成unicode编码:
用户信息:
{"id":"1","username":"\u9ad8\u6d1b\u5cf0","sex":"\u7537","age":"30","description":"\u5f88\u5e05"}
错误消息:
{"errorno":"SN002","errormsg":"\u53c2\u6570ID\u9519\u8bef\uff01"}
将上例userapi.php文件进行简单修改,输出JSON格式,作为接口的返回值。PHP函数库中自带一个json_encode()函数,可以直接将数组转换成JSON格式的字符串。修改后代码片段如下所示:

使用同样的方法进行测试,在其他平台或语言中访问相同的URL,也可以操作这样JSON格式的数据。
JSON和 XML非常相似,它们都试图通过建立一种简单、人类可读的格式存储数据,让所有编程语言都可以处理,也都可以作为接口的数据返回值,在接口中应用也都能跨平台和语言。JSON在过去几年中已变得非常受欢迎,虽然可读性比XML略差一些,但存储和传输相同的信息,JSON确实需要更少的空间,解析速度更快。另外,JSON在设计时是为Web考虑的,所以它在JavaScript中使用得很好,很容易用JSON中的信息填充一个Web页面。本章仅列出以JSON格式作为接口返回值的使用案例。



《细说PHP》第四版 样章 第23章 自定义PHP接口规范 3的更多相关文章
- 《细说PHP》第四版 样章 第二章 PHP的应用与发展 1
<细说PHP>第四版 样章 第二章 PHP的应用与发展 1 学习任何编程语言之前,先了解一下它的应用与发展是很有必要的.从Web开发的历史看来,PHP.Python和Ruby几乎是同时出现 ...
- 《java编程思想(第四版)》第一二章学习笔记
目录 一.Introduction 1.抽象过程 2.面向对象语言(包括Java)的五个基本特性 3.每个对象都提供服务 4.public.private.protected三者的区别 5.Java的 ...
- 《细说PHP》 第四版 样章 第二章 PHP的应用与发展 5
2.5 如何学习PHP PHP以其简单易学的特点,以及敏捷开发的优势,从一个几乎不被人知的开源项目,慢慢成长为技术人员首选的动态Web设计工具,与其他语言相比,PHP表现得更好.更快.更简单易学.尽 ...
- 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 11
23.6 使用第三方接口服务实例 接供服务的第三方接口平台有很多,现在的项目中也经常用到一些第三方接口,如支付宝.微信.短信.邮件接口等,我们需要借助第三方的能力来实现产品的某些功能.如果自己已经掌 ...
- 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 9
23.5.3 WebAPI框架应用 程序框架其实就是一个半成品项目,在应用框架时,核心的服务程序只应用,不需要改动.当然如果有必要,也可以根据项目的需要对框架进行二次开发.本节内容主要基于我们的框架 ...
- 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 8
23.5.2 架构详解 本例的实现最重要的就是服务层的设计,有两个配置文件config.php和api.php,其中文件config.php是全局的配置文件,用于整个程序全局需要的参数设置.可以根据 ...
- 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 6
23.4 API的设计原则和规范 API是服务提供方和使用方之间对接的通道,前面我们设计的一些简单API的例子,基本上比较随意,没有使用任何规范.设想一下,每个平台都可能存在大量的API,如果API ...
- 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 1
如今的项目开发中,接口是很普遍的应用技术.现在好多项目组都单独设有接口开发人员.像腾讯.微博.淘宝等开放平台,其所谓的开放,就是提供一些可调用的接口,用于获取相关的信息.例如,微信用户基本信息.淘宝店 ...
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 12
18.9 管理表books实例 在Web项目中,几乎所有模块都要和数据表打交道,而对表的管理无非就是增.删.改.查等操作,所以熟练掌握对表进行管理的这些常见操作是十分有必的.本例为了能更好地展示PD ...
随机推荐
- 如何使用python远程操作linux
在云服务测试中,往往需要我们进入云服务内容进行相关内容的测试.这测试可以使用平台自身的noVNC.外部辅助xshell等工具连接到云服务内部进行测试.但是在如此反复的测试操作中,就需要用到自动化测试方 ...
- SqlServer性能优化,查看CPU、内存占用大的会话及SQL语句
1,查看CPU占用量最高的会话及SQL语句 select spid,cmd,cpu,physical_io,memusage, (select top 1 [text] from ::fn_get ...
- Nginx + FastCGI + Django在windows上部署及nginx常用命令
一般应用都是部署在linux系统上,不会在windows上部署,emmm..所以有兴趣的就瞧瞧吧哈哈 nginx工作原理: nginx用于处理静态文件,动态部分经由fastcgi .scgi或uWSG ...
- Luogu P2210 Haywire 题解
其实这题吧...有一种玄学解法 这题的要求的就是一个最小化的顺序 那么,我们就不进想到了一种显然的写法 就是random_shuffle 什么?这不是乱搞的非正解吗 然而,正如一句话说的好 一个算法, ...
- go语言的json
简介 json 中提供的处理 json 的标准包是 encoding/json,主要使用的是以下两个方法: // 序列化 func Marshal(v interface{}) ([]byte, er ...
- SpringBoot2.0 基础案例(15):配置MongoDB数据库,实现增删改查逻辑
本文源码:GitHub·点这里 || GitEE·点这里 一.NoSQL简介 1.NoSQL 概念 NoSQL( Not Only SQL ),意即"不仅仅是SQL".对不同于传统 ...
- React躬行记(12)——Redux中间件
Redux的中间件(Middleware)遵循了即插即用的设计思想,出现在Action到达Reducer之前(如图10所示)的位置.中间件是一个固定模式的独立函数,当把多个中间件像管道那样串联在一起时 ...
- CPU异常分析(以trap00为例)
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html CPU异常的记录(trap00为例) 一.CPU检测到除零异常的执 ...
- Git - Git简介与客户端安装
简介 Git是目前世界上最先进的分布式版本控制系统(没有之一)! 集中式版本控制系统(CVS/SVN),版本库是集中存放在中央服务器的,而一般工作的时候,用的都是自己的电脑,所以要先从中央服务器取得最 ...
- (转)深入解析TensorFlow中滑动平均模型与代码实现
本文链接:https://blog.csdn.net/m0_38106113/article/details/81542863 指数加权平均算法的原理 TensorFlow中的滑动平均模型使用的是滑动 ...