可以使用Flutter中的主体发出GET请求吗?

时间:2019-08-28 20:53:44

标签: flutter dart dart-http

我制作了一个API,该API通过GET请求根据给定的id从数据库中读取数据。

它获取一些数据,其中id等于某个整数。

我想使用package:http/http.dart在Flutter中调用此API,但是GET请求不允许我输入请求正文(我将在id中传递给我)。

我已经搜索了Google,但都没有结果(我可能只是在搜索错误的内容)。我尝试将我的API更改为POST而不是GET,这是可行的,但我觉得它违反了GET的目的。

这是我使用POST的方式:

String url = "http://example.com/api/v1";
Map<String, String> headers = {"Content-type": "application/json"};

String json = '{"id": 1}';

Response response = await post(url, headers: headers, body: json);

但是我可以在Flutter中使用GET实现吗?

2 个答案:

答案 0 :(得分:1)

您可以使用Request class

final request = Request('GET', 'http://example.com/api/v1');

request.body = '{"id": 1}';

final response = request.send().stream.first;

或者,您也可以使用惯用语法,即标准过程,并在URI中提供参数:

await get('http://example.com/api/v1?id=1', headers: headers, body: json);

答案 1 :(得分:-1)

有一个dart程序包,为http请求提供了一些帮助程序类。

Github:https://github.com/Ephenodrom/Dart-Basic-Utils

通过以下方式安装:

dependencies:
  basic_utils: ^1.5.1

它也是EZ-Flutter系列的一部分:

Github:https://github.com/Ephenodrom/EZ-Flutter 文件:https://ez-flutter.de/docs

dependencies:
  ez_flutter: ^0.2.5

在您的情况下,您无法在GET请求中发送正文。您必须在要调用的网址中设置ID。 用法

Map<String, String> headers = {
  "Some": "Header"
};
Map<String, String> queryParameters = {
  "Some": "Parameter"
};

String url = "example.com/api/v1/something/;
String id ="100"
url = url + id;


    Map<String, dynamic> reaponseBody;
    try {
        responseBody = await HttpUtils.getForJson(url,
        queryParameters: queryParameters, headers: headers);
    } catch (e) {
        // Handle exception, for example if response status code != 200-299
    }
    // do something with the response body

其他信息:

这些都是HttpUtils类中的所有方法。

Future<Map<Response> getForFullResponse(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> getForJson(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
Future<String> getForString(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
Future<Map<Response> postForFullResponse(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> postForJson(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<String> postForString(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Response> putForFullResponse(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> putForJson(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<String> putForString(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Response deleteForFullResponse(String url,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> deleteForJson(String url,{Map<String, String> queryParameters,Map<String, String> headers});
Future<String> deleteForString(String url,{Map<String, String> queryParameters,Map<String, String> headers});
Map<String, dynamic> getQueryParameterFromUrl(String url);
String addQueryParameterToUrl(String url, Map<String, dynamic> queryParameters);