2015-05-16 3 views
1

Я понял, что в настоящее время существует как минимум три «официальных» библиотеки 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-запрос истории будет. Что-то говорит мне, что это будет еще один другой зверь из всего, что мы видели до сих пор.

ответ

3

Пакет 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 является будущим доказательством и кросс-платформенным и должен соответствовать вашим требованиям.

+0

Интересно, почему для начала не был унифицирован API. Какова цель вызова той же вещи 'statusCode' в' dart: io' и 'status' в' dart: html'? Единственная причина, по которой я могу придумать, - это отсутствие внимания. Не то, что я хочу увидеть в стандартной библиотеке языка. – user7610

+0

Они просто не хотели, чтобы реализация браузера определяла, как реализовать реализацию Dart. Они не могут контролировать, как API развивается в браузере. Я думаю, что это достаточно разумно, чтобы просто сделать свое дело. –

+0

Ну, они, по крайней мере, работают над пакетом: http, чтобы объединить этот материал сейчас. – user7610