📜  Flutter-访问REST API(1)

📅  最后修改于: 2023-12-03 15:30:49.663000             🧑  作者: Mango

Flutter-访问REST API

在Flutter中,要访问REST API,通常需要使用http库。该库提供了一个简单的API,用于发送HTTP请求和处理响应。

发送GET请求

要发送GET请求,我们可以使用http库中的get方法,并指定API的URL。下面是一个简单的示例程序:

import 'package:http/http.dart' as http;

Future<void> getData() async {
  final url = 'https://jsonplaceholder.typicode.com/todos';
  final response = await http.get(Uri.parse(url));

  if (response.statusCode == 200) {
    print(response.body);
  } else {
    print('Request failed with status: ${response.statusCode}.');
  }
}

注意,上面的代码片段使用了async和await关键字,这样可以使我们以异步方式发送请求并等待响应。如果响应的状态码为200,则我们将收到包含响应体的字符串。

发送POST请求

要发送POST请求,我们可以使用http库中的post方法,并指定API的URL和要发送的数据。下面是一个简单的示例程序:

import 'package:http/http.dart' as http;

Future<void> postData() async {
  final url = 'https://jsonplaceholder.typicode.com/posts';
  final response = await http.post(
    Uri.parse(url),
    body: {'title': 'foo', 'body': 'bar', 'userId': '1'},
  );

  if (response.statusCode == 201) {
    print(response.body);
  } else {
    print('Request failed with status: ${response.statusCode}.');
  }
}

注意,上面的代码片段使用了body参数,这样我们就可以指定要发送的数据。

设置请求头

有时,我们需要设置自定义的请求头,以便向API发送特定的信息。例如,我们可以设置Authorization头,以便向受保护的API发送令牌。

要设置请求头,我们可以使用http库中的Headers类。下面是一个示例程序:

import 'package:http/http.dart' as http;

Future<void> getDataWithHeaders() async {
  final url = 'https://jsonplaceholder.typicode.com/todos';
  final headers = {'Authorization': 'Bearer my-token'};
  final response = await http.get(Uri.parse(url), headers: headers);

  if (response.statusCode == 200) {
    print(response.body);
  } else {
    print('Request failed with status: ${response.statusCode}.');
  }
}

在上面的代码片段中,我们向请求头中添加了一个名为Authorization的字段,并将其设置为标头值。接下来,我们将这个头部传递给http.get方法。

解析JSON响应

在REST API中,通常会返回JSON格式的响应。要解析JSON响应,我们可以使用Dart内置的json库。该库提供了将JSON字符串解析为Dart对象的方法。

下面是一个将JSON响应解析为列表的示例程序:

import 'dart:convert';

import 'package:http/http.dart' as http;

class Todo {
  Todo({
    required this.userId,
    required this.id,
    required this.title,
    required this.completed,
  });

  final int userId;
  final int id;
  final String title;
  final bool completed;

  factory Todo.fromJson(Map<String, dynamic> json) => Todo(
        userId: json['userId'],
        id: json['id'],
        title: json['title'],
        completed: json['completed'],
      );
}

Future<void> getTodos() async {
  final url = 'https://jsonplaceholder.typicode.com/todos';
  final response = await http.get(Uri.parse(url));

  if (response.statusCode == 200) {
    final data = jsonDecode(response.body) as List<dynamic>;

    final todos = data.map((e) => Todo.fromJson(e)).toList();

    print(todos);
  } else {
    print('Request failed with status: ${response.statusCode}.');
  }
}

在上面的代码片段中,我们首先将JSON字符串解码为一个动态列表。接下来,我们将数据映射到Todo对象,并将其放入Todo对象列表中。

总结

在Flutter中,我们可以使用http库来访问REST API。我们可以使用http.get或http.post方法发送GET或POST请求,并使用http的头部参数来添加自定义头部数据。我们可以将响应解析为JSON格式,并将其映射到Dart对象。

以上就是Flutter中访问REST API的介绍,希望可以对你有所帮助。