使用 cloudflare-workers-kv-sdk-rs
本文由 High Ping Network
的小伙伴 GenshinMinecraft 进行编撰,首发于 本博客
前言
闲来无事,写了个 cloudflare-workers-kv-sdk-rs
Rust Crate,用于在 Rust 调用 Cloudflare Workers KV 的 API
基本实现了官方 REST API 的所有功能,如有需求请前往该项目仓库提交 Issue / PR
该文章同时也为该库的 Doc,如需编辑该 Doc 请前往该博客的 Github 仓库修改
简介
该库为 Cloudflare Workers KV 的非官方 Rust SDK
底层采用了基于 rustls
的 reqwest
库
支持 TTL / Metadata / 批量修改… 特性
使用
PS: 下面所有代码默认您已经引用所需要的所有库,如引用第三方库会标注
该 SDK 分为两部分:
-
KvClient
: 用于访问主帐号的所有 KV Namespaces,可以列出 / 创建 Namespaces -
KvNamespaceClient
: 用于访问单个 Namespace,可以对 Namespace 与其中的 Key / Value 操作
KvClient 使用
初始化 KvClient
|
|
你需要在 KvClient
结构体的 new()
函数传入 Cloudflare Account ID 与其对应的 API Key
关于其获取方式不再提,请确保 API Key 一定要拥有对 Worker KV 的读写权限
新建一个 Namespace
|
|
KvClient
结构体的 create_namespace()
函数需要传入一个 &str
类型的值作为新 Namespace 的标识符,并返回一个 Namespace
结构体,包含了 Namespace ID 和 Namespace Title
该代码会输出新建的 Namespace 的信息
列出账号下所有的 Namespace
|
|
KvClient
结构体的 create_namespace()
函数会返回一个 Vec<Namespace>
,用于列出所有的 Namespaces
该代码会输出该账号下所有的 Namespace
KvNamespaceClient 使用
初始化 KvNamespaceClient
直接传入参数
|
|
该方式可以直接传入 Cloudflare Account ID 与其对应的 API Key,并附带 Namespace ID
从 KvClient 读取部分参数
|
|
该方式可以使用 KvClient
的 Account ID 与 API Key,仅需再传入 Namespace ID 即可
当 Account ID 与 API Key 均一致时,这两种方案等价
删除 Namespace
|
|
delete_namespace()
函数可以删除 Namespace,请谨慎使用,这会删除该 Namespace 中所有的 KVs
请不要与 delete()
或 delete_multiple()
相混乱
重命名 Namespace
|
|
rename_namespace()
函数可以重命名该 Namespace,但保持 Namespace ID 不变
写入 KV
|
|
在这里,我们引入了一个新的结构体 KvRequest
每个 KvRequest
为一个新增的 KV 的详细信息
你可以使用下面的函数来定义它:
new(k, v)
: 新建一个 KV,需要传入&str
类型的 Key 和 Value,这是必须的ttl_sec(u64)
: 过期时间,当超过所定义的秒数的时候则自动删除ttl_timestemp()
: 过期时间,但是为 Unix 时间戳,如果与ttl_sec()
共存则保留ttl_sec()
metadata(serde_json::Value)
: Metadata 自定义,传入serde_json::Value
类型的 Jsonenable_base64()
: 开启 Base64 上传,默认为关闭
有关这些参数,可以查看 Cloudflare Docs
你可以在一个 KvRequest
结构体中使用这些函数来自定义它,但无论怎么样,你至少都需要一个 new()
函数来定义 KV
写入 KVs
对比与上面,该实现为写入多个 KVs:
|
|
write_multiple()
函数接受 Vec<KvRequest>
,添加多个 KVs 仅需一个请求,上限为 10000 个每次
有关 KvRequest
的参数可以查看上面介绍写入 KV的部分
删除 KV
|
|
write_multiple()
函数接受 &str
,可以根据 Key 删除指定的 KV
该代码可以删除 Key 为 single_key
的这一个 KV
删除 KVs
|
|
delete_multiple()
函数接受 Vec<&str>
,删除多个 KVs 仅需一个请求
该代码会删除 Key 为 kv1
kv2
kv3
的 KVs
列出所有的 Key
|
|
list_all_keys()
函数返回一个 Vec<String>
,其中包含了所有的 Keys
该代码会获取 Namespace 下所有的 Keys,并打印到屏幕上
读取 Key 的 Metadata
|
|
read_metadata()
函数接受一个 &str
类型的 Key,并返回一个 serde_json::Value
类型的 Metadata
该代码会获取 Key kv
的 Metadata 并打印到屏幕上
获取 Key 对应的 Value
|
|
get()
函数接受一个 &str
类型的 Key,并返回一个 String
类型的 Value,获取 Key 对应的 Value 值
该代码会获取 Key key
的 Value 并打印到屏幕上
小结
就这样吧,有问题欢迎 Issue / PR
欢迎加入 High Ping 大家庭: