选择package:html,dart:html,dart:io(类HttpClient)和包:http API来获取HTTP资源

时间:2015-05-16 17:02:32

标签: android dart httprequest api-design dart-pub

我意识到目前至少有三个“官方”Dart库允许我执行HTTP请求。更重要的是,其中三个库(dart:io(类HttpClient),包: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}");
});

或者飞镖: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。这也增加了包装:混合中的天空(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请求故事是什么。有些东西告诉我,到目前为止我们所看到的还是另一种不同的野兽。

1 个答案:

答案 0 :(得分:5)

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是未来证明和跨平台的,应该非常适合您的要求。