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

如今的项目开发中,接口是很普遍的应用技术。现在好多项目组都单独设有接口开发人员。像腾讯、微博、淘宝等开放平台,其所谓的开放,就是提供一些可调用的接口,用于获取相关的信息。例如,微信用户基本信息、淘宝店铺、商品消息等,再根据这些信息,在应用里完成交互。虽然本章不会涉及太多PHP语言本身的新技术点,但可以看作程序架构设计、业务逻辑和设计模式的应用。我们在定义接口时,通常有两种规范,一种是被其他内部项目调用的接口,另一种是对外的接口,主要提供给外部开发者调用。两种接口最大区别是,内部接口不需要太严格的身份验证,而对外接口需要严格的身份验证,加密、解密方式也各种各样。
23.1 应用程序编程接口(API)
对于应用开发者来说,有了开放的API,就可以直接调用多家公司开发好的功能来做自己的应用,不需要所有的事情都亲力亲为,节省精力。对于软件提供商来说,留出API,让别的应用程序来调用,形成生态,软件才能发挥最大的价值,才能更有生命力。同时,做好接口规范,通过设计权限来控制安全,别人看不见代码,也保护了商业机密。
23.1.1 什么是接口
API(Application Programming Interface)就是接口,可以理解为一个通道,负责一个程序和其他软件的沟通。本质上是预先定义的函数,如在项目中声明的一些功能函数,通过函数名称调用就可以获取函数运行后的返回值。由于主程序和这些函数在一起,本机调用没问题,而一部分函数需要让其他服务器中的程序调用,就需要设计成开放的API。接口的使用示意如图23-1所示。
在图23-1中,如果将数据增、删、改、查等功能做成开放的API,就可以在其他服务器的应用程序中,通过相应的规则访问接口,对数据进行操作,也可以在浏览器的页面中,直接使用Ajax访问接口,从页面中获取和操作数据。编写接口的程序员,只需要按接到的参数,去搭建底层架构和处理数据,以及按要求的格式返回数据等。编写前端业务的程序员,也不需要关心数据是怎么来的,只要通过调用接口获取数据并用到自己的业务中,或将直接数据交给接口,让接口自己来处理即可。
当然设计出很好的API,也是不容易的。要注重强调API安全,也包含计算和逻辑判断。假设物流中“货物”是数据,存放货物的“总仓库”是数据库,“店铺”是我们的网站或App。页面上显示的内容、数字,以及用户的操作请求和结果都是需要不停搬运的“货物”,则负责调配分配打包的中转站就是API,店铺工作人员直接从中转站取货就好。

图23-1 接口的使用示意
23.1.2 了解实现接口的几种方法
使用接口的目的就是远程执行、获取和传送数据。而实现这个目的可以使用Web Service、RPC和API等技术方式。Web Service属于架构里的Web服务,RPC属于Web Service的一种使用方式,在PHP中都有单独的扩展模块支持,有封装好的函数可以直接使用。API只是一种实现方式,先分别了解一下这些概念。
Ø RPC(Remote Procedure Call Protocol)
RPC采用HTTP协议,使用C/S方式的请求响应模型。客户端发起请求,服务器返回响应结果,类似于HTTP的工作方式。优点是跨语言、跨平台,在C端、S端有更大的独立性,缺点是不支持对象,不支持异步调用,无法在编译器中检查错误,只能在运行期间检查。RPC会隐藏底层的通信细节,不需要直接处理Socket通信或HTTP通信,在使用形式上像调用本地函数那样去调用远程的函数。
Ø Web Service
Web service是一个运行在Web上的服务,它通过网络为我们的程序提供服务方法,类似一个远程的服务提供者。Web Service 底层使用HTTP协议(实现远程数据交互的一个技术和协议),通过HTML进行通信。客户端不管是C/S还是B/S都能调用这个服务获得结果。这就实现了不同系统、不同平台、不同开发语言和开发技术实现的软件系统之间的通信。如天气预报服务,对各地客户端提供天气预报,是一种请求应答的机制,是跨系统、跨平台的。
Ø API
API只是一种实现方式,在保留HTTP原生特征与语义的同时实现RPC,而且实现风格是千姿百态的。本质上,API与传统模式的Web Service都是实现RPC的,即远程服务。而传统的Web Service只是利用了HTTP通道,进行独立的交互,但是这个交互协议可以移植到其他协议下运作,而API天生与HTTP依赖无法移植。API可以更好地利用HTTP与生俱来的特征,如缓存、代理、安全、头信息扩展。反之,部分实现方式Web Service无法利用HTTP特征。WebService与API又都是在80端口下工作的,都可以绕开默认的网络防火墙限制。传统的Web Service要求使用服务的平台对数据格式强制适应,服务端的交互数据处理变得更加快捷容易,但增加了不同使用端对服务交互的困难度。
API相比Web Service更为轻量级,在优化好的情况下性能更有优势。推荐在开发中使用API的风格,可以自己规范与描述,处理不兼容问题。另外,API在业务实现上更为直观,接近MVC模式下开发的应用,性能更好、更为灵活,能够直接利用HTTP的动态网页技术开发接口与功能。其实,API对于交互数据的格式没有明确规定,可以更好地在特定的软件运行平台使用,但是需要开发者熟悉各种格式的支持情况。


《细说PHP》第四版 样章 第23章 自定义PHP接口规范 1的更多相关文章
- 《细说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接口规范 3
23.2 接口实现的基础 大家都很了解函数在本地应用,通过名称调用函数执行,并通过传递不同参数,函数有不同执行,执行后给调用者返回结果.如果把一个函数做成一个接口远程访问,也需要这几个步骤.使用HT ...
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 12
18.9 管理表books实例 在Web项目中,几乎所有模块都要和数据表打交道,而对表的管理无非就是增.删.改.查等操作,所以熟练掌握对表进行管理的这些常见操作是十分有必的.本例为了能更好地展示PD ...
随机推荐
- oracle 根据时间戳查询date类型sql
话不多说上sql: select to_char(1574837126879/(1000*60*60*24)+to_date('1970-01-01 08:00:00','YYYY-MM-DD HH2 ...
- navicat for mysql 连接 mysql 出现Client does not support authentication protocol requested by server解决方案
一 .桌面左下角windows图标--搜索框内输入cmd,结果如图所示,点击cmd.exe,或者使用快捷键Windows键(在键盘上有个Windows标志的按键)+R输入cmd后回车. 二. 在出来的 ...
- csp2019后的感慨
你还记得曾经加入oi的初衷吗? ... 我们都不想输,可谁都没有赢... --前言 没有太大的感想,也不配去写感想...就记录一下初学者失败的原因吧.希望看过的人能引以为戒. 做题的时候,不到万不得已 ...
- bzoj5093图的价值:多项式,斯特林数(二项式反演)
Description “简单无向图”是指无重边.无自环的无向图(不一定连通). 一个带标号的图的价值定义为每个点度数的k次方的和. 给定n和k,请计算所有n个点的带标号的简单无向图的价值之和. 因为 ...
- UDP组播
多播(组播) 组播组可以是永久的也可以是临时的.组播组地址中,有一部分由官方分配的,称为永久组播组.永久组播组保持不变的是它的ip地址,组中的成员构成可以发生变化.永久组播组中成员的数量都可以是任意的 ...
- CNN卷积核
一.卷积操作有两个问题: 1. 图像越来越小: 2. 图像边界信息丢失,即有些图像角落和边界的信息发挥作用较少.因此需要padding. 二.卷积核大小通常为奇数 1.一方面是为了方便same卷积pa ...
- 添加商品到购物车add_to_cart.php(学生笔记)
<?php session_start();//启动session $goods_id = $_POST['goods_id'];//获取商品id $number = $_POST['num'] ...
- PHP+Mysql统计文件下载次数实例
PHP+Mysql统计文件下载次数实例,实现的原理也很简单,是通过前台点击链接download.php传参id,来更新点击次数. 获取文件列表: <?php require 'conn.php' ...
- selenium自动化测试爬取动态页面大全
目录 一:浏览器信息测试 二:查找结点 三:测试动作 四:获取节点信息 五:切换子页面Frame 六,延时请求 七:前进和后退 八:Cookies 八:选项卡处理 九:捕获异常 这里之讲解用法,安 ...
- echarts 饼图 + 全屏显示
效果图: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...