偶然之间,接触到了APICloud,官网上非常详细的介绍的非常牛逼高大上,APICloud是中国领先的企业互联网化生态平台,通过拥有核心知识产权的混合开发技术帮助企业快速实现移动互联网布局,并以生态之力为开发者提供全面技术服务。
- 能够一键创建同时适配Android&ios的APP
- 多种开发工具可供选择
- 700多种云服务云集成,一键调用+一键集成
- 能搭建用H5/JS开发高性能原生APP的框架
- 可以在线生成App,同时生成Android&ios的安装包
- 推送、云修复、大数据统计
- 云数据库
- docs.apicloud.com/Cloud-API/d…
不过具体多牛逼,我没用过,倒是云数据库的功能,个人觉得还是免费的,用来作为博客的数据存取挺好的。下面从注册->建立数据库->数据表->数据请求(增删改查)->关系Relation建立->基于Relation上的请求依次进行讲解。
1. 注册
略
2. 建立数据库和数据表
链接: ++https://www.apicloud.com/console++
2.1 创建应用
进入上面的链接,点击右上角的“创建应用按钮”,在弹出的弹框总只需要填写应用名称即可。一个应用对应一个数据库。
2.2 新建云数据库
点击新建号的应用,点击进去,会看到如下的图片。选择右侧侧边栏内的Database新建云数据库。选择默认的云数据库即可。
2.3 新建表(Class)
数据库建立好后,会显示如下界面。右侧都是表名,其中带“_”下划线的表名是系统默认的。其中_user可用来存注册用户的数据,可以新建列数据,自带session生成。创建表,在这里等同于创建Class,点击右侧的“创建Class”按钮,会弹出一个弹框,只要填表名,再按确认,表就建立好了,在右侧就能看到这个新建的表。如下,点击对应的表,就能看到这样的表:
如上图,对表,有各种操作:添加行、添加列、更多。
3. 表的基本操作——增删改查
相关API:++https://docs.apicloud.com/Cloud-API/data-cloud-api#1++
3.1 请求验证
在请求云数据库进行操作的时候,每次请求都需要把验证信息作为头信息给带上。X-APICloud-AppId也就是应用的appId,X-APICloud-AppKey是由appId和appKey使用sha1算法生成SHA1码。使用node的,shai直接npm安装即可。
在应用页的上方,能看到的ID就是appId, 而appKey和SHA1码在展开的下方。
其中SHA1码的生成算法如下:
3.2 db基本配置
3.2.1 apicloud.db.config.js
配置文件,存放appId和appKey
module.exports = {
appId: 'A6019028955758',
appKey: 'DEDC2AD1-D2A2-9A28-C996-07B37A0E5008'
}
复制代码
3.2.2 api.db.js
import axios from 'axios'
import sha1 from 'sha1'
export default (appId, appKey) => {
const getHeaders = () => {
let authorization = localStorage.getItem('ttl_id')
const Now = Date.now()
return {
'X-APICloud-AppId': appId,
'X-APICloud-AppKey': `${sha1(`${appId}UZ${appKey}UZ${Now}`)}.${Now}`,
// "authorization": authorization || ''
}
}
return {
/*这里编辑各种云数据库请求*/
async login(params) {
return handleRequest(await request.post("/user/login", params, {
headers: getHeaders(),
'Content-Type': 'application/json'
}))
},
}
}
复制代码
3.2.3 基本的Class(数据表)请求
参考: ++https://docs.apicloud.com/Cloud-API/data-cloud-api#5++
这个应该是比较容易看懂的,其他就不细说了。
3.3. Relation对象
Relation对象用于将具有1-n关系的两张表建立Relation。
3.3.1 使用场景
假设表category用于存放文章分类,表article用于存放文章。其中category和article是有1对多的关系,也就是说一个分类下,可以有多个文章,而一个文章只有一个分类,这种情况下可以对category建立Relation对象,如上2.3中第二幅图,就是建立了Relation对象,列名为articles,此时Relation指向的是article表。也就是满足: (1)在article表中新增一条记录并为其指定一个category的时候,系统会自动在category表下的Relation对象也就是articles列的关系表中添加一条article记录,其对应内容会备份一份到此。 (2)在article表中删除一条记录的时候,系统会自动在category表下的Relation对象也将同一个记录删除。
3.3.2 新增一条记录,并在relationed表中也自动插入
也就是上述使用场景中的(1)操作。代码如下,只需在传的params中包含“{{relationClass}}(UZ*R*id)”,其中relationClass时1-n关系中n对应的表,从上面的例子看,就是category表。
article: { //就是传给addArticle方法的params
title: 'title',
"category(uz*R*id)": '',//id
content: '',
view: 0,
},
//这里是对应添加文章的put请求,className时article
async addArticle(className, params) {
return handleRequest(await
request.put(`/${className}`, params, {
headers: getHeaders(),
'Content-Type': 'application/json'
})
)
}
复制代码
3.3.3 删除和查询不需要特别处理
3.3.4 修改
如果是修改relationClass,需要把“{{relationClass}}(UZ*R*id)”带上。
3.4 filter过滤器使用
filter用于对查询结果进行过滤,可以搭配where,order,fields等使用,这个可以参考mongodb。简单示例如下:
async getArticles(className) {
let filter = {
order: 'createdAt DESC',
where: {
show: true
}
}
return handleRequest(await
request.get(`/${className}?filter=${JSON.stringify(filter)}`, {
headers: getHeaders(),
'Content-Type': 'application/json'
})
)
}
复制代码
如果需要对relationed数据表内的列表进行过滤,参考下面代码:
async getCategories(className) {
let filters = {
include: ['articles'], //需要过滤的relation表的列名,1:n关系中的1表
includefilter: {//对每个相关联的表单独设置filter属性
article: {
fields: ['id'],
}
}
}
return handleRequest(await
request.get(`/${className}?filter=${JSON.stringify(filters)}`, {
headers: getHeaders(),
'Content-Type': 'application/json'
})
)
},
复制代码
3.5 对file实现存储
imgAdd(file) {
let formdata = new FormData();
let dataBase64 = file.miniurl
let filename = file.name
formdata.append("file", file, filename);
FILE_API.uploadFile(formdata).then(res => {
if (res)
...
})
},
//最终调用db中uploadFile进行数据上传,params是formdata格式,通过post方法上唇,最终会保存在_file表中,返回res中包含url等参数。
async uploadFile(params) {
return handleRequest(await request.post("/file", params, {
headers: getHeaders(),
}))
},
复制代码
4. 总结
APICloud云数据库,是RestFul的接口定义,使用起来也是非常简单便捷的。平时在前端自测的过程中,也可以使用。而且上传的数据更为接近真实数据,可操作性强。以往常使用的RAP、或者mock模块、生成的数据与真实数据差别还是挺大的。另外使用APICloud的过程中,也会帮助理解非关系数据库(mongodb为主)的存储方式。