Выбор между пакетом:html, dart:html, dart:io (класс HttpClient) и пакетом:http API для получения ресурсов HTTP

Я понял, что в настоящее время существует как минимум три "официальных" библиотеки Dart, которые позволяют мне выполнять HTTP-запрос. Более того, три из этих библиотек (dart:io (класс HttpClient), package:http и dart:html) имеют разные несовместимые API.

На сегодняшний день package: html не предлагает эту функциональность, но на странице GitHub я обнаружил, что она нацелена на 100% -ную совместимость API с dart:html, поэтому эти методы будут добавлены там в конце концов.

Какой пакет предоставляет наиболее перспективный и независимый от платформы API для выдачи HTTP-запроса в Dart?

Это пакет: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}");
});

Это дротик:html/package:html?

import 'dart:html';

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

Или дротик?

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 ответ

Решение

html Пакет представляет собой HTML-парсер, который позволяет работать со стороной HTML-сервера. Я не ожидал, что он получит некоторые возможности HttpRequest.

http Целью пакета является предоставление единого API для клиентского и серверного кода Dart. API в dart:html это всего лишь оболочка над API, предоставляемым браузером. API HttpRequest в dart:io был построен без ограничений браузера и, таким образом, отклоняется от dart:html, package:http предоставляет унифицированный API, который делегирует dart:html при запуске в браузере и dart:io при запуске на сервере.

Я думаю package:http это будущее и кроссплатформенное и должно хорошо соответствовать вашим требованиям.

Другие вопросы по тегам