Skip to content

标签操作指南

Actions

Action用法说明
list-tags/halo list-tags [--limit=N] [--page=N] [--sort=xxx]列出标签(--limit=0 --page=0 获取全部)
create-tag/halo create-tag --display-name=名称 [--slug=xxx] [--color=xxx]创建标签
get-tag/halo get-tag <name>获取标签详情
update-tag/halo update-tag <name> [--display-name=xxx] [--color=xxx]更新标签
delete-tag/halo delete-tag <name>删除标签

参数说明

参数说明适用操作
--display-name=标签显示名(必填)create-tag/update-tag
--slug=标签别名create-tag/update-tag
--color=标签颜色,如 #ff0000create-tag/update-tag
--cover=封面 URLupdate-tag
--description=标签描述create-tag/update-tag
--limit=N每页数量,默认 20list-tags
--page=N页码,从 1 开始list-tags
--sort=排序字段,如 spec.displayName,asclist-tags

⚠️ 重要说明

  1. 全部走 Extension API — 标签的 list/create/get/update/delete 均使用 Extension API (/apis/content.halo.run/v1alpha1/tags)。
  2. 乐观锁 — 更新需要 metadata.version,脚本自动获取最新版本并在 409 冲突时重试。
  3. metadata.name 自动生成create-tag 自动生成 {slug}-{timestamp} 格式的 name。
  4. 全量获取list-tags --page=0 --limit=0 可获取所有标签(不分页)。
  5. 无变更检测update-tag 在没有实际变更时直接返回"无变更",不发起 PUT 请求。

API 参考

Halo Tags API 参考

所有调用走 Node.js script,本文档仅在排查报错时参考

API 端点

方法路径说明
GET/apis/content.halo.run/v1alpha1/tags列出标签
POST/apis/content.halo.run/v1alpha1/tags创建标签
GET/apis/content.halo.run/v1alpha1/tags/{name}获取标签
PUT/apis/content.halo.run/v1alpha1/tags/{name}更新标签
DELETE/apis/content.halo.run/v1alpha1/tags/{name}删除标签

创建标签请求体

json
{
  "apiVersion": "content.halo.run/v1alpha1",
  "kind": "Tag",
  "metadata": {
    "name": "tag-slug-20240101120000"
  },
  "spec": {
    "displayName": "标签显示名",
    "slug": "tag-slug",
    "color": "#ff0000",
    "cover": "",
    "description": ""
  }
}
  • metadata.name 自动生成,格式为 {slug}-{timestamp}
  • spec.displayNamespec.slug 为必填
  • spec.color 可选,格式 #RRGGBB#RGB

删除标签

  • 路径参数: name — 标签的 metadata.name
  • 删除前脚本会先 GET 确认标签存在,不存在则报 404 错误

更新标签

  • 路径参数: name — 标签的 metadata.name
  • 使用 GET-modify-PUT 模式,先获取完整标签对象,修改 spec 字段后 PUT 回去
  • 更新需要 metadata.version(乐观锁),脚本会自动重试 409 冲突
  • 可更新字段: displayName, slug, color, cover, description
  • 无变更时直接返回"无变更",不发起 PUT 请求

查询参数

参数类型说明
pageinteger页码,从 1 开始,0 表示不分页
sizeinteger每页数量,0 表示不分页
labelSelectorstring[]标签选择器,如 hidden!=true
fieldSelectorstring[]字段选择器,如 metadata.name==halo
sortstring[]排序条件,格式 `property,(asc

数据结构

Tag 对象

json
{
  "apiVersion": "content.halo.run/v1alpha1",
  "kind": "Tag",
  "metadata": {
    "name": "tag-name",
    "version": 1,
    "creationTimestamp": "2024-01-01T00:00:00Z",
    "labels": {},
    "annotations": {}
  },
  "spec": {
    "displayName": "标签显示名",
    "slug": "tag-slug",
    "color": "#ff0000",
    "cover": "",
    "description": ""
  },
  "status": {
    "permalink": "https://example.com/tags/tag-slug",
    "postCount": 10,
    "visiblePostCount": 8,
    "observedVersion": 1
  }
}

TagSpec 字段

字段类型必填说明
displayNamestring标签显示名称(最少 1 字符)
slugstring标签别名(最少 1 字符)
colorstring颜色值,格式 #RRGGBB#RGB
coverstring封面图片 URL
descriptionstring标签描述

TagStatus 字段

字段类型说明
permalinkstring标签永久链接
postCountinteger关联文章总数
visiblePostCountinteger可见文章数
observedVersioninteger观察到的版本号

响应格式

json
{
  "page": 1,
  "size": 20,
  "total": 5,
  "totalPages": 1,
  "first": true,
  "last": true,
  "hasNext": false,
  "hasPrevious": false,
  "items": [ /* Tag[] */ ]
}

基于非商业使用许可证发布