5 个版本
0.1.4 | 2021 年 5 月 13 日 |
---|---|
0.1.3 | 2021 年 5 月 13 日 |
0.1.2 | 2021 年 5 月 2 日 |
0.1.1 | 2021 年 4 月 29 日 |
0.1.0 | 2021 年 4 月 28 日 |
#39 in #json-api
在 2 crates 中使用
370KB
10K SLoC
Ciboulette
一个 JSON:API 库。
查看 文档
lib.rs
:
简介
Ciboulette 是一个 JSON:API
库。
它允许用户解析请求并构建响应,同时遵守 JSON:API
规范。
它旨在拥有较小的内存占用并快速。
组件的高级视图
从高层次来看,一个 API
由 资源类型 构成。资源类型通过边表示它们之间的 关系 组织成图。
除了图之外,还使用一个邻接映射来有效地通过别名检索 资源类型。整个结构都保存在一个 存储 中。
资源类型
可以使用 资源类型构建器 构建资源类型。它由以下部分组成:
关系选项
多对多
多对多 选项结构体 将资源 "A" 映射到另一个资源 "C" 通过另一个资源 "B"(桶)
Resource A Resource B (bucket) Resource C
┌─────────────────┐ ┌─────────────────────────────────────────────┐ ┌─────────────────┐
│ │ │ │ │ │
│ peoples──►id───┼──┼──►people_id◄──people-article──►article_id◄──┼──┼──id◄──articles │
│ │ │ │ │ │
└─────────────────┘ └─────────────────────────────────────────────┘ └─────────────────┘
在创建多对多关系(A <-> C
)时,我们还将创建一个多对一关系,分别是 A -> B
、C -> B
、B -> A
和 B -> C
,这样我们就可以直接引用关系。
一对一/多对一
该选项结构体将一个“多”资源映射到一个“一”资源。
Many table One table
┌──────────────────────────────────────────────────┐ ┌──────────────────────────────────────┐
│ │ │ │
│ many_table_element_0──────────►many_table_key_0──┼──┼──►one_table_id◄───one_table_element │
│ │ │ ▲ ▲ │
│ │ │ │ │ │
│ many_table_element_1──────────►many_table_key_1──┼──┼─────┘ │ │
│ │ │ │ │
│ │ │ │ │
│ many_table_element_2──────────►many_table_key_2──┼──┼────────────┘ │
│ │ │ │
│ │ └──────────────────────────────────────┘
└──────────────────────────────────────────────────┘
在选项中,一个字段用于确定多对一/一对一关系是否是多对多关系的一部分。
请求
每个请求都可以归结为相同的基本组件。但也有一些特殊情况
每个请求都必须首先使用请求构建器反序列化。然后它可以构建为一个通用的请求。从那里,可以根据意图将其转换为所需的请求类型。尝试将通用请求转换为不兼容的子类型将导致错误。正确的转换映射如下所示
意图 | 请求类型 |
---|---|
创建 | 创建请求 |
读取 | 读取请求 |
更新 | 更新请求 |
删除 | 删除请求 |
每个请求的子类型都实现了一个通用特质,以允许泛型化。
响应
根据请求,响应将构建为正确的格式。
响应元素
每个响应应该有一个单一的主要资源类型。
以下是对主要资源类型中元素部分进行响应元素组成的说明
响应元素字段 | 始终需要 | 描述 |
---|---|---|
类型 |
✅ | 当前元素的资源类型 |
标识符 |
✅ | 当前元素的资源标识符 |
数据 |
❌ | 资源的JSON数据(如果有的话) |
related .rel_chain |
❌ (仅用于相关数据) |
从主要资源类型的关联元数据链 |
related .element |
❌ (仅用于相关数据) |
与它相关联的元素的资源标识符 |
依赖性
~6–11MB
~243K SLoC