为什么大家都在讨论API?
为什么大家都在讨论API?
王振威 发表于6年前
为什么大家都在讨论API?
  • 发表于 6年前
  • 阅读 6366
  • 收藏 23
  • 点赞 0
  • 评论 13

标题:腾讯云 新注册用户域名抢购1元起>>>   

    这篇文章尝试回答现在经常被提到的一个问题:为什么大家都在讨论API?我们如何创建API

服务器和客户端

    10年前,web服务器的工作只是构建一个HTML页面,给表现层的客户端提供一个不灵活的展现。而Javascript的角色就是在不同的浏览器中实现<blink>标签。

    而现在我们已经可以在浏览器中执行一些可靠的图灵机运算,例如Ajax请求,而Javascript也承担了越来越多的责任。

    Ajax可以让我们通过一个XMLHttpRequest对象在网页不重新装载的情况下只更新一块或者一部分窗口,浏览器与服务器之间的通信加载的并不是一个完整的HTML页面,加载的很可能只是需要的信息,而这会使用户得到更好的用户体验,也使网页看起来动态化。

看如下请求:

POST /users
GET /users/1 #following the redirect
PUT /users/1/enabled

他们返回的都不是HTML,而是JSON或者XML

    我听过 加布里埃莱·拉娜在米兰  上周的一个关于怎样实现基于HTTP协议的使业务逻辑(服务器暴漏接口)和页面展现(客户端Javascript展示)分离的讨论。甚至于你的服务器只是用来接收请求发送HTML页面,也强制分为两层实现。使服务器业务逻辑和前端展现独立的实现,他们可以使用不同的机器配置和语言实现。

新的可能性

    除了使用Flex重写你的前端,或者Scala重写你的业务逻辑,(因为这两种东西的边界非常清晰,使用他们重写可以清晰的划分开业务逻辑和展现),还有几种基于HTTP的几种可能性实现(我并不称之为REST):

·可以创建新的前端:首先想到的就是移动Web应用程序和移动的原生应用程序。业务逻辑层仍然共享,只是他们用不同的语言实现不同的UI罢了。

·整合应用程序的服务层,不是简单的吧数据库接口共享,我们需要通过一个更严格的API隔离一些操作,而不是暴漏每一个表结构,让基于API的应用程序独立开来,从而避免数据模型的意外状况。

·使用API提供访问的方式有可能要比其他的方式有优势。

·如果你们的应用很有意思,你可以提供第三方访问的API(甚至收费)。

·开放性数据的想法是通过一个API来访问政府的数据,如果以原始的方式在公开的网站上发布的话,你必须迁移这些数据到你自己的硬盘上。

挑战

    由于浏览器是不能够执行PUT或者DELETE请求的,浏览器只能实现GETPOST请求,这个问题导致我们在需要这种请求的时候必须以POST的方式加一个额外的参数,服务器在收到这个参数的时候再重新实现POST的请求处理。例如

POST /users/1/enabled?_method=put

    POSTGET不同的是他的语义是修改应用程序状态,但是他并不是安全的,目前还不清楚HTML5中是否会增加PUTDELETE请求表单的支持。

    另一个问题是延迟,HTTP请求必须满足一定的最小往返时间,现在已经有一个叫做SPDY的东西在尝试使HTTP延迟变小,但是通过初始化多个不同的Ajax请求来组成一个页面并不好,通常浏览器在一个时间域内最多同时发送6个请求。幸运的是,你可以把页面上的内容分块独立的缓存,而不需要使用一些所谓的HTTP加速器。

历史

    最后一个潜在的问题,就是如何管理历史页面,例如如何使后退按钮良好的工作。默认情况下完成Ajax请求并不会改变地址栏的URL,这就意味着,不能使用后退按钮回到之前的页面。

    现在的HTML5History提供了一个API用来修改URL,他可以让你在不重新加载页面的情况下把 /users改为/users1

    而在老的浏览器中,也有降级的曲线解决办法,你可提供一个链接到新的页面,然后拦截他的click事件,装载Ajax请求,通过Javascript更新History

总结

    鉴于目前浏览器的功能,使用JSON或者XML API作为HTTP服务器的输出终点会是一种很好的设计,此外,如果世界范围都有通用的基于HTTPAPI,将会使世界各地的客户端访问相同的业务逻辑,客户端、服务器只需遵循一定的API规则,服务器和客户端将独立发展,将会在技术、部署,甚至开发语言中获益。


OSchina.NET原创翻译/原文链接

标签: Ajax HTML5 Javascript API
共有 人打赏支持
王振威
粉丝 499
博文 28
码字总数 20820
评论 (13)
BENNEE
俺 没 ╮(╯▽╰)╭
xesam
这篇文章跟标题有什么关系??
王振威

引用来自“xesam”的评论

这篇文章跟标题有什么关系??

是翻译过来的,不过确实是有关系的,这篇文章基本上都是在说使用API方式的优点
zhaoyou
翻译的太烂!
renwofei423
有心就不错!
托尼斯卡天空
一头雾水
王振威

引用来自“BEILUTE00”的评论

一头雾水

简单的一句话说就是web服务器只针对请求返回XML或者json,客户端拿到数据后可以针对不同的平台做不同的展现方式,比如你是HTML,或者你是移动客户端,而这些服务器并不关心
kut
api,我想是因为关注到oracle和google之争吧?和你这个没半毛钱关系。
汪林

引用来自“Kut.Zhang”的评论

api,我想是因为关注到oracle和google之争吧?和你这个没半毛钱关系。

oracle收购了sun后开出了Java之父高斯林,而高斯林现在又进了goole。之间的商业竞争,这套api是由sun开发的。
小可丶同学
管他谁收购谁,谁竞争谁,我就做好我自己的就行了。O(∩_∩)O~
Honghe
如果是译文, 在开头应该先声明相关信息,
不要让人看到结尾才知道是译文
滴滴丶哔哔
文章内容和标题,毛关系没有,标题党。
weloglog
哥,你的标题很有创意啊,可以得到一个最佳创意奖拿回家了,我是奔着API进来的,看的我头疼,
×
王振威
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: