执行 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 包:
- 打开项目中的
pubspec.yaml文件。 - 找到
# TODO-1: Add dependency(第 14 行),添加http包,如下所示:
1dependencies: 2 # ... 3 http: ^0.13.4
添加基础 URL
由于开发 REST API 服务器超出了本课程范围,我们将使用一个 模拟 API 服务器。
模拟 API 服务器通过提供真实的模拟响应来模仿真实 API 服务器的行为。
-
首先,进入
lib/utilities/users_service.dart,将// TODO-2: Import http and dart:convert(第 1 行)替换为以下代码:1import 'package:http/http.dart'; 2import 'dart:convert'; -
要使用 API,需要获取基础 URL 的引用。找到
// TODO-3: Add base URL,添加以下基础 URL:1final String baseUrl = "https://6574db93b2fbb8f6509cbae5.mockapi.io";
处理 GET 请求
- 在
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 请求的示例输出:
使用 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