Я понял, что в настоящее время существует как минимум три «официальных» библиотеки Dart, которые позволяют мне выполнять HTTP запрос. Более того, три из этих библиотек (dart: io (класс HttpClient), пакет: http и dart: html) имеют каждый другой, несовместимый API.Выбор между пакетами: html, dart: html, dart: io (класс HttpClient) и пакет: http API для извлечения HTTP-ресурсов
На сегодняшний день пакет: 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}");
});
Или стрелка: 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-запрос истории будет. Что-то говорит мне, что это будет еще один другой зверь из всего, что мы видели до сих пор.
Интересно, почему для начала не был унифицирован API. Какова цель вызова той же вещи 'statusCode' в' dart: io' и 'status' в' dart: html'? Единственная причина, по которой я могу придумать, - это отсутствие внимания. Не то, что я хочу увидеть в стандартной библиотеке языка. – user7610
Они просто не хотели, чтобы реализация браузера определяла, как реализовать реализацию Dart. Они не могут контролировать, как API развивается в браузере. Я думаю, что это достаточно разумно, чтобы просто сделать свое дело. –
Ну, они, по крайней мере, работают над пакетом: http, чтобы объединить этот материал сейчас. – user7610