http://www.oschina.net/translate/creating-an-api-centric-web-application?from=20130818php
正计划着要开始搞一个新的网络应用?在这篇教程中,咱们将讨论如何建立以API为中心的网络应用,还会解释在今天的多平台世界,这类应用为何是重要的。css 引言API?html 对于还不甚熟悉这个术语的朋友,API是Application Programming Interface(应用编程接口)的简称。根据维基百科:前端 API是以源代码为基础的约定,它用于软件组件之间相互通讯的接口。API可能包含函数、数据结构、对象类、以及变量等的约定。 API可视化jquery 简单地讲,API指的是一组应用中的函数,它们可以被其它应用(或者这些函数所属应用本身,下文中咱们将会看到)用来与应用进行交互。API是一种很棒的向外部应用安全和妥善地代表其功能的方式,由于这些外部应用所能利用的全部功能仅限于API中所表现出的功能。github |
![]() 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应用,仍是已经在过去的项目中使用了相同的技术?请在评论中告知! |