Web 平台 APIs

Deno 旨在使用 web 平台的 API(如 fetch),而不是新发明一个有意义的特有 API 。这些 API 通常遵循规范,而且应该与 Chrome 和 Firefox 中的实现相匹配。在某些情况下,因为 Deno 有着不同的安全模式,所以稍微偏离规范是有意义的。

以下是 Deno web 平台 API 的实现列表:

fetch API

概述

fetch API 可以用来发送 HTTP 请求。 它是按照 WHATWG fetch 规范 中的规定实现的。

你可以在 MDN 中找到关于 fetch API 的文档。

偏离规范

  • Deno 的用户代理没有 cookie jar 包。 因此,响应中的 set-cookie 头不会被处理,也不会从可见的响应头中被过滤。
  • 因为 Deno 用户代理目前还没有多个源的概念,所以 Deno 没有遵循同源策略, 同时也没有 cookie jar 包。 这意味着 Deno 不需要保护认证数据的跨源泄漏。 正因为如此, Deno 没有实现以下 WHATWG fetch 规范中的部分:
    • 3.1'Origin' 头
    • 3.2CORS 协议
    • 3.5CORB
    • 3.6'Cross-Origin-Resource-Policy' 头
    • 原子 HTTP 重定向处理
    • opaqueredirect 响应类型
  • fetch 请求的 redirect 属性设为 manual 将不会返回 opaqueredirect 响应,而是返回一个 basic 响应。

CustomEvent, EventTargetEventListener

概述

DOM 事件 API 可以用来调度和监听应用程序中发生的事件。 它是按照 WHATWG DOM 规范 中的规定实现的。

你可以在 MDN 里找到关于 EventTarget API 的文档。

偏离规范

  • 没有冒泡事件,因为 Deno 没有 DOM 层次结构,所以没有树状的事件可以冒泡/捕获。

概述

WebWorker API 可以在一个单独的线程中执行代码。 它是按照 WHATWG HTML 规范 中的规定实现的。

你可以在 MDN 里找到关于 worker API 的文档。

偏离规范

  • 目前不支持从 blob URLs 创建 worker。
  • 目前发布的数据不是结构化的克隆, 而是被序列化为 JSON。
  • 目前,对象的所有权不能在 worker 之间转移

其他 APIs


Typings

用 TypeScript 实现定义的 web APIs 能够在 lib.deno.shared_globals.d.ts lib.deno.window.d.ts 文件中查看。

关于 workers 的具体定义可以在 lib.deno.worker.d.ts 文件中查看。