2021-11-29 01:35:04 +08:00
|
|
|
# かな
|
|
|
|
Nodejs 构建的 RESTful 风格 WEB API
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1. 抽象化以扩大泛用性, 适用于各种形态的项目
|
|
|
|
2. 无须配置依赖项的, 使用内嵌数据库
|
|
|
|
3. 单文件, 代码不到 300 行, 易于维护, 易于扩展
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
由于使用已被大量实践的协议与风格建议, 文档中不再讲解此类细节, 这里将假设你已经了解:
|
|
|
|
|
|
|
|
1. RESTful 风格 URL
|
|
|
|
2. HTTP Method 资源操作方式
|
|
|
|
|
|
|
|
|
2021-07-26 19:12:47 +08:00
|
|
|
|
|
|
|
## Install
|
|
|
|
```bash
|
|
|
|
# clone 到本地
|
|
|
|
git clone ...
|
|
|
|
|
|
|
|
# 切换到项目目录
|
|
|
|
cd shizukana
|
|
|
|
|
|
|
|
# 使用 yarn 或 npm 安装依赖包
|
|
|
|
yarn
|
|
|
|
|
|
|
|
# 使用 node 运行 index 文件
|
|
|
|
node index
|
|
|
|
|
|
|
|
# 也可以使用 pm2 作守护进程
|
|
|
|
pm2 start node --name shizukana -- index
|
|
|
|
```
|
|
|
|
|
2021-11-29 01:35:04 +08:00
|
|
|
|
|
|
|
|
2021-11-28 22:50:56 +08:00
|
|
|
## 特征
|
|
|
|
|
|
|
|
|
2021-07-26 19:12:47 +08:00
|
|
|
|
2021-11-29 01:35:04 +08:00
|
|
|
`/:name/:_id`
|
|
|
|
|
|
|
|
RESTful 风格 API, URL形式为两段 name是对象类型, _id是对象id
|
|
|
|
|
|
|
|
如发表一篇文章,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-07-26 19:12:47 +08:00
|
|
|
|
2021-11-29 01:35:04 +08:00
|
|
|
## 使用示例
|
2021-07-26 19:12:47 +08:00
|
|
|
|
|
|
|
|
2021-11-28 22:50:56 +08:00
|
|
|
|
2021-11-29 01:35:04 +08:00
|
|
|
#### 创建用户
|
|
|
|
|
|
|
|
当程序在本地运行时, localhost:2333
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
fetch()
|
|
|
|
```
|
|
|
|
|
|
|
|
|
2021-11-28 22:50:56 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-11-29 01:35:04 +08:00
|
|
|
#### 对象列表
|
|
|
|
|
|
|
|
`GET` /:name
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
{
|
|
|
|
page: Number, // 当前页码(默认为1)
|
|
|
|
pagesize: Number, // 分页大小(默认20)
|
|
|
|
sort: string, // 排序方式(只能是对象的通用属性名)
|
|
|
|
desc: Number, // 0或1, 正序和倒序
|
|
|
|
uid: string, // 指定发布者uid查询
|
|
|
|
like: bool, // 查询自己点赞了的对象
|
|
|
|
post: bool, // 查询自己评论过的对象
|
|
|
|
count: bool, // 计数器(在返回的headers中附带列表统计信息)
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
- 除以上通用属性外, 对象的私有属性也可以用于查询
|
|
|
|
- 如果查询参数包含了不存在的参数, 将返回 400 错误
|
|
|
|
- 查询列表时, 相同的查询条件有15s缓存
|
|
|
|
- 如果查询公共的列表, 只返回状态为 pubilc的
|
|
|
|
- 如果查询自己的列表, 则同时返回私有状态的
|
2021-11-28 22:50:56 +08:00
|
|
|
|
|
|
|
|
2021-11-29 01:35:04 +08:00
|
|
|
|
|
|
|
查询示例:
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
fetch('/book').then(Response => Response.json()).then(data => {
|
|
|
|
console.log(data)
|
|
|
|
})
|
|
|
|
|
|
|
|
// 返回结果
|
|
|
|
[
|
|
|
|
{_id:'xxx', data:'xxxx'},
|
|
|
|
{_id:'xxx', data:'xxxx'}
|
|
|
|
]
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
创建示例:
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
fetc('/book', {
|
|
|
|
method: 'POST',
|
|
|
|
headers: {
|
|
|
|
'Accept': 'application/json',
|
|
|
|
'Content-Type': 'application/json',
|
|
|
|
},
|
|
|
|
body: JSON.stringify({
|
|
|
|
name: '创建一本新书',
|
|
|
|
data: '书的内容'
|
|
|
|
}),
|
|
|
|
}).then(Response => Response.json()).then(data => {
|
|
|
|
console.log(data)
|
|
|
|
})
|
|
|
|
|
|
|
|
// 返回结果
|
|
|
|
{
|
|
|
|
_id: 'xxx',
|
|
|
|
uid: 'xxx',
|
|
|
|
name: '创建一本新书',
|
|
|
|
data: '书的内容'
|
|
|
|
}
|
|
|
|
```
|
2021-11-28 22:50:56 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
2021-11-29 01:35:04 +08:00
|
|
|
#### 对象实体
|
2021-07-26 19:12:47 +08:00
|
|
|
|