概述

今天逛MDN,无意中看到了web API简介,觉得挺有意思的,就认真读了一下。

下面是我在读的时候对感兴趣的东西的总结,供自己开发时参考,相信对其他人也有用。

什么是API

API (Application Programming Interface)就是一些规则,它使软件与其它东西更好的交互。

原文如下:

An API (Application Programming Interface) is a set of features and rules that exist inside a software program enabling interaction between the software and other items, such as other software or hardware.

常见浏览器API

  • 操作文档的API
  • 从服务器获取数据的API
  • 用于绘制和操作图形的API
  • 音频和视频API
  • 设备API
  • 客户端存储API

注意:浏览器中封装了很多API,有几百个吧,具体可以看这里:MDN API index page

API的常见操作

  • API通常有几个可用的options,用来调整以获得程序所需的确切环境

  • API通常仅在操作完成时调用函数

在使用API时,我们往往不能立即获得返回的数据,因此必须在确保一个操作完成之后再进行另一个操作。我们通过回调函数实现这种操作,或者更为现代的,用Promise实现。

  • API通常有可识别的入口

这些入口一般是API对象的实例。比如DOM API的入口是document,Canvas API的入口是canvas。

  1. var em = document.createElement('em');
  2. var canvas = document.querySelector('canvas');
  3. var ctx = canvas.getContext('2d');
  • API通常使用事件来处理状态的变化

比如:XMLHttpRequest API的onload事件在成功返回时就触发包含请求的资源。

  • API通常在适当的地方有额外的安全机制

为了用户的安全,很多API一般都会请求权限。

XMLHttpRequest API

也就是我们俗称的Ajax。

一个简单的例子如下:

  1. //正如前面所说,我们获得API的入口:创建一个XHR请求。
  2. var request = new XMLHttpRequest();
  3. //我们使用open()方法来指定用于从网络请求资源的get方法, 以及它的URL。
  4. request.open('GET', url);
  5. //我们设置我们期待的响应类型—这是由请求的responseType属性定义的—作为text。
  6. //这并不是绝对必要的 — XHR默认返回文本。
  7. request.responseType = 'text';
  8. //正如前面所说,我们我们用一个事件onload来判断是否获得了返回的数据。
  9. //如果返回则执行回调函数。
  10. request.onload = function() {
  11. poemDisplay.textContent = request.response;
  12. };
  13. //以上都是XHR请求的设置 — 在我们告诉它之前,它不会真正运行。
  14. //我们用send()来运行它们。
  15. request.send();

Fetch API

Fetch API基本上是XHR的一个现代替代品——它是最近在浏览器中引入的,它使异步HTTP请求在JavaScript中更容易实现,对于开发人员和在Fetch之上构建的其他API来说都是如此。

我们把上面的XHR代码改为Fetch代码:

  1. fetch(url).then(function(response) {
  2. response.text().then(function(text) {
  3. poemDisplay.textContent = text;
  4. });
  5. });

首先,我们调用了fetch()方法,将我们要获取的资源的URL传递给它。这相当于现代版的XHR中的request.open(),另外,我们不需要任何等效的send()方法。

然后,可以看到.then()方法连接到了fetch()末尾-这个方法是Promises的一部分,是一个用于执行异步操作的现代JavaScript特性。fetch()返回一个promise,它将解析从服务器发回的响应。我们使用then()来运行一些后续代码,这是我们在其内部定义的函数。这相当于XHR版本中的onload事件处理程序。

然后,在函数内部,我们获取响应并运行其text()方法。这基本上将响应作为原始文本返回,这相当于在XHR版本中的responseType = 'text'。

最后,我们执行回调函数。把text赋值给textContent。

注意:大多数现代的JavaScript api都是基于Promises的。

注意:Fetch确实比XHR更稳定强力,但是很多浏览器不支持。但是随着IE浏览器的使用量减少(微软在逐渐开发使用Edge浏览器取代IE),Fetch的使用会越来越流行,但是在这之前,我们必须用一段时间的XHR。

web API简介(一):API,Ajax和Fetch的更多相关文章

  1. ZABBIX API简介及使用

    API简介 Zabbix API开始扮演着越来越重要的角色,尤其是在集成第三方软件和自动化日常任务时.很难想象管理数千台服务器而没有自动化是多么的困难.Zabbix API为批量操作.第三方软件集成以 ...

  2. ZooKeeper系列4:ZooKeeper API简介及编程

    问题导读: 1.ZooKeeper API 共包含几个包? 2.如何使用ZooKeeper API 创建zookeeper应用程序? 1)ZooKeeper API 简介   ZooKeeper AP ...

  3. web API简介(二):客户端储存之document.cookie API

    概述 前篇:web API简介(一):API,Ajax和Fetch 客户端储存从某一方面来说和动态网站差不多.动态网站是用服务端来储存数据,而客户端储存是用客户端来储存数据.document.cook ...

  4. Web Api 简介

    ASP.NET Web API 简介  ASP.NET MVC 4 包含了 ASP.NET Web API, 这是一个创建可以连接包括浏览器.移动设备等多种客户端的 Http 服务的新框架, ASP. ...

  5. web API简介(四):客户端储存之IndexedDB API

    概述 前篇:web API简介(三):客户端储存之Web Storage API 客户端储存从某一方面来说和动态网站差不多.动态网站是用服务端来储存数据,而客户端储存是用客户端来储存数据. Index ...

  6. web API简介(三):客户端储存之Web Storage API

    概述 前篇:web API简介(二):客户端储存之document.cookie API 客户端储存从某一方面来说和动态网站差不多.动态网站是用服务端来储存数据,而客户端储存是用客户端来储存数据. W ...

  7. Promise API 简介

    Promise API 简介 译者注: 到处是回调函数,代码非常臃肿难看, Promise 主要用来解决这种编程方式, 将某些代码封装于内部. Promise 直译为"承诺",但一 ...

  8. 构建简单的 C++ 服务组件,第 1 部分: 服务组件体系结构 C++ API 简介

    构建简单的 C++ 服务组件,第 1 部分: 服务组件体系结构 C++ API 简介 熟悉将用于 Apache Tuscany SCA for C++ 的 API.您将通过本文了解该 API 的主要组 ...

  9. SharePoint 2013 APP 开发示例 (五)跨域访问 Web Service (REST API)

          虽然 JQuery 也能通过授权header实现跨域, 但SharePoint 提供了更简单的方法,它被实现在SP.RequestExecutor里 .它能访问跨域的服务包括REST AP ...

随机推荐

  1. CSS: pseudo-classes and pseudo-elements

    1.Definition: pseudo-classes The pseudo-class concept is introduced to permit selection based on inf ...

  2. Nginx虚拟目录设置

    location ~ .*\.html$   匹配所有以.html结尾的链接 --------------------------------------------------------- 关于a ...

  3. Linux网络编程学习(二) ----- 进程控制(第三章)

    1.进程和程序 程序是一个可执行文件,而一个进程是一个执行中的程序实例.一个进程对应于一个程序的执行,进程是动态的,程序是静态的,多个进程可以并发执行同一个程序.比如几个用户可以同时运行一个编辑程序, ...

  4. JAVA获取系统信息以及系统时间

    在做测试的时候,经常需要获取系统信息,并且用获取到的系统时间给生成的报告取名字. 以下代码实在TestNG展示的,没有Test NG的话需要些一个main方法. import java.net.Ine ...

  5. IO 、NIO、AIO

    Java 中的流 https://ifeve.com/java-nio-vs-io/

  6. 【Django】关于设置和获取cookies

    def TestCookies(request): response=HttpResponse() # cookie=request.COOKIES#下面两句等cookies设置以后,才使用 # if ...

  7. c++ 中的智能指针实现

    摘要:C++11 中新增加了智能指针来预防内存泄漏的问题,在 share_ptr 中主要是通过“引用计数机制”来实现的.我们今天也来自己实现一个简单的智能指针: // smartPointer.cpp ...

  8. C# Winform 跨线程更新UI控件常用方法汇总(多线程访问UI控件)

    概述 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现“线程间操作无效: 从不是创建控件的线程访问它”的异常.处理跨线程更新Winform UI控件常用的方法有4种:1. ...

  9. c#: 任务栏进度显示(TaskbarManager)

    Win7及以上系统支持任务栏进度条,为有进度类应用显示进度于任务栏,甚为方便. 以c#之WinForm实现其,大多采用Windows API Code Pack这个方案,加多引用,比较繁琐,而我总也打 ...

  10. 分布式Snowflake雪花算法

    前言 项目中主键ID生成方式比较多,但是哪种方式更能提高的我们的工作效率.项目质量.代码实用性以及健壮性呢,下面作了一下比较,目前雪花算法的优点还是很明显的. 优缺点比较 UUID(缺点:太长.没法排 ...