在 package:html、dart:html、dart:io(HttpClient 类)和 package:http API 之间进行选择来获取 HTTP 资源

问题描述 投票:0回答:2

我意识到目前至少有三个“官方”Dart 库允许我执行 HTTP 请求。更重要的是,其中三个库(dart:io(类 HttpClient)、package:http 和 dart:html)各自具有不同的、不兼容的 API。

截至今天,package:html 不提供此功能,但在其 GitHub 页面上我发现它的目标是与 dart:html 100% API 兼容,因此最终将添加这些方法。

哪个包提供了最面向未来且独立于平台的 API 来在 Dart 中发出 HTTP 请求?

是包:http吗?

import 'package:http/http.dart' as http;

var url = "http://example.com";
http.get(url)
    .then((response) {
  print("Response status: ${response.statusCode}");
  print("Response body: ${response.body}");
});

是 dart:html/package:html 吗?

import 'dart:html';

HttpRequest.request('/example.json')
  .then((response) {
      print("Response status: ${response.status}");
      print("Response body: ${response.response}");
});

或者 dart:io?

import 'dart:io';

var client = new HttpClient();
client.getUrl(Uri.parse("http://www.example.com/"))
    .then((HttpClientRequest request) {
      // Optionally set up headers...
      // Optionally write to the request object...
      // Then call close.
      ...
      return request.close();
    })
    .then((HttpClientResponse response) {
      print("Response status: ${response.statusCode}");
      print("Response body:");
      response.transform(UTF8.decoder).listen((contents) {
        print(contents);
      });
    });

假设我也想涵盖 Android。这也添加了 package:sky (https://github.com/domokit/sky_sdk/)。我承认这不是“官方”Google 库。

import 'package:sky/framework/net/fetch.dart';

Response response = await fetch('http://example.com');
print(response.bodyAsString());

什么是(将成为)常规产品是 https://www.youtube.com/watch?v=t8xdEO8LyL8。我想知道他们的 HTTP 请求故事将会是什么。有件事告诉我,这将是另一种与我们迄今为止所见过的不同的野兽。

android dart httprequest api-design dart-pub
2个回答
8
投票

html
包是一个HTML解析器,允许与HTML服务器端一起工作。我不希望它获得一些 HttpRequest 功能。

http
包旨在为客户端和服务器 Dart 代码提供统一的 API。
dart:html
中的API只是浏览器提供的API的包装器。
dart:io
中的HttpRequest API是在没有浏览器限制的情况下构建的,因此与
dart:html
不同。
package:http
提供统一的 API,在浏览器中运行时委托给
dart:html
,在服务器上运行时委托给
dart:io

我认为

package:http
是面向未来且跨平台的,应该非常适合您的要求。


0
投票

https://pub.dev/packages/web

如果您维护使用 dart:html 或任何其他 Dart SDK Web 库的公共 Flutter 包,您应该尽快迁移到 package:web。 package:web 正在取代 dart:html 和其他 Web 库,作为 Dart 的长期 Web 互操作解决方案。阅读 package:web 与 dart:html 部分以获取更多信息。

https://dart.dev/interop/js-interop/package-web

© www.soinside.com 2019 - 2024. All rights reserved.