内容简介
本专题将带你从零开始实现一个简单的、RESTFUL 风格的 Todo 服务。包括:JSON 响应及请求、PostgreSQL 的使用、自定义错误的处理、RESTFul 的定义、配置文件、日志的记录等。配置文件
本章我们将实现配置文件的加载。我们将对 axum 的监听地址和 PostgreSQL 相关的信息进行配置,并保存到`.env`文件中。错误处理
本章我们将自定义错误、自定义一个`Result`以及让它们作为 handler 的返回值,进行 HTTP 响应。自定义响应
我们的 Todo 服务是对外提供 API 的服务,它的响应格式总是`JSON`类型。为此,我们可以定义响应类型,以简化 handler 的编写。数据库、模型、状态共享及TodoList
现在是时候开始进行数据库操作,以便实现功能了。本章将实现`TodoList`的功能。日志及重构
本章我们将对之前的代码进行重构并且使用日志记录可能发生的错误。实现TodoItem
经过一番重构,目前我们的 Todo 服务已经基本完善了,现在只差最后一个部分:TodoItem。本章我们就来实现它。总结
经过一番不懈努力,我们终于完成了一个提供 RESTFul API 的 Todo 服务。虽然功能简单,但它涉及到了 Axum 开发的多个方面。
内容简介
本专题将带你从零开始实现一个简单的、RESTFUL 风格的 Todo 服务。包括:JSON 响应及请求、PostgreSQL 的使用、自定义错误的处理、RESTFul 的定义、配置文件、日志的记录等。
在此之前,我们强烈建议你先阅读《漫游 axum》。
模型
-
TodoList
:待办事项 -
TodoItem
:待办事项的项目
TodoList
:待办事项
API
我们的 Todo 服务提供以下 API:
请求方式 | 路由 | 说明 |
---|---|---|
GET | /todo | 所有 TodoList |
POST | /todo | 为指定的 TodoList 添加 Item |
GET | /todo/:list_id | 获取 TodoList 详情 |
DELETE | /todo/:list_id | 删除指定的 TodoList 及其 Item |
PUT | /todo/:list_id | 修改 TodoList |
GET | /todo/:list_id/items | 获取 TodoList 关联的 Item |
GET | /todo/:list_id/items/:item_id | 获取 TodoList 关联的某个 Item 详情 |
PUT | /todo/:list_id/items/:item_id | 修改 TodoList 关联的某个 Item 详情 |
DELETE | /todo/:list_id/items/:item_id | 删除 TodoList 关联的某个 Item 详情 |
开始之前,请先创建 PostgreSQL,并导入以下 SQL 语句:
DROP TABLE IF EXISTS todo_item;
DROP TABLE IF EXISTS todo_list;
CREATE TABLE todo_list(
id SERIAL PRIMARY KEY,
title VARCHAR(150) NOT NULL
);
CREATE TABLE todo_item(
id SERIAL PRIMARY KEY,
title VARCHAR(150) NOT NULL,
checked BOOLEAN NOT NULL DEFAULT FALSE,
list_id INTEGER NOT NULL,
FOREIGN KEY(list_id) REFERENCES todo_list(id)
);
INSERT INTO todo_list (title) VALUES ('清单1'), ('清单2');
INSERT INTO todo_item (title, list_id) VALUES
('清单项目 1', 1),
('清单项目 2', 1),
('清单项目 A', 2);