调用接口之前,要写大量的字段校验代码?
需要关联读写多张表的数据,难以写出复杂的数据库语法?
不仅需要开发核心的业务逻辑,还需要加班搭建CMS和数据管理页面?
数据不止放在云开发,还需要查询外部 MySQL 的数据?
升级之前
众所周知,云开发提供的NoSQL数据库以其灵活性和易用性受到开发者的青睐,但其非结构化的数据存储方式也给开发者带来了挑战数据结构的频繁变动、前后端的数据校验逻辑编写以及数据统计分析的需求,都增加了开发的复杂度和工作量。
01、数据结构的定义不简单
在产品需求确认→接口、流程、数据结构的设计和定义→接口结构、数据库存储结构设计→设计存储结构完成配置→数据记录的读写。
02、数据接口校验复杂
前端和后端都需要进行繁琐的数据格式校验,格式错误或者不兼容,都会导致写入数据库的数据异常或报错无法写入,开发的工作量和复杂度。
03、后续业务衍生需求多
业务产生的数据记录,来自产品经理,或运营人员,甚至是老板的数据统计、分析需求;根据需求,通常都需要开发内部应用,实现数据的管理或调整、数据各种维度的统计分析和界面展示,这不仅耗时,而且存在大量的重复性工作。
云开发的解决方案:数据模型
数据模型作为一种新的解决方案,它通过以下几个方面来简化开发流程,提升开发效率:
01、数据库抽象,简化开发流程
通过使用数据模型在业务和底层数据库间建立一个抽象层。数据模型可以存储到不同的数据库,数据模型增加提供了MySQL类型数据库,进一步再扩展对接自有数据库、存量数据库。
数据模型提供基于模型的CRUD方法。云开发NoSQL数据库提供的客户端、管理端SDK及API可以直接读写集合。云开发MySQL数据库或自有MySQL数据库也提供了执行 SQL 命令的方法,可在云函数中调用。涉及到复杂查询或操作可使用数据库方法来进行。
例如使用 upsert() 方法创建或更新文章内容:
代码语言:javascript复制const post = {
title: "Hello World",
body: "Hello World",
_id: "foo",
};
const { data } = await models.post.upsert({
create: post,
update: post,
filter: {
where: {
_id: {
$eq: post._id,
},
},
},
});
console.log(data);
// 新增时返回
// {
// "count": 0,
// "id": "foo"
// }
// 更新时返回
// {
// "count": 1,
// "id": ""
// }
02、数据结构定义自动校验
数据模型允许开发者在设计阶段定义清晰的数据结构,并自动进行数据校验。使用数据模型来进行结构设计,通过数据模型的结构、字段名称、字段类型等设计完成后,完成对应的数据库表或集合,SDK也和数据模型直接对应,具备可使用的数据操作方法,如有修改,代码中的数据字段读写可同步变更。
模型会自动根据配置进行校验,例如string类型字段传递了数值,bool类型字段传递了字符串,错误传递会在数据操作前就检验及报错,针对常用格式,邮箱、电话、地区、文件提供格式校验,减少了代码中的校验逻辑,还提高了数据操作的安全性和一致性。
示例:首先在云后台的数据模型中定义一个简单的文章数据模型 post,再定义了两个属性:title(字符串类型)、body(字符串类型),然后尝试插入一个包含错误类型数据的对象: 使用 create() 方法创建新文章:
代码语言:javascript复制try {
const { data } = await models.post.create({
data: {
title: "你好,世界