Strapi之Entity Service API

2023-11-15

Query Engine API 和 Entity Service API 都是 Strapi 平台提供的 API,但是它们的功能和用途有所不同。

Entity Service API 主要用于管理实体对象的创建、读取、更新和删除操作,它是对 Strapi 数据库的一种抽象,用于对实体对象进行 CURD 操作。通过 Entity Service API,您可以方便地将实体对象存储在 Strapi 平台上,并对其进行 CRUD 操作。

而 Query Engine API 则是用于从 Strapi 数据库中查询实体对象数据的 API,它提供了强大的查询和过滤功能,用于满足业务需求。通过 Query Engine API,您可以方便地查询、过滤、排序、分页实体对象数据,以满足您的业务需求。

因此,可以说 Entity Service API 和 Query Engine API 是 Strapi 平台中实体对象管理和数据查询的核心 API。Entity Service API 用于管理实体对象,而 Query Engine API 用于查询实体对象数据。二者结合使用,可以使得对于实体对象的管理和查询变得更加方便和灵活。

UID

首先要理解下UID,uid表示要查找的实体的唯一标识符(Unique Identifier),它用于在数据库中唯一地标识该实体。uid通常由开发人员在实体创建时指定,并在实体被保存到数据库中时分配。在调用findOne方法时,你需要提供一个有效的uid,以便API可以在数据库中查找与该uid匹配的实体。

例如,在一个电子商务应用程序中,你可能有一个名为“Product”的实体,其中每个产品都有一个唯一的产品ID(product ID)。当调用findOne方法来查找特定的产品时,需要提供该产品的ID作为uid参数。

以下是在Node.js中使用Entity Service API的findOne方法查找特定产品的示例代码:

const { EntityServiceClient } = require('entity-service-sdk');
const client = new EntityServiceClient('http://localhost:8000');

// 查找产品
async function findProduct(productId) {
  try {
    const product = await client.findOne({
      kind: 'Product',
      uid: productId
    });
    return product;
  } catch (error) {
    console.log(error);
    return null;
  }
}

// 调用findProduct方法查找产品
findProduct('12345').then(product => {
  if (product) {
    console.log(product);
  } else {
    console.log("未找到该产品");
  }
});

另外,在Entity Service API官方示例中,提到了一种将uid标识符格式化为[category]::[content-type]的方式。这种格式化方式是为了方便开发者在uid中包含实体类型信息,并且可读性更好。

例如,如果应用程序有一个名为“Product”的实体类型,并且想为每个产品分配一个唯一的uid,那么可以使用[category]::[content-type]格式将uid标识符格式化为“Product::12345”,其中“Product”表示实体类型,而“12345”表示产品的唯一标识符。

在使用这种格式化方式时,需要注意确保category和content-type之间使用双冒号(::)分隔,以避免与uid中可能包含的其他冒号产生混淆。此外,需要确保category和content-type的命名规范符合应用程序的要求,并且不包含双冒号、空格、标点符号等特殊字符。

需要注意的是,这种uid格式化方式并不是Entity Service API的强制要求,完全可以使用其他格式或方式来表示实体的唯一标识符。但如果你的应用程序需要在uid中包含实体类型信息,并且希望uid具有一定的可读性和格式规范,那么这种格式化方式可能会有所帮助。

CRUD操作

findOne()

返回数据居库中与参数匹配的第一个记录。

语法定义为:findOne(uid: string, id: ID, parameters: Params) ⇒ Entry

const entry = await strapi.entityService.findOne('api::article.article', 1, {
  fields: ['title', 'description'],
  populate: { category: true },
});

findMany()

返回与参数匹配的所有数据。

语法定义为:findMany(uid: string, parameters: Params) ⇒ Entry[]

const entries = await strapi.entityService.findMany('api::article.article', {
  fields: ['title', 'description'],
  filters: { title: 'Hello World' },
  sort: { createdAt: 'DESC' },
  populate: { category: true },
});

create()

创建一条记录并返回
语法定义:create(uid: string, parameters: Params) ⇒ Entry

const entry = await strapi.entityService.create('api::article.article', {
  data: {
    title: 'My Article',
  },
});

update()

更新一条记录并返回
语法定义:update(uid: string,id: ID, parameters: Params) ⇒ Entry

const entry = await strapi.entityService.update('api::article.article', 1, {
  data: {
    title: 'xxx',
  },
});

delete()

删除一条记录并返回
语法定义:delete(uid: string,id: ID, parameters: Params) ⇒ Entry

const entry = await strapi.entityService.delete('api::article.article', 1);

Filtering

findMay方法中提供了filter实现过滤效果,结果用过滤器参数进行过滤,过滤器接受 logical operators 逻辑运算符和 attribute operators 属性运算符。每个运算符都应该以$为前缀。

Logical operators

  • $and:逻辑“与”,用于匹配所有指定的条件。
  • $or:逻辑“或”,用于匹配任何指定的条件。
  • $not:逻辑“非”,用于匹配不符合指定条件的结果。

Attribute Operators

  • $eq:匹配等于指定值的结果。
  • $ne:匹配不等于指定值的结果。
  • $lt:匹配小于指定值的结果。
  • $lte:匹配小于或等于指定值的结果。
  • $gt:匹配大于指定值的结果。
  • $gte:匹配大于或等于指定值的结果。
  • $in:匹配包含在指定数组中的值的结果。
  • $nin:匹配不包含在指定数组中的值的结果。
  • $contains:匹配包含指定子字符串的结果。
  • $ncontains:匹配不包含指定子字符串的结果。
  • $null:匹配为 null 的结果。
  • $nnull:匹配不为 null 的结果。
  • $empty:匹配为空的结果。
  • $nempty:匹配不为空的结果。

Populating

在Strapi中,Populating是指在一个请求中同时获取相关联的记录,而不是在多个请求中获取每个记录。这个过程类似于SQL中的JOIN操作。 Strapi通过使用Mongoose(MongoDB的对象文档映射器)的populate方法来实现Populating。

例如,假设现在有一个名为"Article"的模型,并且该模型具有一个名为"author"的字段,该字段引用另一个名为"User"的模型。如果我们想获取一篇文章及其作者的信息,可以使用populate方法在一个请求中获取这两个记录:

const article = await strapi.query('article').findOne({ id: 1 }).populate('author');

这将返回一个包含文章和作者信息的对象。如果没有使用populate方法,那么我们将需要使用两个请求来获取这些信息。第一个请求获取文章信息,第二个请求获取作者信息。这将导致不必要的网络延迟和性能问题。

Populating在Strapi中非常常用,因为它可以简化代码并提高性能。但是,如果在一个请求中获取太多的记录,可能会影响性能。因此,请确保只获取必要的记录。

Ordering & Pagination

使用排序和分页选项来获取特定数量的结果并按特定方式排序。

其中ordering使用sort进行排序操作

  • single:单个排序
strapi.entityService.findMany('api::article.article', {
  sort: 'id',
});

// single with direction
strapi.entityService.findMany('api::article.article', {
  sort: { id: 'desc' },
});
  • multiple:多个排序
strapi.entityService.findMany('api::article.article', {
  sort: ['publishDate', 'name'],
});

// multiple with direction
strapi.entityService.findMany('api::article.article', {
  sort: [{ title: 'asc' }, { publishedAt: 'desc' }],
});
  • relational ordering:基于关系的字段排序

在Strapi中,关系字段是一种用于建立数据之间关系的字段类型。例如,一个“文章”数据类型可能包含一个关系字段,该字段与“作者”数据类型相关联,以指示该文章是由哪个作者创建的。在某些情况下,我们可能希望根据与关系字段相关联的数据类型的字段进行排序。例如,如果正在显示所有文章,并希望按作者姓名对它们进行排序,则可以使用相关联的“作者”数据类型的“姓名”字段进行排序。这种排序方法称为基于关系的字段排序,它允许我们按照与当前数据类型相关联的其他数据类型的字段进行排序,从而更好地组织和呈现数据。

strapi.entityService.findMany('api::article.article', {
  sort: {
    author: {
      name: 'asc',
    },
  },
});

使用start和limit进行页面操作

strapi.entityService.findMany('api::article.article', {
  start: 10,
  limit: 15,
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Strapi之Entity Service API 的相关文章

随机推荐

  • 设备故障分析及预测性维护在智能制造中的重要应用

    01 引言 近些年 智能制造在流程工业生产中得到了示范应用 其重要性逐渐深入人心 国内外学者对于智能制造的理解和定义不尽相同 清华大学吴澄将智能制造定义为以智能技术为代表的新一代信息技术在制造全生命周期的应用中所涉及的理论 方法 技术和应用
  • 操作系统的学习(一)

    一 操作系统的演进 1 无操作系统 人工操作 用户独占 cpu等待人工操作 资源利用率很低 2 批处理系统 无需人工等待 批量输入任务 资源利用率提升 多道程序设计 3 分时系统 人 机交互 多用户共享 及时调试 资源利用率提升 4 多道程
  • jqgrid获取全部数据

    在分页的情况下 如果grid分页 直接获取数据 var data grid table1 jqGrid getRowData 这种方法只能获取第一页的 此时获取全部数据的方法 grid table1 为某个grid的id var rowNu
  • 时序分析基本概念之线负载模型的选择方式

    对于跨越边界的net 我们除了选用合适的wire load model以外 还需要选择合理的wire load mode wire load mode主要有三种top enclosed 和segmented 这三种模式所选取的wire lo
  • 分享几款比较常用的接口测试工具

    首先 什么是接口呢 2023最新Jmeter接口测试从入门到精通 全套项目实战教程 接口一般来说有两种 一种是程序内部的接口 一种是系统对外的接口 系统对外的接口 比如你要从别的网站或服务器上获取资源或信息 别人肯定不会把数据库共享给你 他
  • OGRE动画

    动画是由若干静态画面 快速交替显示而成 因人的眼睛会产生视角暂留 对上一个画面的感知还末消失 下一张画面又出现 就会有动的感觉 计算机图形学中的动画也同样遵循着这一本质的原理 只不过不同于传统动画的手绘和拍摄 Ogre图形引擎可以通过自动或
  • java实现----阶乘相加1的阶乘+2的阶乘加3的阶乘......

    计算1 2 3 见下列代码 import java util Scanner 导包 public class 阶乘 public static void main String args Scanner sc new Scanner Sys
  • Xss练习(level11/12/13/16/17/18)

    本文为学习笔记 仅限学习交流 不得利用 从事危害国家或人民安全 荣誉和利益等活动 level11 查看源代码 尝试 利用BP抓包 改包 构造语句 注意闭合 level12 尝试BP抓包 改包 type test nclick alert 1
  • vue中style设置scoped后部分样式不生效

    因为用了elementUI的组件库 一个页面用到了el dialog 需要改一下样式 但
  • UDP用户数据报协议分析

    简介 UDP User Datagram Protocol 即用户数据报协议 在网络中它与TCP协议一样用于处理数据包 是一种无连接的协议 在OSI模型中 在第四层 传输层 处于IP协议的上一层 UDP用来支持那些需要在计算机之间传输数据的
  • vue通过uniapp打包运行页面空白(Failed to load resource)

    vue调试时候 真机打开url和mac电脑打开都正常 然后npm run build 在移植到uniapp项目里打包apk ipa传到手机运行页面空白 打开safari浏览器 查看ipa文件包的页面 发现报了Failed to load r
  • 【重磅整理】180篇NIPS-2020顶会《强化学习领域》Accept论文大全

    深度强化学习实验室 作者 DeepRL Lab AMiner cn 联合发布 来源 https neurips cc Conferences 2020 编辑 DeepRL 图片来自新智元 NeurIPS终于放榜 提交数再次创新高 与去年相比
  • Linux-C基础之输入输出函数

    一 输出 一 数据输出 C语言无I O语句 I O操作由函数实现 include
  • 搭建个人的第一个服务器以及域名申请和绑定--阿里云服务器

    在大学阶段 购买并搭建了自己的第一个服务器 心情激动无比 写下本片博文记录购买并搭建服务器的全过程 方便自己以后在服务器方面进行更加深入的学习 阿里云和腾讯的服务器都有学生价 价格都是一折左右 真心实惠 本人因为学习的Java 所以偏向于阿
  • 12.荔枝派 zero(全志V3S)-使用新版本的buildroot

    上面是我的微信和QQ群 欢迎新朋友的加入 1 下载新版buildroot 我下载了19年2月份发布的buildroot 2 文件系统配置 make menuconfig 设置target option 设置编译链 其中Toolchain p
  • nginx实现动静分离

    nginx实现动静分离 1 什么是动静分离 2 nginx反向代理与负载均衡 3 nginx实现负载均衡 4 nginx实现动静分离 1 什么是动静分离 动静分离主要是通过nginx PHP FPM来实现 其中nginx处理图片 html等
  • 89C51七段数码管显示“12345678”

    1 延时模块 void Delay ms unsigned int xms 11 0592MHz延时模块 unsigned char i j while xms nop i 2 j 199 do while j while i 2 显示模块
  • linux + gitee配置教程

    用gitee管理小红迟早50迈的项目 上手教程 1 git安装 sudo apt get update sudo apt get install git 检查一下git版本 看看是否安装成功 git version 2 git配置 下面两行
  • 该用什么软件分割音频?这些软件可以帮助你分割音频

    大家都知道想要制作一个好的视频是需要进行后期各种剪辑的 不仅视频需要后期剪辑 其实音频也是需要剪辑的 比如合并音频 裁剪音频片段 调整音频的速度 分割音频等等 那么这个时候挑选一款合适的音频剪辑软件就很重要了 今天我整理了一些简单好用的音频
  • Strapi之Entity Service API

    Query Engine API 和 Entity Service API 都是 Strapi 平台提供的 API 但是它们的功能和用途有所不同 Entity Service API 主要用于管理实体对象的创建 读取 更新和删除操作 它是对