phpcms 指定id范围 调用_学会调用ibird和Kuu的默认接口

262e2c8ad7ab11ca64aec9bee48bbd76.png

什么是ibird,什么是Kuu?

  • ibird:是我前几年在 Koa 上层封装的一个 NodeJS 快速开发框架;
  • Kuu:算是ibird的下一代产品,它功能上更完整,既有前端也有后端,也更接近于我心目中对于框架的目标;虽然技术栈和语言都换了,但设计思想基本上是一样的,其中最最重要的一点就是默认接口。

什么是数据模型,什么是默认接口?

  • 数据模型

是数据特征的抽象。数据(Data)是描述事物的符号记录,模型(Model)是现实世界的抽象;例如,下面是一个图书的数据模型:

Book(图书信息) {
  ID(数据ID) integer
  Subject(书名) string
  Intro(简介) string
  Class(分类) integer
  Price(价格) number
  InStock(是否有货) boolean
  PubDate(出版日期) string
}

程序上我们一般通过表、类、结构体等方式进行描述。

  • 默认接口

ibird和Kuu都会为每一个数据模型自动生成 RESTful 风格的增删改查接口(当然你可以选择只挂载部分接口,也可以在默认接口的Hooks里做切面控制),这部分接口我就把它们叫做默认接口:

查询图书:GET    /api/book
新增图书:POST   /api/book
修改图书:PUT    /api/book
删除图书:DELETE /api/book

默认查询接口

四个默认接口中,最灵活、最强大也相对最复杂的就是查询接口,它是重中之重,基本上覆盖了大部分的查询场景,下面我们通过示例来逐个讲解。

首先使用 GET 调用接口地址,然后以 query string 的方式传递各个查询参数,如JSON字符串格式的查询条件(cond)、分页参数(page、size)、排序参数(sort)等。

  • 基本查询
// 查询ID为3的数据
GET /api/book?cond={"ID":3}

// 查询ID为3且书名为“安徒生童话”的数据
GET /api/book?cond={"ID":3,"Subject":"安徒生童话"}

// 查询ID为3、书名为“安徒生童话”且有货的数据
GET /api/book?cond={"ID":3,"Subject":"安徒生童话","InStock":true}
  • 模糊查询
// 查询包含书名“童话”的数据
GET /api/book?cond={"Subject":{"$regex":"童话"}}

// 查询包含书名和简介同时包含“童话”的数据
GET /api/book?cond={"Subject":{"$regex":"童话"},"Intro":{"$regex":"童话"}}
  • 分页查询
// 查询包含书名“童话”的数据,并按每页20条分页
GET /api/book?cond={"Subject":{"$regex":"童话"}}&size=20

// 按每页20条分页,查询第3页的数据
GET /api/book?cond={"Subject":{"$regex":"童话"}}&size=20&page=3
  • 全量查询
// 查询包含书名“童话”的所有数据
GET /api/book?cond={"Subject":{"$regex":"童话"}}&range=ALL

// 不指定任何查询条件查询所有数据
GET /api/book?range=ALL
  • 排序查询
// 查询包含书名“童话”的数据,并按价格逆序
GET /api/book?cond={"Subject":{"$regex":"童话"}}&sort=-Price

// 查询包含书名“童话”的数据,并按价格升序
GET /api/book?cond={"Subject":{"$regex":"童话"}}&sort=Price

// 查询包含书名“童话”的数据,先按价格升序,价格相同时再按ID逆序
GET /api/book?cond={"Subject":{"$regex":"童话"}}&sort=Price,-ID
  • 字段查询
// 只查询书名和价格字段
GET /api/book?project=Subject,Price

// 查询包含书名“童话”的数据,只查询ID和价格字段
GET /api/book?cond={"Subject":{"$regex":"童话"}}&project=ID,Price
  • 等于查询
// 查询价格不等于50的数据
GET /api/book?cond={"Price":{"$ne":50}}
  • 范围查询
// 查询价格大于50的数据
GET /api/book?cond={"Price":{"$gt":50}}

// 查询100以内的数据
GET /api/book?cond={"Price":{"$lt":100}}

// 查询大于等于10元,小于等于100的数据
GET /api/book?cond={"Price":{"$gte":10,"$lte":100}}

// 查询ID为10、55、29的数据
GET /api/book?cond={"ID":{"$in":[10,55,29]}}

// 查询ID不为100、78且有货的数据
GET /api/book?cond={"ID":{"$nin":[100,78]},"InStock":true}
  • 逻辑查询
// 查询书名包含“童话”或包含“故事”的数据
GET /api/book?cond={"Subject":{"$or":[{"$regex":"童话"},{"$regex":"故事"}]}}

// 查询价格大于50且书名包含“童话”的数据
GET /api/book?cond={"$and":[{"Price":{"$gt":50}},{"$regex":"童话"}]}

注意事项:

  1. 一定要注意cond的格式为JSON字符串
  2. 逻辑操作符 $or 和 $and ,可以用在根级也可以作为字段的子级;
  3. 目前支持的查询参数有:range、cond、sort、project、page、size,所有参数都是可选的,可以自由组合使用;
  4. 目前支持的操作符有:$or、$and、$gt、$gte、$lt、$lte、$ne、$regex、$in、$nin,所有操作符也可以自由组合使用。

默认新增接口

使用 POST 调用接口地址,传递由数据模型字段组成的 JSON 字符串到请求体即可。

  • 单个新增:
POST /api/book
// 指定body为以下参数:
{
    "Subject": "安徒生童话888888",
    "Intro": "暂无简介",
    "Price": 13.73,
    "PubDate": "2019-08-27T06:31:20.176Z",
    "InStock": true,
    "Class": 300,
    "Remark": "务必发顺丰"
}
  • 批量新增:
POST /api/book
// 指定body为以下参数:
[
  {
    "Subject": "安徒生童话",
    "Intro": "暂无简介",
    "Price": 13.73,
    "PubDate": "2019-08-27T06:31:20.176Z",
    "InStock": true,
    "Class": 300,
    "Remark": "务必发顺丰"
  },
  {
    "Subject": "格林童话",
    "Intro": "经典童话巨制",
    "Price": 55.88,
    "PubDate": "2015-02-17T05:11:10.316Z",
    "InStock": true,
    "Class": 100,
    "Remark": "暂无"
  }
]

默认修改接口

使用 PUT 调用接口地址,传递由修改条件(cond)和修改字段(doc)组成的 JSON 字符串到请求体(body)即可。

  • 单个修改:
PUT /api/book
// 指定body为以下参数:
// 1. cond:指定修改条件,字段格式基本同查询时的cond
// 2. doc:指定需要更新的字段
{
  "cond": {
    "ID": 159
  },
  "doc": {
    "Intro": "这是修改后的简介"
  }
}
  • 批量修改:
PUT /api/book
// 多指定一个multi字段即可
{
  "cond": {
    "ID": {
      "$in": [ 159, 160, 170 ]
    }
  },
  "doc": {
    "Intro": "这是修改后的简介"
  },
  "multi": true
}

默认删除接口

使用 DELETE 调用接口地址,与修改相似,只需传递由删除条件(cond)组成的 JSON 字符串到请求体(body)即可。

  • 单个删除:
DELETE /api/book
// 指定body为以下参数:
// 1. cond:指定修改条件,字段格式基本同查询时的cond
{
  "cond": {
    "ID": 159
  }
}
  • 批量删除:
DELETE /api/book
// 多指定一个multi字段即可
{
  "cond": {
    "ID": {
      "$in": [ 159, 160, 170 ]
    }
  },
  "multi": true
}
  • 物理删除:
DELETE /api/book
// 多指定一个unsoft字段即可
{
  "cond": {
    "ID": {
      "$in": 159
    }
  },
  "unsoft": true
}

// 也可与multi结合使用
{
  "cond": {
    "ID": {
      "$in": [ 159, 160, 170 ]
    }
  },
  "multi": true,
  "unsoft": true
}

扩展阅读

目前ibird和Kuu都主要是团队内部在使用,对外并没有太多的推广,如果你对它们感兴趣,欢迎留言沟通。

https://github.com/kuuland/kuu#create-record

https://github.com/yinfxs/ibird/wiki

https://yinfxs.github.io/koa-json-rest

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值