[Powered by Google Translate] [讲座] [程序员的API]
[比利Janitsch] [哈佛大学] [汤米MacWilliam]
这是CS50。[CS50.TV]
>> 嗨，大家好，我是比利，今天我要谈论的API，
或应用程序编程接口，
特别是在的背景下，的CS50最终项目之类的事情。
一般来说，什么是API？
概括而言，它的类的中间人，允许2个
的软件，以相互通信。
这是一个非常宽泛的定义，而不是我们正在寻找相关的。
我们真正需要的是某种有用的中间地带
沟通的某种类型的数据库的地方。
>> 这里有一个图表，基本的想法是，
我们是一个应用程序，我们希望从数据库中获取数据，
但我们不想直接查询数据库。
相反，我们希望通过这种中间人，API去。
背后的想法，在图表上的数字2和3
都将是非常复杂而混乱的。
换句话说，当API查询数据库，
它可能会使用SQL表和所有的那种东西，
我们已经了解到了一些关于它的CS50，但总体而言，
你已经注意到了，这是一个有点痛苦。
它变得非常，非常复杂而混乱，尤其是当你正在做
复杂的查询，诸如此类的事情。
>> 我们真正需要的是某种有用而简单的方式
得到的数据，而这背后的想法在图表上的数字1和4。
换句话说，我们希望有一个非常简单的方法来告诉API为我们
一个非常简单的方式来获得的数据。
有一个主要的方式，该数据通常是发送和接收的，
这是JSON，或JavaScript Object Notation。
这可以改变一点点，只要您发送请求的API。
换句话说，如果你想要一些一定量的数据，
你如何告诉API来获取这些数据可以改变一点点。
通常涉及某种形式的网络请求。
换句话说，访问的URL某种要告诉API
正是你想要的，但数据几乎总是发回，
换句话说，JSON中的4号。
>> 什么是JSON是什么呢？
正如我所说，JavaScript对象表示法。
它基本上是发送和接收数据的通用标准。
我们的想法是，你有这3类的东西。
你有数组，HashMap的，和原语。
数组和HashMap的看着你一点点CS50，
但你已经得到了非常严格的意义上，它们是什么样的。
换句话说，用数组，你知道他们的类型绑定，
所以，你只能有一个排序的类型，在整个阵列。
JSON是一个较为宽松的，诸如此类的事情。
基本的想法是你建设这个对象，
它可以由任何这些3东西
并且可以由其中的多个，并且它们可以嵌套。
>> 这里的排序JSON的例子，
这是这些大括号在这里代表你的hashmap，
和hashmap是基本的映射某种关键的
某种价值。
在这里，你会看到我们有关键，
的映射到一个数组中，这是这件事了。
我们看到了另一种元素的HashMap，这是关键isAwesome的，
映射到真正的原始值，换句话说，一个布尔值。
基元可以是字符串。他们可以是整数。
它们可以是bool值，类似的事情。
而你看到这个数组的内容的属性点有2个字符串，
自相似性和精彩。
这2个属性的JSON，我们可以看到，JSON是真棒。
要看看在这一点更加紧密，我要构建
一个更复杂的例子JSON在这里。
>> 让我们从一个数组，例如，只是一个空数组。
但是，这是无聊的，所以我们要补上的一点，
正如我刚才所说，在JSON数组类型绑定，
因此，我们也可以有一个字符串，在这里，是喜，
这是该数组的另一个因素。
同样地，我们可以添加一个hashmapping在这里，有几个映射。
这将有一个映射名的字符串比利。
我们有一个从名称到比利的映射，我们的映射
最喜欢的颜色为蓝色。
这基本上是JSON的一个很好的例子。
种获得进入哎呦，有所有的不同部分需要一个逗号。
同样，它不是在所有类型绑定，这样你就可以有什么样的类型
内任何你想要的，这种想法是它的自相似。
换句话说，在这里是一个JSON对象，这是整个事情，
只是这一点，所以你可以有一个原始的对象，
数组是一个对象或一个HashMap的对象。
>> JSON，你可以种看，是真的，真的有用的，它是如此多才多艺。
你可以有，你可以设想任何可能的数据存储在JSON。
这使得它一个非常好的语言使用的API
因为它几乎意味着，无论什么样的数据要
要以某种方式把它找回来的JSON。
有几个特性使JSON特别适合这样的事情。
正如你可以看到的，到了很多东西，你一直在CS50
这是相对非常容易阅读，也很容易写。
您可以缩进，如果你想，像我在做这个例子中，
它为您提供了一个不错的，漂亮的，你可以看到真正的版本。
此外，它也易于阅读和编写的计算机。
换句话说，它容易解析和编码，
这意味着它是相当快的读取数据，
和JSON可以产生非常迅速。
>> 这也很容易访问不同地区的JSON之类的事情。
这是很好的，而且，事实上，它是自相似的，
换句话说，其实，你可以有内JSON JSON JSON内
用于存储数据是非常好的。
另一部分是真正有用的API是jQuery。
你已经学会了一点点的JavaScript代码，这是一个很好的方式，
操纵HTML和CSS的网站。
但它可以是一个痛苦普通的JavaScript代码，
这主要是因为JavaScript是一个非常冗长的语言。
你必须去学习了很多语法，只是为了做很简单的事情
它需要大量的代码，所以jQuery是一个JavaScript的库。
换句话说，它是一个JavaScript文件，你可以加载
然后使用jQuery的功能做一些事情。
和jQuery基本上是让您的生活变得更加简单了。
它简化了在JavaScript中需要数百行中的几行jQuery的。
>> 这是特别有用的，如果你正在使用API​​，因为一般
您将如何被访问的API是由AJAX请求，
我相信大卫讲座中提到的，AJAX请求
一般都是当你正在做一个网络请求某种服务器
并获得某种形式的数据，并即时更新的页面。
而在普通的JavaScript，将采取疯狂的行数
验证所有的头和做所有的东西之类的，
jQuery有一个非常简单的函数调用AJAX，
和所有你必须​​做的AJAX是给你想给的API的参数，
API的位置要配置的选项，让您任何额外的排序。
这是真的，真的很好，这种事情非常有用的。
这是我们需要开始的所有的API，让我们的手脏。
>> 我要带了几个例子，并探讨其不同的特性
为什么他们不同的东西是有用的。
实际上，我会告诉你的第一件事是什么，我的工作
在我的研究实验室，这是一个NGRAM浏览器，
基本的想法的一个NGRAM的浏览器，您可以搜索一些这类词
或短语，经常出现在一组特定的文字随着时间的推移。
这里的例子是这样的数据集的婴儿
出生在纽约，1920年和2000年之间。
例如，我们可以搜索的名字Jennifer，
我们看到，20世纪60年代，它真的是不使用所有的东西，
然后，随着我们进入晚年，这已经成为越来越多的使用。
我们还可以做比较，所以，如果我们比较珍妮弗，例如，托马斯，
我们可以看到整个历史上，托马斯已经相当普遍，
而珍妮弗是一个较新的名字。
我们可以做这样的事情。
>> 这个应用程序是如何工作的？
基本上，它可以通过一个API。
换句话说，我们在这里有某些参数。
我们的参数，我们实际上是在寻找，
这些名字，然后我们有一些其它的属性，
类似的Y轴和X轴。
你可以看到我们有一些不同的选择，尽可能的
使用的时间分辨率和诸如此类的事情。
我们有这些选项，只要我们真正想要什么样的数据从数据库中，
我们想要得到的数据，在一些有用的方法。
通常情况下，如果我们查询数据库直接将排序是一个痛苦的做
因为这大概给孩子起什么名字，住在一些数据库数据的地方，
这将是非常复杂的手动查询
决定什么样的数据返回。
换句话说，我们只关心珍妮弗和托马斯在这种情况下，
我们只关心某个轴和所有的那种东西。
>> 我们如何解决这个问题呢？
要深入到这个API多一点我会告诉你这个平台的另一个例子
它使用一个稍微不同的数据集。
该数据集，而不是婴儿的名字，其实只是整个
印刷出版物的图书数据库，
这是一个巨大的整个过去的100年左右出版的文本来源。
我们的想法是我们有这compository的数以百万计的文字，
我们现在可以搜索不同的词和短语英寸
下面是一个例子，变化有点不同，从前面的例子
我给你，这是我们这3个搜索查询，
战争，战争，战争的法语单词，这是GUERRE。
我们正在寻找的总数据库内3个不同的部分。
换句话说，在这第一个查询中，我们只在美国，
仅在英国，在第二个，第三个在法国出版的作品。
我们看到一些有趣的模式出现。
例如，我们看到的在这里 -
哎呀，我搞砸了轴一点点，但你可以看到在此范围内
在美国版的内战周围有一个大的峰值
但没有这么大的在其他两个高峰，而这显然是因为
在这一点上美国南北战争发生了。
>> 我们可以看到，有一些很酷的东西，
但我们真正关心的是我们如何得到这个数据。
我会带你在这个程序中一点点幕后。
一个绝招，如果你正在使用的站点和种想知道
这是怎么回事幕后，你可以打开开发工具。
我将使用Chrome的开发者工具，并得到那些
你可以做控制，移位，J，，您可以到JavaScript控制台。
有几个标签。
他们都可以在不同的情况下是非常有用的，但我关心的网络
选项​​卡，现在，我其实有刷新，工作。
哦，对不起。
它喜欢给一个随机的例子。
好了，然后我们将使用这个例子，而不是。
>> 我们的想法是在这里有这个API，
你可以看到什么API返回。
这是什么应用程序正在发送该请求的API。
让我在一点点放大，
基本上，我们可以看到，它只是一个系列的关键值对的JSON。
换句话说，我们有这个HashMap中的映射值。
换句话说，它的值映射年。
1765年什么字，我们初步搜索使用90次
出了1万元，所以我们又回到了这个结果。
这不完全JSON，因为我们有这个收效甚微头，
但是请注意，这里整个的对象仅仅是一个伟大的大JSON一滴。
我们这里有一个数组，其中包含整个元素，
你可以看到，整个元素在这里结束，然后我们有再大的元素
“一路下跌到了最后，而且在这里结束。
我们有一个非常大的数组2中的对象，
每个对象是一个HashMap。
你可以看到在这些HashMap的，我们有一个映射
该指数值设置为0，该值的价值的另一个HashMap，
这又是X轴的值映射到Y轴的值。
>> 你可以看到JSON变得有点复杂，但总体而言，
它实际上是非常有用的，它是很容易的访问相比，
其他不同形式的符号。
据我们实际发送数据的API得到，
我要到后端去一点点在这里。
这是大的JavaScript文件，该文件处理所有的Web应用程序之间的相互作用，
，所以我们不关心这个最，但我们是关心一些。
例如，我们关心这BuildQuery对于功能，
这个功能是基本的想法，它看起来在页面上，
找出用户想要什么查询，换句话说，
检查那些箱子，他们已经输入的搜索字词，
检查不同的Y轴和X轴的值，他们选择了和所有诸如此类的事情，
它会吐出来此查询的值，然后我就可以发送的API。
>> 这看起来比较复杂，它是相当复杂的
但我要做的事情，事实上，我已经这样做，这是伟大的 -
是，我要在控制台打印出准确的查询值
它发送的API。
这实际上就在这里。对不起，我输了很多东西。
但是，这就是我们所关心的，这个对象就在这里。
这是查询的对象。
换句话说，这正是在Web应用程序发送到API，
让我们往里一点点，我们看到我们这里有几个值。
我们看到，我们有这个计数类型，这是每万字的出现，
而这正是我们选择了在Y轴在这里。
这就是我们在未来从。
我们有一个数据库中的值，这意味着，有一些某些数据库
这个数据是生活在我们要访问的数据，特别是
相对于婴儿名字的数据，例如。
然后，我们这组值，
这是说，我们要搜索​​的一年，而不是
任何其他X轴的值。
然后我们有一个方法，其中一些API将做多件事情。
换句话说，这个API还可以返回其他类型的数据，
但在这种情况下，我们要映射的X轴值，Y轴的值。
这是什么，告诉它在那里做，
我们有这样的搜索限制的阵列，其中包含2个值。
第一个是我们在这里看到，这是所有的值
包含内，第一个小盒子的顶部。
>> 换句话说，我们要看的单词战斗，我们要对其进行过滤
在美国文学中的英文文本。
我们有这样的国家，这是美国。
我们有一个语言，即英语，所以我们有所有这些不同的部分
都告诉API正是我们想要的。
我们不知道什么样的数据，我们回去又是，
但我们知道数据是要采取一定的形式。
这个例子是有点复杂的，
你不一定要使用的API这个复杂的，
但是，这是告诉你的范围和能力的API可以做什么。
换句话说，使用一个相对简单的查询系统，我们基本上有一个输入框
在不同的地方有几个其他选择。
>> 让我放大了这里。
我们有一个输入框，几个不同的元数据选择，
我们有Y轴和X轴的选择。
我们实际上并不拥有的许多领域，
我们可以很容易地看到，我们能够查询某种API
并获取数据，然后把它放到这个图表，
这是要显示它的一个有用的方法。
看一个例子，它可能是一个有点熟悉的你们
我们要去到Facebook。
Facebook的API被称为Facebook的走势图，
基本上，这意味着什么是Facebook把自己定位为这个庞大的数据库
大量的不同部位，都有一定的相互之间的关系。
换句话说，我在Facebook上的用户，所以我有一个配置文件，
我也有一定的朋友，和他们每个人都有一个配置文件，
我的每一个朋友有一面墙，有不同的意见就可以了，
这些意见有多么喜欢和所有诸如此类的事情。
>> 有很多的不同部位到Facebook。
这是一个非常复杂的API，而且也吨，你可以用它做，
但它实际上是非常简单易用。
我要开始由要graph.facebook.com / billyjanitsch的，
这是我唯一的帐户名称，您的帐户的名称将会是
某种字，如果你选择了它，或者它可能只是一串数字。
我们回来的是非常基本的信息。
我们可以看到，我有一个名字，这是比利，姓氏，这是Janitsch。
还有，我有一个独特的Facebook ID。
您可以看到，我是男的，我有我的语言设置
英式英语。
换句话说，我们在这里看到非常基本的信息。
这是不是太多了，而是它让我们知道那里的东西。
>> 大卫·马兰我们可以做同样的事情，例如。
我觉得他的名字dmalan。
我们看到大卫·马兰有一个唯一的ID。
他有一个名称，名字，中间名，姓。
我们也看到，他的男性，他的语言设置为英语（美国）。
换句话说，我们在这里看到非常基本的信息。
现在，会发生什么，如果我们尝试别的东西吗？
比方说，我很感兴趣大卫·马兰就喜欢在Facebook上。
我可以做的/喜欢。现在，我们遇到了一个问题。
我们已经得到了某种错误，说一个访问令牌
需要要求本资源。
但是，如果你仔细想想，其实是有道理的，因为这将是不可思议的
如果您可以访问Facebook的数据库中的每一个部分，
从某种简单的API，对不对？
换句话说，想必您的信息不能被访问的人谁想要它。
>> 这个错误是什么意思。
一些API需要一定的权限，才能访问他们的数据。
甚至更高级的API，如Facebook的一个，
将需要一定的权限做一些事情。
我可以看到这个大卫马兰的基本信息。
我可以看到他的男性，他住在美国，
但我不能真的看不到过去的。
为了解决这个问题，现在，Facebook有这很好的工具
这是图形API的探险家，和的想法，是可以排序的
根据您自己的帐户弥补自己的权限
然后查看的东西，具体可以查看您的帐户。
例如，如果我这样做graph.facebook.com/billyjanitsch/likes-
哎呦，我想我必须在这里重新验证我的令牌。
好吧。
如果我这样做了，伟大的，现在我看到，我得到这个对象
这说，我想，这是在游戏和玩具类的池面。
我想，这是在类动物的海象。
这些都是我实际的Facebook喜欢。
他们那种尴尬。
>> 但是我们可以看到，所有返回的JSON数据。
这是非常可读的。
换句话说，我们有这样的数据映射到一个数组某种
这个数组的每个元素是一个HashMap的映射
了相同的名称和一个像的类别。
每一样都有一个唯一的ID。
有各种不同的东西，我们可以得到的数据，
，如果你有兴趣使用Facebook的API的CS50最后项目
或类似的东西，它实际上相当可行的。
基本上你如何绕过身份验证的事情是Facebook
使用的系统称为OAuth，开放式认证，
我不想进入，因为现在的OAuth的或不同类型的
认证往往不同的API之间有很大的差异，
所以我可以花很长的时间去每一个，
但它们实际上是相当不言自明。
>> 如果谷歌Facebook的API，这是非常具有可读性。
有一个整体的规范。
例如，这是Facebook的API的文档，
你可以看到我的用户页面上，这样我就可以了解所有不同的东西
得到的数据
和也，我需要不同的权限才能访问它们。
正如我们所看到的，我们并不需要权限来访问的名称或性别，
但除此之外，我们确实需要对大多数事情的权限。
此页面，或者更确切地说，本网站也将告诉你到那里怎么走吗？
一个令牌可以验证自己的身份。
大多数认证系统使用某种类型的令牌
你在哪里得到这个独特的价值，这是一个很长的随机字符串，
这种方式，他们可以将你与你的要求。
换句话说，他们知道，你什么都没有做他们的数据持怀疑态度。
他们知道你要什么。
他们也知道，你有权限查看该信息。
>> 如果你已经有了一个Facebook应用程序和您的应用程序有一定的用户，
那些用户允许应用程序访问他们的个人资料的某些部分，
那么无论API密钥或应用程序正在使用的令牌，
将能够为这些用户访问的数据。
这可能听起来很复杂，但它也不是太糟糕，
如果你想使用Facebook，我会强烈建议你
考虑在玩弄他们的API。
这是非常冷静，用它你可以做很多不同的事情。
如果用户授予这些权限，你甚至可以回去的API
并说，我要发布到用户的墙，我想他们发布的照片​​，
这就是为什么你的新闻源，你有时会得到那些烦人的事
说你的朋友观看此视频在某种奇怪的网站或类似的东西。
这是因为该应用程序已被授予访问那个人的墙壁上发布。
整体的想法，Facebook的API是非常复杂的，但也是非常有用的。
绝对值得一试，如果你还在寻找一个最终的项目。
>> 另一套API，我会去为CS50的API。
让我在这里放大。
CS50实际上已经把整个系列的API
您可以使用一个最后的项目，或者只是为你正在做什么。
，他们大多是哈佛相关，和他们不同从HUDS菜单，
例如，这个哈佛大学的事件API，这将让你访问列表
不同的事件，在哈佛之类的事情。
因此，我们可以点击其中的任何一个，并得到一个规范的，
你是能够找到的任何API的想法是
它可以让你知道，A，具体的API请求，要求它。
换句话说，如果我想明天发生的所有事件
那么我就明显给它的日期，我想在一个特定的格式，
B，它会告诉我到底是什么回事退给我。
它会说，我要回到你这个JSON对象，
或者像你所看到的，有不同的格式。
>> 您也可以返回一个CSV数据，例如。
但是，你知道这些数据究竟是如何去看看，当你把它找回来
所以你可以期望用它做一些事情。
我们可以向下滚动看到的，例如，如果我们要查询的API
日历，那么我们就可以用这种特殊的URL
并给它一定的参数，都将是我们想要的确切的数据。
同样地，如果我们想在一定格式的数据，
那么我们就可以问它输出一个CSV中的数据，
这只是另一个参数，我们传递的API。
很多很酷的东西在那里做。
我肯定会建议你检查出的CS50的API。
>> 我要看看在这个哈佛食品API，特别是一点点。
其实我设计的一件事是这个哈佛大学NOMS网站，
使用CS50的食物的API来检索的HUDS的菜单的天。
扩展学校的人，HUDS是哈佛大学的餐饮服务。
你得到的是这个页面，它包含了所有的日子，让我们看到了午餐的饭菜。
我们有几个不同的类别。我们bean和全谷物站。
我们有的糙米站。
我们可以看到，早午餐，我们这几年的食品项目。
如果我们点击他们，那么我们得到的营养信息。
你看这是为柚子的营养信息，如果你想知道。
因此，我们要在这里一点点地窥探到后端
看看究竟是如何得到这个数据。
它实际上是非常复杂的。
这个文件看起来有点乱，但请记住，这是处理整个网站，
如果我向下滚动，我们看到这种变化数据的功能。
>> 现在，仅仅是明确的，这是写在CoffeeScript的，
这是一门语言，你可能还没有见过。
但它是相当可读的，所以我会穿过它，就好像是伪代码。
更改日期是一个函数，要在此日期值，
它也将采取在第一，这是我们不关心尽可能多的。
但最重要的是，它有这个日期，
而这个日期是希望的日子里，我们要求所有的食品项目。
然后你看我们有一点点的语法，
这基本上是解析该日为可读的格式。
换言之，该API需要一定的格式中的日期。
你不能只是说，公元2012年11月16日。
不知道做什么用。它希望在一个特定的格式的日期。
我们在这里做的是给它正是格式，
这是一年的值，然后连字号，月值，
一个连字符和日期值。
同时，我们也说，我们希望将数据输出JSON。
>> 现在，我们正在做这AJAX请求，正如我前面提到的，
jQuery有这样的超级有用的AJAX功能，所有你需要做的就是指定
到这里的一些参数，它会回给你，正是你想要的。
我们告诉它，我们希望它去的，这是CS50食品API的URL，
我们得到了从规范。
我们说，我们想要的数据的JSON和
我们要去给它这个数据，我们已经定义了这里。
在这个日子里，我们需要的食品项目。
然后我们要做的是定义了一些成功的功能，
这基本上是API返回的数据时，会发生什么情况。
换句话说，我们已经打包了所有的参数，我们希望，
在这种情况下，我们希望它是天的事实，我们希望它在JSON，
我们把它关闭的API，所以现在的空气污染指数是说，好吧，
这里是您的数据，我回去给你。
我们有成功的函数，这意味着给定的API
成功返回一些数据，我们该怎么办呢？
>> 事实证明，我们要做的就是调用这个更新菜单功能
任何的API返回，这样我们就可以搜索
看到我们所做的就是在这里使用了一堆新的语法
更新的HTML和插入这个新的数据。
这让我们这些箭头的两边，我们可以单击，
现在我们正在寻找的数据，第二天再次第二天，
每次更新该日期值和查询API，
获得一些数据，并把它进入该网站。
同样，你可以看到，超级，超级有用。
这个程序我花了几个小时，一起砍，
我有了更多的经验，很明显，但你的CS50最终项目
可以看看非常喜欢这东西。
>> API是超级强大的，他们采取的工作量。
最后一件事，我会去一些更多的API广泛。
我不会得到尽可能远，因为他们做了什么特别的，
但我会给你那里有什么想法。
2真正有用的，如果你有兴趣在数据分析和可视化
或类似的东西，是游离盐基和维基百科。
维基百科想必大家都知道是一个免费的在线百科全书，
它实际上有一个API，所以如果你想，例如，
让所有的文本和八达通的文章
你可以很容易地做到这一点。
维基百科的API，只是说，嘿，我想，这返回的数据，
，我想这种格式，在文章中，我想是章鱼，
，并很快给你回的信息。
这可以是非常有用的，如果你想某种网站
维基百科或类似的东西，这是一个更好的浏览器。
>> Freebase是几分相似，但它是一个有点困难尽可能API。
Freebase是像维基百科，它是一个在线的百科全书
其中包含了很多很多各种不同的主题不同的数据，
但它存储在一个关系数据库，它是从维基百科略有不同。
维基百科的文章和文章链接到其他物品，
但在大多数情况下，如果你想章鱼的数据，
你去的章鱼文章，获得这些数据，你有一堆文字
关于章鱼，所以这是伟大的。
游离碱的工作在一个稍微复杂的方式
一切都是彼此相关的。
换句话说，如果我们需要寻找的章鱼
它还包含了许多与它关联的类别。
>> 例如，它是一种动物，它生活在水下，
它具有一定的体温。
我不知道。
所有这些类别的链接到其他地方，你可以去
与同一类的东西。
换句话说，章鱼数据集将包含一个链接的数据集所有的动物，
这将让我走动，在数据库中真的很快。
喜欢攀比，如果你正在做的事情，这是非常有用的。
换句话说，给定某一件事，你想看到的
它还有什么相关的和看到什么是不相关的。
诸如此类的事情。它可以是有用的，在多种方式。
如果你正在寻找一个更大的挑战，能够做一些更复杂的事情
我会考虑看看的游离盐基API的。
但在很大程度上，维基百科是一个非常简单的地方去尽可能获取信息。
另一个地方，我会看的是Last.fm，实际上，我要到现场去
的情况下，有些人不熟悉，但Last.fm基本上是一个音乐
口味和建议的网站。
你可以让一个帐户。
您可以从你的音乐播放器上传音乐
的网站，基本上它会开始给你音乐的建议
根据你听。
>> 例如，如果你去到您的个人资料页，这是我的
你可以看到你有一个列表，最近听的曲目。
你可以看到整体的喜爱的艺术家，所有的诸如此类的事情，
再次，有一个大的API背后Last.fm，
你可以用它做很多很多非常酷的事情。
例如，我会去一个朋友的页面，这个的Last.fm工具网站有。
这实际上是一个平台，是建立在Last.fm API，
做了一些非常有趣的事情。
如果我在我的用户名登录，例如，
我可以问它来生成一个标签云，例如，
什么，会做的，是给我回的图像
所有不同的风格之类的东西，我喜欢听。
它是如何做的呢？
基本上说Last.fm API，该用户。
我想知道，他们已经听到过的每首歌曲的风格，
你可以做到这一点通过一个非常简单的AJAX调用Last.fm API。
你会得到一个大名单，然后明显一些其他的东西正在做
把它变成一个词云，但你可以看到整体
这是很容易的访问，很容易使用。
真的很好了一些东西。
>> 我想这就是所有我要说的整体。
最后一件事，我会提到一般的API是
有时你会碰到一种叫速率限制，
和速率限制的想法是，你不想滥用的API。
换句话说，这是非常好的，很多这些网站的API
你可以去免费使用。
但是，如果你赚了几百万或数十亿每天的请求，
例如，如果你停留在一个无限循环，无限查询
某种形式的API和，取回一个巨大的数据量，
显然，这不是很好，所以有很多的API做的是有速率限制功能
说，你只能每天每1,000个请求IP地址或类似的东西。
如果你做了很多的测试和诸如此类的事情，
有时你会遇到，突然，它会关闭你
并说没有，我不会给你任何更多的数据。
>> 你想要做的是游戏规则。
你要确保你读了API规范，仔细。
如果它有一定的规则连接到它，就像你每天只能使X查询
或者可以只访问一个数据库的一部分，一定数目的次数
或类似的东西，你要确保你坚持。
只要你在这些规则，你可能有一个非常好的时间，使用API​​。
您的整体外卖API是真的，真的有用。
>> 有几乎所有大的网络服务的API。
几乎所有的谷歌地球，谷歌地图，谷歌工具套件的一部分，
Gmail，谷歌日历，所有这些东西的API。
你可以用它们来都得到来自服务器的数据和发送数据到服务器。
换句话说，如果你想使一个日历应用程序可以更新
一个人的谷歌日历，有一个API，。
如果你想的东西，会告诉你在哪里
某个地址的位置，你可以使用谷歌地图API是。
API是极其有用​​的，它们到处都是。
如果你有兴趣在某种观念，
有可能是一个相关的API，你可以用它来获得大量的数据
很快很简单。
>> 如果你还在寻找一个项目，或者如果你只是想玩弄
在一般的东西，API是绝对值得做的事情。
谢谢，我很乐意回答任何问题，你们可能。
好了，非常感谢。
[CS50.TV]