域名 AXUM.RS 将于2025年10月到期。我们无意再对其进行续费,我们希望你能够接续这个域名,让更多 AXUM 开发者继续受益。
  • 方案1️⃣AXUM.RS 域名 = 3000
  • 方案2️⃣方案1️⃣ + 本站所有专题原始 Markdown 文档 = 5000
  • 方案3️⃣方案2️⃣ + 本站原始数据库 = 5500
如果你有意接续这份 AXUM 情怀,请与我们取得联系。
说明:
  1. 如果有人购买 AXUM.RS 域名(方案1️⃣),或者该域名到期,本站将启用新的免费域名继续提供服务。
  2. 如果有人购买了 AXUM.RS 域名,且同时购买了内容和/或数据库(方案2️⃣/方案3️⃣),本站将关闭。届时我们或许会以另一种方式与你再相遇。

内容简介

本专题将带你从零开始实现一个简单的、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);

代码

要查看完整内容,请先登录