Logo
Section 1 / 11

执行 CRUD 操作

学习如何处理互联网上的数据。

导入

执行 CRUD 操作

学习如何处理互联网上的数据。

简介

在大多数情况下,我们的应用程序需要具备动态性。动态应用必须与后端服务进行通信,以获取和发送数据。

在本课程中,我们将使用 REST 通过 HTTP 与后端服务进行通信。REST 架构中的核心抽象概念是“资源”,即任何可以命名的信息。

执行 CRUD 操作

REST 中最常见的操作是 Create(创建)、Read(读取)、Update(更新)和 Delete(删除)——也称为 CRUD 操作。

这些操作通过 REST 资源方法对资源执行,主要包括:

  • POST:创建新资源
  • GET:读取资源
  • PATCH:更新资源
  • DELETE:删除资源

虽然还有其他 REST 方法,但我们将重点介绍上述四种,因为它们是最常用的。

我们将基于以下示例应用进行开发:

No configuration found for ID: 5cf94120e18fd327c811d67a0988b1f9669b0193ebf91d55603cecbfc18c7b9f

添加 http 包

要在应用程序中使用 REST 获取数据,我们需要从 pub.dev 安装 http 包:

  1. 打开项目中的 pubspec.yaml 文件。
  2. 找到 # TODO-1: Add dependency(第 14 行),添加 http 包,如下所示:
1dependencies: 2 # ... 3 http: ^0.13.4

添加基础 URL

由于开发 REST API 服务器超出了本课程范围,我们将使用一个 模拟 API 服务器。

模拟 API 服务器通过提供真实的模拟响应来模仿真实 API 服务器的行为。

  1. 首先,进入 lib/utilities/users_service.dart,将 // TODO-2: Import http and dart:convert(第 1 行)替换为以下代码:

    1import 'package:http/http.dart'; 2import 'dart:convert';
  2. 要使用 API,需要获取基础 URL 的引用。找到 // TODO-3: Add base URL,添加以下基础 URL:

    1final String baseUrl = "https://6574db93b2fbb8f6509cbae5.mockapi.io";

处理 GET 请求

  1. 在 lib/utilities/users_service.dart 文件中,找到 // TODO-4: Fetch all users,将以下代码作为 getUsers() 方法的内容添加进去:
1 2Future<List<dynamic>> getUsers() async { 3 Response res = await get(Uri.parse('$baseUrl/api/users')); 4 if (res.statusCode == 200) { 5 return jsonDecode(res.body); 6 } else { 7 throw "Unable to retrieve contacts"; 8 } 9}

getUsers 方法首先向 /api/users 资源发送 GET 请求。然后检查 响应的状态码。如果状态码为 200(表示成功),则解码响应体并返回用户列表。否则抛出错误。下图展示了 GET 请求的示例输出:

...
示例 GET 响应

使用 PATCH 方法更新用户

找到 // TODO-5: Update a user,将代码更新为如下内容:

1Response res = await patch(Uri.parse('$baseUrl/api/users/$id'), body: data); 2 if (res.statusCode == 200) { 3 return jsonDecode(res.body); 4 } else { 5 throw "Unable to update contact"; 6 }

使用 POST 方法创建用户

找到 // TODO-6: Create new user,将其替换为以下代码:

1Response res = await post(Uri.parse('$baseUrl/api/users'), body: data); 2 if (res.statusCode == 200) { 3 return jsonDecode(res.body); 4 } else { 5 throw "Unable to create contact"; 6 }

在上述代码中,我们使用 post() 方法发起 POST 请求,该请求接收 url、headers 和 body 参数。其中 body 包含要创建的资源内容。该代码片段展示了一个示例 POST 请求。

使用 DELETE 方法删除用户

找到 // TODO-7: Delete a user,将其替换为以下代码:

1Response res = await delete(Uri.parse('$baseUrl/api/users/$id')); 2 if (res.statusCode == 200) { 3 return jsonDecode(res.body); 4 } else { 5 throw "Unable to delete contact"; 6 }

删除资源时,只需要其唯一标识符——在此处即用户的 ID。只要请求返回成功响应,我们就已成功删除该资源。

No configuration found for ID: 5bacf3aa693934df4724a201851129630436a2411fbabb6b41bded38df1b4b9f

可访问性与本地化

请求认证