必威体育下载克里斯蒂安·海尔曼

您当前正在浏览API类别的存档。必威体育简介

“api”类别的存档

我希望有一个很棒的Ajax API

星期二,4月8日,二千零八

从…回来高地放荡有趣的是,人们似乎还没有完全相信api的必要性以及它们在未来几年的web开发中所扮演的重要角色。我想这在一定程度上是基于使用api的经验,这些api并没有很好地向非极客解释,而且不一致或难以使用。如果你只想写一些代码,那么一点一点地寻找信息就没有多大乐趣了(除非你有老派的黑客/黑客头脑,并且没有考虑花几个小时去看HexDumps,试图找到一种在游戏中获得无尽生命的方法,这是浪费时间)。

在我接受采访时保罗博格在我指出设计一个好API与设计任何其他用户界面(包括网页)一样重要。加雷思Rushgrove在他精彩的谈话中同意了如何成为一流的网络公民.我还指出,这方面缺乏清晰易懂的教程和文章,所以我决定现在就试试看。

设计一个很棒的AjaxAPI

作为一个例子,我将使用最近发布的谷歌翻译API,指出它的好部分,列出我认为遗漏的东西。我就不写了API但要解释为什么我认为缺失的部分很重要。这不是对谷歌的攻击,我只是很喜欢和这个一起工作API想让它更容易使用,所以没有什么不好的感觉,我真的脱掉了你给我的帽子API就像那样!

当我们在JavaScript中讨论Ajax api时,我认为以下几点非常重要(Ajax暗示了这一点,但是您会惊讶地发现aREST API作为Ajax发布):

  • 好的文档
  • 复制粘贴示例
  • 模块性
  • 将结果链接到条目
  • 提供灵活的输入
  • 允许自定义对象运输
  • 涵盖可用性基础知识

文档和演示

让我们从一个积极的开始:文档谷歌Ajax语言API是伟大的。您在一个页面上拥有所需的所有信息,包括复制和粘贴示例。这使您可以通过API在网上,离线阅读,甚至打印出来在拥挤的公交车上阅读,而不必拿出你的笔记本电脑。

小费:如果您提供复制和粘贴示例(无论如何,您应该这样做,因为这是人们作为第一步所做的),请确保它们工作正常!我在必威体育下载书中学到了艰辛的方法开始使用javascriptDOM脚本和Ajax没有什么比展示代码片段而不是完整的例子更危险的了——人们会复制和粘贴脚本的部分,试着运行它,然后发邮件告诉你你的代码被破坏了,或者更糟的是,在亚马逊的书评中抱怨。如果你提供复制和粘贴的例子,确保他们都独立工作。

谷歌提供解释API是,你能用它做什么,所有参数及其含义的列表。这对于初次浏览的用户来说非常好。对于核心读者,他们也提供了一个课堂参考。

使用实例

第一个代码示例非常好,你可以复制和粘贴它,如果你的电脑连接到互联网,它会工作,或者它会工作,如果HTML有一些修正。

首先,它缺少文档类型,这有点烦人,因为它是HTML文件。更重要的一点是没有设置编码。的生活例子版本两者都有-有点讨厌,特别是当我们谈论不同的语言时,以传统汉语为例,正确的编码是必须的。

(注:讽刺的是,看来WordPress做得不好是因为某些原因…)







??????????????



提示:确保向人们解释您的代码示例需要Internet连接和其他依赖项(如超文本传输协议因此必须在本地服务器上运行)。Javascript历史上除了浏览器没有其他依赖项,这是最近发生的变化,可能会令人困惑,尤其是当您在后台使用Ajax时,比如某些flash/Ajax API!

模块化好!

在某种程度上让我感到不安的第一点是google.load(“语言”,“1”)行,但是有一个直接的解释。

第一个脚本包括加载泛型谷歌AJAXAPI有一个load ()方法添加其他,较小的API构建在这个之上。在这种情况下,行意味着您要加载语言API版本号为1的。

这看起来很笨拙,你会得到不好的反馈(似乎没有什么比一个包含解决方案的脚本更好的了),但实际上是相当聪明的。

通过在基本库中模块化Ajax代码,对核心功能的更改将很容易,并且通过要求实现者将所需的API包含在版本号中,您可以让实现者选择升级,而不是破坏旧的实现,或者必须承载完全向后兼容性的重量。

对,最理想的情况是,您永远不必更改您的功能API-添加新功能-但在现实世界中,不断的变化将使你有必要打乱原有的API.不存在为永恒而构建的完美代码。在基础中使用加载器函数API也很聪明,因为这意味着实现者不需要更改URL。

进去的东西应该出来。

这就是谷歌制造问题的地方。这两个google.language.detect()。以及google.language.translate()方法非常酷,因为它们提供发送字符串和定义回调方法,当API返回一个值。然而,在这两种情况下,返回的对象都给出一个结果和状态代码,但不是输入的内容。你会得到各种各样的其他信息类文档)但是有原始条目是非常有用的。

为什么?Ajax的优点在于它是异步的,这也是它的弱点。这意味着我可以在后台并行发送大量请求,并等待结果。然而,这并不意味着请求也以正确的顺序返回!

这意味着如果你想循环一系列的文本来翻译,以下是一种不安全的方法:

var translations=['one'、'two'、'three'、'four'、'five'、'six'、'seven'、'eight'、'nine'、'ten'];
var gtl = google.language.translate;
对于(var i=0,j=translations.length;i GTL(翻译[i]、'en'、'de'、函数(结果){
如果(!结果.错误){
var container = document.getElementById(' translation');
container.innerhtml+=结果.translation;
}

});
}

相反,您需要将数组计数器的增量包装在递归函数中:

var translations=['one'、'two'、'three'、'four'、'five'、'six'、'seven'、'eight'、'nine'、'ten'];
var gtl = google.language.translate;
var i=0;
函数doTranslation()。{
var gtl = google.language.translate;
如果(翻译[I])。{
gtl(翻译(我),“恩”“德”,函数(结果){
如果(!结果.错误){
var container = document.getElementById(' translation');
container.innerhtml+=结果.translation;
我+ +;
doTranslation();
}

});
}

}
doTranslation();

这样比较安全,但是我们失去了并行运行多个连接的机会,从而更快地获得结果。如果结果API呼叫中包含原始文本,事情会更容易,例如,我们可以填充一个结果对象,并以这种方式将正确的请求与正确的结果匹配:

var translations=['one'、'two'、'three'、'four'、'five'、'six'、'seven'、'eight'、'nine'、'ten'];
var gtl = google.language.translate;
var结果=
对于(var i=0,j=translations.length;i GTL(翻译[i]、'en'、'de'、函数(结果){
如果(!结果.错误){
results[result.input]=result.translation;
}

});
}

更简单的是传递一个事务ID,它可以是循环的计数器。当然,另一个选择是允许输入的数据具有更大的灵活性。

提供灵活的输入

输入文本与结果的匹配和事务ID的匹配仍然意味着对API,这并不是很好,因为它既要花钱,又会对服务器和客户端造成同样的打击。一个更简单的选项是,不仅允许将字符串作为文本参数,还允许使用字符串数组。然后返回的结果也会变成一个数组,调用翻译引擎的大量开销会在服务器上通过一次调用来完成,而不是大量调用API调用。

这不难做到,大多数JavaScript框架方法都是这样工作的,通过检查第一个参数的类型并相应地进行分支。您甚至可以更进一步,允许实现人员将自己定制的对象作为第三个参数发送。

传输一个自定义对象允许实现者编写更少的代码

自定义对象进出的好处是可以向API仅特定于实现的调用。很可能这是对命名空间的引用,以避免重复长方法名或全局变量。您可以从提供任何Ajax调用在可用性方面都有意义的参数开始。

思考Ajax的可用性

任何Ajax调用都应该为用户提供一个超时。没有什么比得到一个勇敢的新Ajax世界的承诺更令人失望的了,这个世界有更多的交互界面,然后被困在旋转的轮子上,或者更糟的是,碰到一个链接却一无所获。现在的语言API没有这样的东西,而且你必须用手滚动一个解决方案。您还必须检查错误状态代码,以查看是否无法检索数据,并以这种方式调用连接的失败案例。

一个很好的API会给我这些选择,很可能所有这些都在一个参数对象中滚动。

我的梦想翻译API

考虑到所有这些,最好是API要提供这些选项:

google.language.translate(输入,参数);

参数为:


输入//字符串或数组
具有以下属性的参数//对象
sourceLanguage:字符串,
目标语言:字符串,
transactionId:字符串,
自定义参数:对象,/运输
超时:整数,//(毫秒)
失败:函数(结果,参数)//(出现超时或错误时要调用的方法)
成功:函数(结果,参数)//(当一切正常时调用的方法)

返回的数据来自API应同时提供结果和参数。这将使实现者的生活非常容易。

总结

综上所述,这是我对伟大的阿贾克斯的期望API:

  • 有一个很好的文档,有完整的类文档支持的即时复制和粘贴的例子吗
  • 构建您的API模块化,并允许实现者选择他们想要的版本
  • 提供一个钩子来链接。的结果API方法输入初始数据。最简单的方法是重复这些数据,更复杂的是允许连接ID。
  • 允许通过发送多个值,它会节省你API调用和实现人员围绕不可靠的返回顺序问题进行黑客攻击。
  • 允许实现者添加一个自己的对象来发送和返回,以允许名称空间和其他数据状态保留。
  • 允许超时,不信任连接。

这是一项正在进行的工作

我希望你能在这里找到一些符合的东西,如果你知道要补充的东西,留下评论。

这些天都是关于API的。

星期五,11月2日,2007年

看到Web API主题的覆盖面不断增加,真是太酷了。API最终演变为跨多个系统工作也非常令人兴奋,聚合并从单向检索数据流移动到应用程序的备用入口点。例如,在电影或书籍网站上为亚马逊写评论会有多酷?有了编写API,我们就可以在人们外出的地方利用网络上人们的知识,而不必诱使他们使用网络应用程序。

不管怎样,这个新的API我今天有三次获释:有一个关于。net杂志api的播客和杰里米·基斯一起,保罗•哈蒙德德鲁·麦克莱伦,保罗·博格主持,阿贾克斯群岛以我的幻灯片分享“黑客”为特色RSS饲料我上传了我在邓迪大学黑客日介绍会上做的演讲,昨天苏格兰。

享受!