Glance项目自定义API模板使用指南

Glance项目自定义API模板使用指南

glance A self-hosted dashboard that puts all your feeds in one place glance 项目地址: https://gitcode.com/gh_mirrors/gla/glance

前言

Glance项目提供了一套强大的自定义API模板系统,允许开发者灵活地处理和展示来自各种API的数据。本文将详细介绍如何使用这套模板系统,包括基础语法、常见用例以及高级功能。

基础概念

在Glance中,自定义API模板基于Go语言的模板语法,并扩展了大量实用函数。模板主要用于:

  1. 解析API返回的JSON数据
  2. 对数据进行处理和转换
  3. 生成最终的HTML输出

基础用法

简单JSON解析

对于最简单的JSON响应:

{
  "title": "我的标题",
  "content": "我的内容"
}

可以使用以下模板提取数据:

<div>{{ .JSON.String "title" }}</div>
<div>{{ .JSON.String "content" }}</div>

输出结果为:

<div>我的标题</div>
<div>我的内容</div>

数组遍历

当JSON中包含数组时:

{
  "posts": [
    {"title": "文章1", "content": "内容1"},
    {"title": "文章2", "content": "内容2"}
  ]
}

使用range遍历数组:

{{ range .JSON.Array "posts" }}
  <div>{{ .String "title" }}</div>
  <div>{{ .String "content" }}</div>
{{ end }}

注意在range内部,上下文自动切换到当前数组元素,因此不需要再使用.JSON前缀。

访问上级上下文

在遍历数组时,如果需要访问顶级JSON中的字段:

{{ range .JSON.Array "posts" }}
  <div>{{ .String "title" }}</div>
  <div>{{ $.JSON.String "author" }}</div>
{{ end }}

使用$可以访问最外层的上下文。

高级用法

嵌套对象访问

对于深层嵌套的JSON结构:

{
  "user": {
    "address": {
      "city": "北京",
      "district": "朝阳区"
    }
  }
}

可以使用点号表示法直接访问:

<div>{{ .JSON.String "user.address.city" }}</div>

条件判断

检查字段是否存在:

{{ if .JSON.Exists "user.age" }}
  <div>年龄: {{ .JSON.Int "user.age" }}</div>
{{ else }}
  <div>年龄未提供</div>
{{ end }}

数学运算

Glance支持基本的数学运算:

<div>折扣后价格: {{ sub (.JSON.Int "price") (.JSON.Int "discount") }}</div>

支持的运算符包括:

  • add - 加法
  • sub - 减法
  • mul - 乘法
  • div - 除法
  • mod - 取模

日期处理

Glance提供了强大的日期处理功能:

<div {{ .String "publish_date" | parseTime "rfc3339" | toRelativeTime }}></div>

这将输出类似"2小时前"、"3天前"的相对时间。注意toRelativeTime必须用作HTML标签的属性。

响应状态检查

可以检查API响应的状态码:

{{ if eq .Response.StatusCode 200 }}
  <p>请求成功</p>
{{ else }}
  <p>请求失败: {{ .Response.Status }}</p>
{{ end }}

JSON Lines格式处理

对于每行一个JSON对象的格式:

{"name": "张三", "age": 25}
{"name": "李四", "age": 30}

首先需要在配置中禁用JSON验证:

- type: custom-api
  skip-json-validation: true

然后使用.JSONLines遍历:

{{ range .JSONLines }}
  <p>{{ .String "name" }} 今年 {{ .Int "age" }} 岁</p>
{{ end }}

链式API调用

Glance支持在一个模板中发起多个API请求:

- type: custom-api
  template: |
    {{ $first := newRequest "https://api.example.com/first" | getResponse }}
    {{ $second := newRequest (concat "https://api.example.com/second/" $first.JSON.String "id") | getResponse }}
    
    {{ $second.JSON.String "result" }}

可以添加请求参数和头信息:

{{
  $data := newRequest "https://api.example.com/data"
    | withParameter "key" "value"
    | withHeader "Authorization" "Bearer token"
    | getResponse
}}

实用函数参考

Glance提供了丰富的实用函数,主要分为以下几类:

JSON处理函数

  • String/Int/Float/Bool - 获取对应类型的值
  • Array - 获取数组
  • Exists - 检查字段是否存在

类型转换函数

  • toFloat/toInt - 数值类型转换
  • parseTime/formatTime - 时间解析和格式化

字符串处理

  • trimPrefix/trimSuffix - 去除前后缀
  • replaceAll - 字符串替换
  • concat - 字符串连接

数组操作

  • sortByString/sortByInt - 数组排序
  • unique - 数组去重

数学运算

  • 基本四则运算
  • percentChange - 百分比变化计算

日期时间

  • now/offsetNow - 获取当前时间
  • startOfDay/endOfDay - 获取一天的开始/结束

最佳实践

  1. 总是检查API响应状态码
  2. 对可能不存在的字段使用Exists检查
  3. 复杂的逻辑可以拆分为多个API调用
  4. 使用toRelativeTime增强时间显示体验
  5. 对大型数组考虑使用分页或限制返回数量

通过掌握这些模板技巧,你可以充分利用Glance的自定义API功能,构建出丰富多样的数据展示界面。

glance A self-hosted dashboard that puts all your feeds in one place glance 项目地址: https://gitcode.com/gh_mirrors/gla/glance

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魏真权

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值