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的更多相关文章

  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接口规范 9

    23.5.3  WebAPI框架应用 程序框架其实就是一个半成品项目,在应用框架时,核心的服务程序只应用,不需要改动.当然如果有必要,也可以根据项目的需要对框架进行二次开发.本节内容主要基于我们的框架 ...

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

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

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

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

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

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

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

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

随机推荐

  1. TCP服务端

    出处: https://blog.csdn.net/DGH2430284817/article/details/86653294问题描述:       在用socket的通信中,经常会出现这种情况,客 ...

  2. Oracle处理关于sysaux表空间爆满的问题---更新最新方法!!

    对于SYSAUX表空间而言,如果占用过大,那么一般情况下是由于AWR信息或对象统计信息没有及时清理引起的,具体原因可以通过如下的SQL语句查询: SELECT OCCUPANT_NAME ORDER ...

  3. MySQL数据库:运算符

    运算符 比较运算符: > 大于 < 小于 >= 大于等于 <= 小于等于 = 等于 != 不等于 范围运算符: between...and...(包含边界值) 类似于 > ...

  4. MATLAB实例:散点密度图

    MATLAB实例:散点密度图 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ MATLAB绘制用颜色表示数据密度的散点图 数据来源:MATLAB中“fit ...

  5. mongodb基本安装

    这次搞搞NOSQL, 但最简单的MONGODB安装,还是要作点配置的. 一,安装网址: https://www.mongodb.com/download-center/community?jmp=na ...

  6. 菜鸟刷面试题(三、Redis篇)

    目录: redis是什么?都有哪些使用场景? redis有哪些功能? redis和memecache有什么区别? redis为什么是单线程的? 什么是缓存穿透?怎么解决? redis支持的数据类型有哪 ...

  7. alter对话框处理:

    from selenium import webdriverd = webdriver.Firefox()d.get('file://C:\\我的代码\\selenium自动化测试\\alter.ht ...

  8. ReactNative: 使用导航栏组件-NavigatorIOS组件和Navigator组件

    一.简言 在软件开发中,不论是Web还是App,它们的应用程序都是由很多的功能视图组成的.对于这些组合的视图,如何实现页面间平滑地过渡,应用都有统一的一套跳转机制,这个功能就是路由或者叫导航.应用程序 ...

  9. Web安全测试学习笔记-SQL注入-利用concat和updatexml函数

    mysql数据库中有两个函数:concat和updatexml,在sql注入时经常组合使用,本文通过学习concat和updatexml函数的使用方法,结合实例来理解这种sql注入方式的原理. con ...

  10. Linux习题小结

    1.输出当前下的目录.ls -l 长格式输出. (1)使用grep 因为第一个 ls -l 的第一个标识代表的是文件类型,所以使用 grep 过滤以 d 开头的行,输出的就只是目录了. 正则表达式 g ...