创建以 API 为中心的 Web 应用
http://www.oschina.net/translate/creating-an-api-centric-web-application?from=20130818
正计划着要开始搞一个新的网络应用?在这篇教程中,我们将讨论如何创建以API为中心的网络应用,还会解释在今天的多平台世界,这类应用为什么是重要的。 引言API? 对于还不甚熟悉这个术语的朋友,API是Application Programming Interface(应用编程接口)的简称。根据维基百科: API是以源代码为基础的约定,它用于软件组件之间相互通信的接口。API可能包含函数、数据结构、对象类、以及变量等的约定。 API可视化 简单地讲,API指的是一组应用中的函数,它们能够被其它应用(或者这些函数所属应用自己,下文中我们将会看到)用来与应用进行交互。API是一种很棒的向外部应用安全和妥善地表明其功能的方式,因为这些外部应用所能利用的所有功能仅限于API中所表现出的功能。 |
stoneyang
|
什么是“以API为中心的”网络应用?以API为中心的网络应用就是基本上通过API调用执行大多数甚或所有功能的一类网络应用。 以API为中心的网络应用就是基本上通过API调用执行大多数甚或所有功能的一类网络应用。举个例子,如果你正要登录一个用户,你应当将其认证信息发送给API,然后API会向你返回一个结果,说明该用户是否提供了正确的用户名-密码组合。 以API为中心的网络应用的另外一个特征就是API一直是无状态的,这意味着这种应用无法辨别由会话发起的API调用。由于API调用通常由后端代码构成,实现对会话的掌控将比较困难,因为这其中通常没有cookies介入。这种局限事实上是好事——它“迫使”开发者建造不基于当前用户状态工作的API,但是相应地在功能上,它使测试易于进行,因为用户的当前状态无需被重建。 |
stoneyang
|
为什么要经历这些麻烦?作为Web开发者,我们已经亲眼目睹了技术的进步。有一个常识是,当代的人们不会只通过浏览器来使用应用,还会通过其它诸如移动电话和平板电脑之类的设备使用。举个例子,这篇发表在Mashable上的名为“用户在移动应用上花的时间比在网络上的多”的写道: 一项新近的报告表明,用户花在移动应用上的时间首次超过了花在网络上的时间。
这里还有一篇来自ReadWriteWeb的更新的文章“在移动设备上浏览网络的人多于使用IE6和IE7的人数总和”: 来自Sitepoint的 浏览器趋势的最新数据表明,在智能手机上浏览Web的人比使用IE6和IE7浏览的人更多。这两件难有起色的老古董多年来一直是Web开发者的噩梦,它们需要各网站尽可能妥当地降格到至少常用浏览器所能支持的水平。但是现在时代不同了;2011年十一月中,6.95%的Web活动在移动浏览器上发生,而发生在IE6或IE7上的则只有6.49%。 正如我们所见,越来越多的人正通过其它途径获得讯息,特别是移动设备。 |
stoneyang
|
这与我创建以API为中心的网络应用有何关系?这必将会使我们的应用更加有用,因为它可以用在任何你需要的地方。 创建以API为中心的网络应用的主要优势之一便是它帮助你建立可以用于任何设备的功能,浏览器、移动电话、甚至是桌面应用。你所需要做的就是创建的API能够使所有这些设备利用它完成通信,然后,瞧!你将能够建造一个集中式应用,它能够接受来自用户所使用的任何设备的输入并执行相应的功能。 以API为中心的应用的框图 |
stoneyang
|
通过以这种方式创建应用,我们能够从容地利用不同的人使用不同的媒介这一优势。这必将使应用更加有用,因为它能用在用户需要的任何地方。 为了证明我们的观点,这里有一篇关于Twitter的重新设计的网站的文章,文章告诉我们他们现在如何利用他们的API来驱动Twitter.com的,实质上是使其以API为中心: 最重要的架构改动之一就是Twitter.com现在是我们自己API的客户。它从终端提取数据,此终端与移动网站,我们为iPhone、iPad、Android,以及所有第三方应用所用端点相同。这一转变使我们能向API团队分配更多的资源,同时生成了40多个补丁。在初始页面负载和来自客户端的每个调用上,所有的数据现在都是从一个高度优化的JSON段缓存中获取的。 在本篇教程中,我们将创建一个简单的TODO列表应用,该应用以API为中心;还要创建一个浏览器上的前端客户端,该客户端与我们的TODO列表应用进行交互。文末,你就能了解一个以API为中心的应用的有机组成部分,同时,还能了解怎样使应用和客户端两者之间的安全通信变得容易。记住这些,我们开始吧! |
stoneyang
|
步骤 1: 规划该应用的功能本教程中我们将要构建的这个 TODO 应用将会有下面几个基本的CRUD功能:
每一个 TODO 条目将拥有:
让我们模拟一下该应用,使我们考虑该应用以后会是什么样子时,能有有一个直观的参考: 简单的TODO 模拟示例 |
lwei
|
步骤 2: 创建API服务器既然我们是在开发一个以API为中心的应用,我们将创建两个“项目”: API 服务器,和前端客户端。 我们首先从创建API服务器开始。 在你的web server文件夹,创建一个文件夹,命名为simpletodo_api,然后创建一个index.php文件。这个index.php文件将作为一个访问API的前端控制器,所以,所有访问API服务器的请求都会由该文件产生。打开它并往里输入下列代码:
实质上,这里我们创建的是一个简单的前端控制器,它实现了下列功能:
|
lwei
|
除了需要创建index.php外你还需要创建三个文件夹: controllers, models 和 data.
在controllers文件夹下创建一个叫Todo.php的文件。这将是任何TODO列表有关任务的控制器。按照TODO应用所需提供的功能,向Todo控制器里面添加必要的方法:
现在为每个action中添加必要的功能实现。我将会提供createAction()方法的源码,其他方法将留作作业。如果你觉得毫无头绪,你也可以下载示例的源码,从那里拷贝。
|
bigtiger02
|
在文件夹models下创建TodoItem.php,这样我们就可以创建“条目添加”的代码了。注意:我并没有和数据库进行连接,相反我将信息保存到文件中,虽然这可以用任何数据库来实现,但是 这样做相对来说要容易些。
createAction方法使用到TodoItem模型里面两个方法:
由于API需要通过HTTP请求调用,在浏览器输入如下地址测试API: 如果没有错,你应该在data文件夹下看到一个新的文件夹,在该文件夹里面有一个文件,文件内容如下: createAction()结果 恭喜!您已经成功创建了一个的API服务器和API调用! |
bigtiger02
|
步骤3:确保API服务器具有APP ID和APP SECRET目前,API服务器被设置为接受全部API请求。我们将需要将之限制在我们自己的应用上,以确保只有我们自己的前端客户端能够完成API请求。另外,你实际上也可以创建一个系统,其中的用户可以创建他们自己的应用,而那些应用也用用对你的API服务器的访问权,这与Facebook和Twitter的应用的的工作原理类似。 我们从为使用API服务器的用户创建一组id-密码对开始。由于这只是一个Demo,我们可以使用任何随机的、32位字符串。对于APP ID,我们将其设定为APP001。 再次打开index.php文件,然后用下列代码更新之:
|
stoneyang
|
我们在这里已经完成的实际上是实现一个非常简单的认证我们的前端客户端的方法,它利用了与公共-私有密钥认证相似的系统。基本上,这里给出的就是认证过程的步骤分解: 公钥加密
既然API服务器已经确保具有APP ID和APP SECRET,那么我们就可以开始编写使用API服务器的前端客户端了。 |
stoneyang
|
步骤4:创建浏览器客户端我们从为前端客户端设定新建文件夹开始。在你的Web服务器上的文件夹中创建一个名为simpletodo_client_browser的文件夹。完成后,创建一个index.php文件,并将下列代码写进去:
SimpleTODO的登录页 需要注意的是我在这里已经包含了两个JavaScript文件和两个CSS文件:
接下来,我们创建login.php文件来存储客户端会话中的用户名和密码。
这里,我们简单地为用户开启一次会话,所依据的是用户所提供的用户名和密码组合。这充当了简单的组合密钥,它允许用户访问某个特定用户名和密码组合所存储的TODO项。然后我们重定向至todo.php,那里是我们开始与API服务器交互的地方。然而在我们开始编写todo.php文件之前,先创建一个 ApiCaller类,它将封装我们所需的全部API调用方法,包括请求的加密。 创建apicaller.php,并把下面的代码写进去:
|
stoneyang
|
我们将利用ApiCaller类向我们的API服务器发送请求。这样,所有必需的加密和cURL初始化代码将会写在一个地方,我们就不用重复代码了。
现在,我们开始写todo.php。首先,我们创建一些代码来为密码为test1234的用户nikko(这是我们先前用来测试API服务器的那个用户名/密码组合)获取当前的todo项。
恭喜,你已经成功地做好了一个向API服务器的API调用!在这段代码中,我们已经:
|
stoneyang
|
现在,我们来重新格式化一下数据,让它们开起来更好看些。向todo.php中添加下列HTML。别忘了移去var_dump()!
很酷哈?但它目前啥也干不了,那么让我们开始添加一些功能吧。我将为new_todo.php提供代码,它们调用todo/createAPI调用来创建新的TODO项。创建其他页(update_todo.php和delete_todo.php)应该与此十分相似,因此我把它们留给你。打开new_todo.php,然后把下面的代码添进去:
恭喜,它好用了!你已经成功地创建了一个以API为中心的应用! |
stoneyang
|
结论围绕API创建并开发应用具有如此之多的优势。想创建一个Android版的SimpleTODO?你需要的所有功能都已经在API服务器上了,所以你所要做的就是创建客户端!想重构或者优化某些类?没问题——只要确保输出相同即可。想添加更多的功能?你可以在不影响任何客户端代码的前提下做到! 尽管存在着某些像是更长的开发时间或者更加复杂,但是以这种方式开发网络应用的优势却远比其劣势更重要。今天的这种开发由我们自己权衡取舍,从而使我们能够在将来获益。 你是准备使用一台API服务器作为你的下一个Web应用,还是已经在过去的项目中使用了相同的技术?请在评论中告知! |
相关文章
- [Web 前端 ] 五大WEB主流浏览器及四大内核
- Win10系列:C#应用控件基础13
- OSGI开发web应用
- tomcat的简单配置与适用默认的web应用
- 人人都是 Serverless 架构师 | 现代化 Web 应用开发实战
- SAE 的极致应用部署效率
- Electron 应用实战 (架构篇)
- Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说。。。
- 构建一个用于产品介绍的WEB应用
- 用HTML5、地理定位API和Web服务来开发移动应用
- [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
- 【斗医】【7】Web应用开发20天
- Android 应用架构概述
- 转:Java Web应用中调优线程池的重要性
- 使用java代码获取新浪微博应用的access token
- SAP BTP MTA 应用的应用场景
- Atitit web 3.0(web技术)展望与实现 和语义网络 目录 1. 为了说明Web 3.0,我们需要回顾Web历史上的重要浪潮。2 1.1. 2.Web 2.0:任何人可以参与。Web
- Atitit.跨语言标准化 web cgi api v2 saa CGI (通用网关接口) 编辑 CGI 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。CG
- 用 React 结合 SAP UI5 Web Components 来开发 SAP Fiori 应用
- 使用Chrome的timeline工具分析web应用性能
- Angular SSR 应用启动时的一些保护措施
- Web应用防火墙最佳实践:恶意IP封禁
- 在Android中通过导入静态数据库来提高应用第一次的启动速度
- 001-快速搭建Spring web应用【springboot 2.0.4】-gradle、springboot的启动过程分析、gradle多模块构建
- 分块传输编码在WEB安全中的应用——sql注入用,可以直接复用chunkSplitPostData还原
- Maven Web 应用
- WEB漏洞攻防 -根据应用场景进行注入-POST注入、HTTP头部注入[HOST]、XFF注入
- WEB漏洞攻防 - 文件上传漏洞 - CTF比赛类应用场景 - [GXYCTF2019]BabyUpload
- tomcat Context容器(中):Tomcat如何隔离Web应用?