Java云函数¶
云函数是一段部署在服务端的代码片段,采用 java 或 node.js 进行编写,然后部署运行在Bmob服务器
通过云函数可以解决很多复杂的业务逻辑,从此无需将要将大量的数据发送到移动设备上做计算处理
只需将这些计算都交由服务端运算处理,最后移动客户端仅仅需要接收云函数运算处理返回的数据结果就可以了
通过更新云函数代码片段,客户端无需更新,便满足业务改动的需求。这样云函数便有更多的灵活性和自主性
调用方法¶
云函数提供了以下几种方式提供调用:
调用方式
所需信息
优点
SDK
AppId
交互自带加密,接入快速
RestApi
AppId、RestKey
所有平台适用,通用性强
Http请求
Secret Key
所有平台适用,可用浏览器打开
Restful API¶
调用 api.bmob.cn ,与调用NodeJS版云函数的方式 完全相同。这种方式下,服务器会 自动判断语言,但 限制 Method 为 Post 且 Content-Type 为 application/json
调用 javacloud.bmob.cn ,调用方式基本相同,这种方式 仅可调用Java云函数,但 不限制 Method 和 Content-Type
// 使用Appid + RestKey请求api.bmob.cn域名(自动判断语言)
curl -X POST \
-H "X-Bmob-Application-Id: Your Application ID" \
-H "X-Bmob-REST-API-Key: Your REST API Key" \
-H "Content-Type: application/json" \
-d '{"name": "zwr"}' \
https://api.bmob.cn/1/functions/[function name]
// 使用Appid + RestKey请求javacloud.bmob.cn域名(仅支持Java云函数)
curl -X [method] \
-H "X-Bmob-Application-Id: Your Application ID" \
-H "X-Bmob-REST-API-Key: Your REST API Key" \
-d '[body]' \
https://javacloud.bmob.cn/1/functions/[function name]
// 使用Master Key请求
curl -X [method] \
-H "X-Bmob-Master-Key: Your Master Key" \
-d '[body]' \
https://javacloud.bmob.cn/1/functions/[function name]
Http请求¶
// 使用Secret Key请求
curl -X [method] \
-H "header key: header value" \
-d '[body]' \
https://javacloud.bmob.cn/[secret key]/[function name]
// 或者直接用浏览器打开,即GET请求
https://javacloud.bmob.cn/[secret key]/[function name]?k1=v1&k2=v2
// 当直接进入 https://javacloud.bmob.cn/[secret key] 时,会触发 index 方法
// 当 function name 不存在是,会触发 notfound 方法
以下是Bmob各种SDK调用Java云函数的方法,与调用NodeJS版云函数的方式 完全相同
Android SDK¶
AsyncCustomEndpoints ace = new AsyncCustomEndpoints();
ace.callEndpoint(Context, String funcName, JSONObject params, new CloudCodeListener() {
@Override
public void done(Object object, BmobException e) {
if (e == null)
Log.e(TAG, "Succeed: " + object);
else
Log.e(TAG, "Failed: " + e);
}
});
微信小程序¶
Bmob.Cloud.run('test', {'name': 'zwr'}).then(function (result) {
console.log("Succeed: ");
console.log(result);
}, function (error) {
console.log("Failed: ");
console.log(error);
});
iOS SDK¶
[BmobCloud callFunctionInBackground:@"funcName" withParameters:nil block:^(id object, NSError *error) {
if (error) {
NSLog(@"Failed: %@",[error description]);
}else{
NSLog(@"Succeed: %@",object);
}
}] ;
C# SDK¶
IDictionary parameters = new IDictionary{ {"name","zwr"}};
Bmob.Endpoint("test", parameters, (resp, exception) =>
{
if (exception == null)
{
print("Succeed: " + resp);
}
else
{
print("Failed: " + exception.Message);
}
});
PHP SDK¶
$cloudCode = new BmobCloudCode('test'); //调用名字为test的云函数
$res = $cloudCode->get(array("name"=>"zwr")); //传入参数name,其值为zwr
JavaScript¶
Bmob.Cloud.run('test', {"name":"tom"}, {
success: function(result) {
console.log("Succeed: ");
console.log(result);
},
error: function(error) {
console.log("Failed: ");
console.log(error);
}
});
日志¶
可在Bmob后台根据时间、日志级别、内容关键字、方法名搜索想要的日志
每个应用拥有最大10m的日志空间,循环写入
高级用户有实时日志功能
代码规范¶
java云函数必须遵循以下格式:
public static void onRequest(final Request request, final Response response, final Modules modules) throws Throwable {
// 上面这个方法体,不允许任何修改
// 这里使用Java编写云函数
// 最后一个字符必须是 }
}
代码不能包含以下关键字:(保存代码时有错误提醒)
Class
File
System
...
需要获取当前毫秒时,可用 getTime() 、new java.util.Date().getTime() 替代 System.currentTimeMillis()
如果确实需要用到被禁止使用的关键字,例如查询"File"表,可用"F"+"ile"的形式拼接
不可包含/**/注释,如需注释,请用 //
仅可写一个Java的方法,不能写多个方法、类变量、静态变量等
云函数执行完毕后,必须用response.send方法返回响应数据,否则会被当做超时,多次超时可能会被暂停使用
工具¶
Github页面如下:
libs目录 下提供了 Bmob-JavaCloud-Apis_xxx.jar 以供开发者使用IDE(ecplise、as)开发时参考
exec目录 下提供了 macos、linux、windows 64位等平台的可执行文件,以供开发者快速进行代码的上传、修改、同步到本地和删除
samples目录 提供了案例
doc目录 下提供了文档
方法参数¶
Request对象¶
onRequest方法参数中 Request request 包含了本次请求的全部信息:
名称
类型
获取方法
示例
路径Path
String
request.getPath()
/xxxxxxxxxxxxxxxx/test1
方法Method
String
request.getMethod()
POST
请求头Headers
JSONObject
request.getHeaders()
{"User-Agent":["Chorme"]}
请求体Body
byte[]
request.getBody()
[98, 109, 111, 98]
Get参数
JSONObject
request.getQueryParams()
{"page": "1"}
Body内参数
JSONObject
request.getParams()
{"username": "zwr"}
单个请求头
String
request.getHead