菜单

文章端点

相关源文件

本文档提供了RealWorld项目中与文章相关的API端点的详细技术文档。它涵盖了检索、创建、更新和删除文章的端点,以及收藏功能。有关文章评论的信息,请参阅评论和标签端点

文章数据模型

文章是RealWorld应用程序的核心实体。在探索端点之前,理解数据模型非常重要。

来源: apps/api/prisma/migrations/20241009081140_init/migration.sql1-95

文章实体包含

  • 唯一标识符 (id)
  • URL友好的 slug (slug)
  • 内容字段 (title, description, body)
  • 时间戳 (createdAt, updatedAt)
  • 作者引用 (authorId)

一篇文章可以有多个标签和评论,也可以被多个用户收藏。

文章端点概述

API提供了多个用于处理文章的端点

来源: api/openapi.yml153-409

列出文章端点

这些端点检索文章列表,并支持可选过滤。

GET /articles

全局检索文章,支持可选过滤。

认证:可选

查询参数:

参数类型描述
tag字符串按标签名称过滤
作者字符串按作者用户名过滤
favorited字符串按收藏用户的用户名过滤
limit整数限制结果数量(默认:20)
offset整数偏移/跳过结果数量

响应:返回文章对象数组和总计数。请注意,自2024年8月16日起,为提高性能,文章正文将不包含在列表响应中。

{
  "articles": [...],  // Array of article objects
  "articlesCount": 123  // Total number of articles matching the query
}

来源: api/openapi.yml174-205 apps/documentation/src/content/docs/specifications/backend/api-response-format.md62-103

GET /articles/feed

检索已关注用户的文章。

认证:必需

查询参数:

参数类型描述
limit整数限制结果数量(默认:20)
offset整数偏移/跳过结果数量

响应:格式与GET /articles相同。

来源: api/openapi.yml153-172

单个文章端点

这些端点处理对单个文章的操作。

GET /articles/{slug}

通过 slug 检索单个文章。

认证:不需要

路径参数:

参数类型描述
slug字符串要检索的文章的 slug

响应:返回一个包含完整详情(包括正文内容)的单个文章对象。

来源: api/openapi.yml224-242 apps/documentation/src/content/docs/specifications/backend/api-response-format.md36-58

POST /articles

创建新文章。

认证:必需

请求体:

{
  "article": {
    "title": "How to train your dragon",
    "description": "Ever wonder how?",
    "body": "It takes a Jacobian",
    "tagList": ["dragons", "training"]
  }
}

响应:返回新创建的文章。

来源: api/openapi.yml206-223 api/openapi.yml535-551

PUT /articles/{slug}

更新现有文章。

认证:必需(必须是文章作者)

路径参数:

参数类型描述
slug字符串要更新的文章的 slug

请求体:

{
  "article": {
    "title": "Updated title",
    "description": "Updated description",
    "body": "Updated body"
  }
}

所有字段都是可选的。

响应:返回更新后的文章。

来源: api/openapi.yml243-267 api/openapi.yml552-560

DELETE /articles/{slug}

删除文章。

认证:必需(必须是文章作者)

路径参数:

参数类型描述
slug字符串要删除的文章的 slug

响应:返回一个空的响应,状态码为 200。

来源: api/openapi.yml268-289

文章收藏端点

这些端点允许用户收藏和取消收藏文章。

POST /articles/{slug}/favorite

将文章标记为当前用户已收藏。

认证:必需

路径参数:

参数类型描述
slug字符串要收藏的文章的 slug

响应:返回文章,包含更新后的favorited状态和favoritesCount

来源: api/openapi.yml366-387

DELETE /articles/{slug}/favorite

取消文章的收藏标记。

认证:必需

路径参数:

参数类型描述
slug字符串要取消收藏的文章的 slug

响应:返回文章,包含更新后的favorited状态和favoritesCount

来源: api/openapi.yml388-409

文章生命周期

下图说明了系统中文章的典型生命周期

来源: api/openapi.yml153-409

请求和响应详情

文章对象架构

当文章在 API 中返回时,它遵循此结构

字段类型描述
slug字符串URL友好的标识符
title字符串文章标题
description字符串简短描述
body字符串完整的文章内容(不在列表响应中)
tagListarray标签字符串数组
createdAt字符串ISO 8601 时间戳
updatedAt字符串ISO 8601 时间戳
favorited布尔值当前用户是否已收藏
favoritesCount整数收藏总数
作者对象作者的 Profile 对象

来源: api/openapi.yml497-534 apps/documentation/src/content/docs/specifications/backend/api-response-format.md36-103

错误处理

所有文章端点都可能返回以下错误响应

状态码描述
401未授权 - 需要身份验证
422Validation error - Request doesn't meet the requirements

当没有有效 token 访问受保护的端点时,会发生身份验证错误。创建或更新无效数据时,可能会发生验证错误。

来源: api/openapi.yml729-734

数据库实现

文章模型在数据库中实现,具有以下关系

来源: apps/api/prisma/migrations/20241009081140_init/migration.sql1-95

数据库模式强制执行级联删除,这意味着当删除一篇文章时,所有关联的评论、收藏和标签关联也会被删除。