strapi是一个相当规范的前端文件管理系统(CMS),这里我们对strapi里面的restful请求风格进行简单的汇总:
这里我们假定restaurants为我们的一个数据结构,对应strapi中的Collection,对应数据库表名称或者java实体名称
1.1 获取所有的数据列表
GET /restaurants //例如:http://localhost:1337/restaurants
1.2 根据id获取指定数据
GET /restaurants/:id //例如:http://localhost:1337/restaurants/1
1.3 获取数据条数
GET /restaurants/count //例如:http://localhost:1337/restaurants/count
1.4 新增一条数据
POST /restaurants //例如:POST HTTP://localhost:1337/restaurants
1.5 修改一条数据
PUT /restaurants/:id //例如:PUT http://localhost:1337/restaurants/1
1.6 删除一条数据
DELETE /restaurants/:id //例如:DELETE http://localhost:1337/restaurants/1
2.1 过滤器常用字段后缀
无后缀或eq:等于
ne:不等于
lt: 少于
gt: 比...更棒
lte:小于或等于
gte:大于或等于
in:包含在值数组中
nin:不包含在值数组中
contains:包含
ncontains:不包含
containss:包含区分大小写
ncontainss:不包含区分大小写
null:为空/不为空
2.1 查找名字中为John的用户
GET /users?firstName=John
或者
GET /users?firstName_eq=John
2.2 查找价格高于或者等于3的餐厅
GET /restaurants?price_gte=3
2.3 查找ID为3、6、8的多家餐厅
GET /restaurants?id_in=3&id_in=6&id_in=8
2.4 模糊查询名字中包含pizza的用户
GET /restaurants?name_contains=pizza
3.1 通过电子邮件对用户进行排序
GET /users?_sort=email:ASC
或者
GET /users?_sort=email:DESC
3.2 在多个字段上排序
GET /users?_sort=email:asc,dateField:desc
或者
GET /users?_sort=email:DESC,username:ASC
3.3 通过电子邮件对用户进行排序
GET /restaurants/:id //例如:http://localhost:1337/restaurants/1
默认返回结果大小是100条
可以通过插入limit = -1来获取所有的数据集
4.1 将结果长度限制为30
GET /users?_limit=30
3.1 获取第二页数据
GET /users?_start=10&_limit=10
使用strapi的strapi.query来进行数据查询操作
5.1 查询操作
5.1.1 按编号查找
strapi.query('restaurant').find({ id: 1 });
5.1.2 在IN中查找,但有一个限制
strapi.query('restaurant').find({ _limit: 10, id_in: [1, 2] });
5.1.3 按日期顺序查找按名称倒序
strapi
.query('restaurant')
.find({ date_gt: '2019-01-01T00:00:00Z', _sort: 'name:desc' });
5.1.2 通过不在其中的ID查找并填充关系。跳过前十个结果
strapi
.query('restaurant')
.find({ id_nin: [1], _start: 10 }, ['category', 'category.name']);
5.2 查找一个
5.2.1 通过ID查找一个
strapi.query('restaurant').findOne({ id: 1 });
5.2.2 按名称查找一个
strapi.query('restaurant').findOne({ name: 'restaurant name' });
5.2.3 通过名称和creation_date查找一个
strapi
.query('restaurant')
.findOne({ name: 'restaurant name', date: '2019-01-01T00:00:00Z' });
5.2.4 通过id查找并填充关系
strapi.query('restaurant').findOne({ id: 1 }, ['category', 'category.name']);
5.3 创建一个条目并返回该条目
strapi.query('restaurant').create({
name: 'restaurant name',
// this is a dynamiczone field. the order is persisted in db.
content: [
{
__component: 'blog.rich-text',
title: 'Some title',
subTitle: 'Some sub title',
},
{
__component: 'blog.quote',
quote: 'Some interesting quote',
author: 1,
},
],
// this is a component field. the order is persisted in db.
opening_hours: [
{
day_interval: 'Mon',
opening_hour: '7:00 PM',
closing_hour: '11:00 PM',
},
{
day_interval: 'Tue',
opening_hour: '7:00 PM',
closing_hour: '11:00 PM',
},
],
// pass the id of a media to link it to the entry
cover: 1,
// automatically creates the relations when passing the ids in the field
reviews: [1, 2, 3],
});
5.4 更新操作
5.4.1 按照编号更新
strapi.query('restaurant').update(
{ id: 1 },
{
name: 'restaurant name',
content: [
{
__component: 'blog.rich-text',
title: 'Some title',
subTitle: 'Some sub title',
},
{
__component: 'blog.quote',
quote: 'Some interesting quote',
author: 1,
},
],
opening_hours: [
{
day_interval: 'Mon',
opening_hour: '7:00 PM',
closing_hour: '11:00 PM',
},
{
day_interval: 'Tue',
opening_hour: '7:00 PM',
closing_hour: '11:00 PM',
},
],
// pass the id of a media to link it to the entry
cover: 1,
// automatically creates the relations when passing the ids in the field
reviews: [1, 2, 3],
}
);
这里需要说明的是,利用google在里翻译的内容有点问题,所以我在这里做一个简单的说明,在更新数据时,如果组件中的数据没有带主键id,那么先前数据中的组件会被删除或者替换,如果包含id,则为修改
5.4.2 按照id更新并且更新以前的组件
strapi.query('restaurant').update(
{ id: 1 },
{
name: 'Mytitle',
content: [
{
__component: 'blog.rich-text',
id: 1,
title: 'Some title',
subTitle: 'Some sub title',
},
{
__component: 'blog.quote',
id: 1,
quote: 'Some interesting quote',
author: 1,
},
],
opening_hours: [
{
id: 2,
day_interval: 'Mon',
opening_hour: '7:00 PM',
closing_hour: '11:00 PM',
},
{
id: 1,
day_interval: 'Tue',
opening_hour: '7:00 PM',
closing_hour: '11:00 PM',
},
],
// pass the id of a media to link it to the entry
cover: 1,
// automatically creates the relations when passing the ids in the field
reviews: [1, 2, 3],
}
);
5.4.2 按照名称部分更新
strapi.query('restaurant').update(
{ title: 'specific name' },
{
title: 'restaurant name',
}
);
5.5 删除
5.5.1 按照编号删除
strapi.query('restaurant').delete({ id: 1 });
5.5.2 按照字段删除多个
strapi.query('restaurant').delete({ district: '_18th' });
5.6 计数
5.6.1 按照地区计数
strapi.query('restaurant').count({ district: '_1st' });
5.6.2 按名称计数包含
strapi.query('restaurant').count({ name_contains: 'food' });
5.6.3 按照日期计算少于
strapi.query('restaurant').count({ date_lt: '2019-08-01T00:00:00Z' });
5.7 搜索
5.7.1 从20开始搜索前十
strapi
.query('restaurant')
.search({ _q: 'my search query', _limit: 10, _start: 20 });
5.7.2 搜索和排序
strapi
.query('restaurant')
.search({ _q: 'my search query', _limit: 100, _sort: 'date:desc' });
5.8 基于搜索的条目数
strapi.query('restaurant').countSearch({ _q: 'my search query' });
官网中的自定义查询这里就不做过多的介绍了,有不清楚的人可以在官网上自行查看