跳到主要内容

自定义 API

腾讯云微搭低代码自定义 API 支持调用第三方服务接口或使用代码来实现业务逻辑。开发者可以在应用、工作流或其他自定义 API 中使用 API。

自定义 API 方法实现方式

目前自定义 API 支持三种方式来实现自定义业务逻辑:

  • HTTP 请求:使用 HTTP 方式调用外部服务,通过简单的配置 HTTP 请求地址、方法、参数等即可完成方法的配置。
  • 自定义代码:集成了常用 NPM 包、数据模型、API 等 方法,只支持 JS 开发语言,可以用来实现自定义业务逻辑。
  • 云开发云函数:用户可以创建和使用云开发的云函数来实现完整的服务端功能,并通过自定义 API 的方法绑定并调用。

具体如何实现自定义 API 可以参见 新建自定义 API

自定义 API 的使用

目前在应用编辑器和自定义代码中,都可以使用自定义 API,支持可视化和自定义代码两种方式。

通过组件行为调用

进入应用编辑器,在组件行为事件中可以调用 API 方法,详情可参见 行为事件-执行动作

通过低代码编辑器调用

进入应用编辑器,可以在应用的低代码编辑器及微搭组件的组件代码中使用,详情可参见 代码编辑器。 示例代码:

export default async function ({ event, data }) {
const result = await app.cloud.callConnector({
name: "自定义 API 标识",
methodName: "方法标识",
params: {}, // 方法入参
});
}

在自定义代码中调用

在自定义 APIs 中通过自定义代码方式,可以调用其他自定义 API。详情请参见 自定义代码。 示例代码:

module.exports = async function (params, context) {
const result = await context.callConnector({
name: "自定义 API 标识",
methodName: "方法标识",
params: {}, // 方法入参
});

return {
_id: "123456",
};
};

在自定义 API 中使用自定义代码能力,可以方便开发者实现不同的业务场景。开发者可以通过自定义代码中内置的 API 或 npm 包调用外部 HTTP 服务、微搭数据模型、API、自定义 API 或云开发云函数。

自定义代码

自定义代码是一种运行在服务端的 NodeJS 代码,底层是云开发云函数。以下是一个自定义代码的主要构成:

/**
* 可以在这里引用内置 NPM 包,例如:
**/
const fetch = require("node-fetch");

/**
* 在这个函数体内可以实现业务逻辑
**/
module.exports = async function (params, context) {
// params 即为入参定义的结构
// context 为平台内置对象,包含了内置的 API

// 在这里返回这个方法的结果,需要与出参定义的结构映射
return {
_id: 123456,
};
};

使用场景示例

发起 HTTP 请求

开发者可以使用 node-fetch 库来发起 HTTP 请求。详情请参见 node-fetch 使用文档

const fetch = require("node-fetch");

module.exports = async function (params, context) {
const response = await fetch("https://reqres.in/api/users");
const result = await response.json();

// 在这里返回这个方法的结果,需要与出参定义的结构映射
return {
_id: "123456",
};
};

数据模型

数据模型接口(旧)

开发者可以使用 context.callModel 方法来操作数据模型,完整的方法请参见 数据模型方法

module.exports = async function (params, context) {
const result = await context.callModel({
name: "example_xxxxxxx", // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: "wedaCreate", // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {}, // 数据模型方法的入参
});

// 在这里返回这个方法的结果,需要与出参定义的结构映射
return {
_id: "123456",
};
};
数据模型v2接口

当前数据模型已经升级到v2版本。

开发者可以使用 $w.cloud.callDataSource 方法来操作数据模型,完整的方法请参见 数据模型v2方法

export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "sjmx_ftf41oj",
methodName: "wedaCreateV2",
params: {
data: {
email: "bar@weda.io",
name: "foo",
},
},
});
console.log("请求结果", data); // {"id": "f8f6930864c11bde006ff6c4662f9bf6"}
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}

API

开发者可以使用 context.callConnector 来调用 API 方法:

module.exports = async function (params, context) {
const result = await context.callConnector({
name: "API 标识",
methodName: "方法标识",
params: {}, // 方法入参
});

// 在这里返回这个方法的结果,需要与出参定义的结构映射
return {
_id: "123456",
};
};

云开发云函数

开发者可以使用 context.app.callFunction 来调用同环境下的云开发云函数:

module.exports = async function (params, context) {
const result = await context.app.callFunction({
name: "云开发云函数名称",
data: {}, // 方法入参
});

// 在这里返回这个方法的结果,需要与出参定义的结构映射
return {
_id: 123456,
};
};

! 此方法只能调用与微搭相同云开发环境中的云函数。

若开发者有自己的数据库(腾讯云或自有数据库),可以使用云开发云函数来实现数据库连接和读写,在与微搭相同云开发环境中新建以下云函数,示例:

const mysql = require("mysql2/promise");
exports.main = async (event, context) => {
try {
const connection = await mysql.createConnection({
host: process.env.HOST,
user: process.env.USERNAME,
password: process.env.PASSWORD,
port: process.env.PORT,
database: process.env.DB,
});
console.log("已连接");
const [rows, fields] = await connection.execute(
"SELECT * FROM `weda_model_example`;"
);
// 这里可以对返回数据做加工
return rows;
} catch (err) {
console.log("错误连接", err);
return err;
}
};

然后在自定义代码调用上述云函数,参考上述 context.app.callFunction 的使用示例。

云开发数据库

开发者可以使用 context.database 来操作 云开发数据库,查看 云开发数据库 API

module.exports = async function (params, context) {
const result = await context.database.collection("数据库集合名称").get();

// 在这里返回这个方法的结果,需要与出参定义的结构映射
return {
_id: 123456,
};
};

! 此方法只能操作微搭云开发环境下的数据库,无法跨环境操作数据库。