云对象 - 重新定义前后端交互

题记

很多人都在讨论全栈。全栈就是使用一种语言js吗?不止。

语言的统一是第一步,下一步是协作的改善。

这样才能让语言统一发挥更大的价值。

背景

从2000年开始,xml作为数据交换格式开始流行,服务器拼接xml接口,客户端js获取xml内容,动态修改页面。

几年后,数据量更小的json替代了xml

移动互联网到来后,因为客户端分裂,加剧了接口的泛滥。

一转眼,接口已经玩了20年了。其他技术飞速发展,而前后端交互却一直是接口,没有什么创新。

js已经有了importexport,为什么调用后端接口,不能像调用一个前端模块一样呢?

serverless,让这一切开始了变化。

亚马逊lambda提出了云函数的概念,不再使用restfulurl,但仍然是基于json交换前后端数据。

uniCloud最初也以支持云函数为开始,但我们发现这仍不够优雅、简洁、直观、统一。

HBuilderX 3.4 开始,uniCloud推出了“云对象”,让调用云端服务,真正变成像调用前端模块一样简单。

什么是云对象

云对象:服务器编写API,客户端调用API,不再开发传输json的接口。思路更清晰、代码更精简。

比如服务端编写一个云对象news,该对象导出若干方法:add()、getList()、getDetailById()、softDel()、changeContent()、allowPublic()、addComment()、getComments()…等方法。

客户端的js则可以直接import这个news云对象,然后直接调用add等方法。

服务器示例代码如下:

HBuilderX中在uniCloud/cloudfunctions目录新建云函数/云对象,选择类型为云对象,起名为news。打开云对象入口index.obj.js,添加一个add方法。

// 云对象名:news
module.exports = {
	add(title, content) {
		title = title.trim()
		content = content.trim()
		if(!title || !content) {
			return {
				errCode: 'INVALID_NEWS',
				errMsg: '标题或内容不可为空'
			}
		}
		// ...其他逻辑
		return {
			errCode: 0,
			errMsg: '创建成功'
		}
	}
}

然后在客户端的js中,import这个news对象,调用它的add方法。

const news = uniCloud.importObject('news') //第一步导入云对象
async function add () {
	try {
		const res = await news.add('title de

你可能感兴趣的:(uni-app,web前端,Node.js,json,前端,serverless,vue.js)