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. XTTS Creates Alias on Destination when Source and Destination use ASM (Doc ID 2351123.1)

    XTTS Creates Alias on Destination when Source and Destination use ASM (Doc ID 2351123.1) APPLIES TO: ...

  2. canvas绘制线条详解

    canvas详解----绘制线条 <!DOCTYPE html> <html> <head> <title>canvas详解</title> ...

  3. Java之多线程创建方式

    多线程的由来 我们在之前,学习的程序在没有跳转语句的前提下,都是由上至下依次执行,那现在想要设计一个程序,边打游戏边听歌,怎么设计?要解决上述问题,咱们得使用多进程或者多线程来解决. 多线程的好处: ...

  4. 面试知识点 html css(经常更新)

    1.HTML5语义化 什么是语义化 用合理.正确的标签来展示内容,比如h1~h6定义标题 好处 易于用户阅读,样式丢失的时候能让页面呈现清晰的结构. 有利于SEO,搜索引擎根据标签来确定上下文和各个关 ...

  5. jupyter notebook改变行间图片大小

    jupyter notebook使用起来代码效果很直接,这是我最喜欢的一点,但是主题单一,后来改了一下主题.也可以接受了,但是还有一个问题是显示图片太小我们可以用两个方法来改变它. 一.可以通过rcP ...

  6. idea实战技巧

    一.背景 为什么想写这个,因为编码一线更多的是实战,实战中,可能一个快捷键,一个小技巧,就能省很多时间. 本文会持续记录,持续更新. 二.技巧 1.全局替换(带正则) 场景是: 多profile的情况 ...

  7. Linux系统:centos7下搭建ZooKeeper3.4中间件,常用命令总结

    本文源码:GitHub·点这里 || GitEE·点这里 一.下载解压 1.Zookeeper简介 Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供 ...

  8. NIO零拷贝的深入分析

    深入分析通过Socket进行数据文件传递中的传统IO的弊端以及NIO的零拷贝实现原理,及用户空间和内核空间的切换方式 传统的IO流程 在这个过程中: 数据从磁盘拷贝进内核空间缓冲区 从内核空间缓冲区拷 ...

  9. ubuntu18.04 安装 搜狗输入法

    一.安装fcitx sudo apt-get install fcitx-bin 因为搜狗拼音依赖fcitx,相关的依赖库和框架都会自动安装上. sudo apt-get install fcitx- ...

  10. Thinkphp <= 5.0.10 缓存getshell复现

    目录 Thinkphp <= 5.0.10 缓存getshell复现 0x01 poc 0x02 跟踪源码 0x03 审计思路 0x04 补丁 0x05 参考 Thinkphp <= 5. ...