• 登录
  • 注册
  • 为何选择 DroiBaaS?
  • 产品
  • 产品
    • 核心功能
    • 技术实力
  • 价格
  • 资源
    • 文档
    • SDK下载
    • 教学视频
  • 关于DroiBaaS
  • 社区
  • 常见问题
  • 联系我们
  • 价格
  • 文档
  • 下载
  • 技术
  • API商城
  • 社区
  • 注册有礼
  • 登录

# 云代码iOS调用指南 ## 简介 云代码(CloudCode)是部署运行在 DroiBaaS 云引擎上的代码,您可以用它来实现较复杂的,需要运行在云端的业务逻辑。DroiBaaS 希望帮助开发者无需处理服务器逻辑便可简单的开发出各种 App,只需要编写额外的的逻辑程序上传至 DroiBaaS 即可。这类逻辑程序即为云代码。目前 DroiBaaS 能处理以 lua 脚步语言编写的云代码。 ## 执行 CloudCode ### 使用 DroiCloud 类 `DroiBaaS` API 服务可让开发者编写 REST Api,并且可以用 ApiKey 控制开放范围。 > **注意:** `apiPath`参数需要您在网页填写的`URI`前添加`/api/v2/`。比如您的`URI`为`yourapi`,则完整的`apiPath`为`/api/v2/yourapi` 呼叫方式如下 * Objective-C ``` objc + (NSString*) callRestApi : (NSString*) apiKey apiPath:(NSString*) apiPath method:(DroiCloudMethod) method parameter: (NSString*) parameter error:(DroiError**) error; ``` * Swift ``` swift callRestApi(_ apiKey: String!, apiPath: String!, method: DroiCloudMethod, parameter: DroiObject!, andClassType clazz: Swift.AnyClass!, error: AutoreleasingUnsafeMutablePointer<DroiError?>!) -> Any! ``` 非同步呼叫方式 * Objective-C ``` objc + (NSString*) callRestApiInBackground : (NSString*) apiKey apiPath:(NSString*) apiPath method:(DroiCloudMethod) method parameter: (DroiObject*) parameter andCallback : (DroiCloudCallback) callback withClassType : (Class) clazz; ``` * Swift ``` swift callRestApi(inBackground apiKey: String!, apiPath: String!, method: DroiCloudMethod, parameter: DroiObject!, andCallback callback: DroiCoreSDK.DroiCloudCallback!, withClassType clazz: Swift.AnyClass!) -> String! ``` 开发者可以从客户端呼叫存放于 DroiBaaS 的 CloudCode. 通过调用 DroiCloud 类的接口 callCloudService 来指定欲执行的 CloudCode, 并且可以传入参数, 以及接收 CloudCode 的执行结果和相关错误 (DroiError)。 > **注意:** callCloudService 已不建议使用,将会在后续版本移除。请改用 callRestApi。 * Objective-C ```objc + (id) callCloudService : (NSString*) name parameter : (DroiObject*) parameter andClassType : (Class) clazz error:(DroiError**) error; ``` * Swift ```swift DroiCloud.callCloudService(name: String!, parameter: DroiObject!, andClassType: AnyClass!, error: AutoreleasingUnsafeMutablePointer<DroiError?>) ``` 也可以调用 DroiCloud 类的 callCloudServiceInBackground 接口后台运行 * Objective-C ```objc + (NSString*) callCloudServiceInBackground : (NSString*) name parameter : (DroiObject*) parameter andCallback : (DroiCloudCallback) callback withClassType : (Class) clazz; ``` * Swift ```swift DroiCloud.callCloudServiceInBackground(name: String!, parameter: DroiObject!, andCallback: DroiCloudCallback!, withClassType: anyClass!) ``` > **注意:** 从客户端只能调用 Entry 云代码, 相关定义请参照[云代码 - Entry 云代码](http://www.droibaas.com/html/doc_24269.html#Entry) ### sample 我们提供的 sample CloudCode 中有一个名为 add.lua 的示例,它可以获取两个数字的和。 ``` lua local Logger = require("DroiCloud.CloudLogger") local _M = {} function _M.main(request) local response = {} Logger.log(Logger.DEBUG, "add") if request then local cal = request.num1 + request.num2 --Put result in a table and return it. response['result'] = cal end return response end return _M ``` 若是想要执行 add.lua,可以调用以下代码。 > **提醒:** 请先阅读 [继承 DroiObject 并扩充存储数据属性](https://www.droibaas.com/html/doc_24124.html#DroiObjectExtension),切记需要 `AddInput ` 和 `AddResult` 注册到 `DroiObject`。 * Objective-C ```objc @interface AddInput : DroiObject DroiExpose @property float num1; DroiExpose @property float num2; @end @implementation AddInput @end @interface AddResult : DroiObject DroiExpose @property float result; @end @implementation AddResult @end - (void) callSimpleCloudCode { AddInput* addInput = [AddInput new]; addInput.num1 = 1.0; addInput.num2 = 2.0; DroiError* error; AddResult* addResult = [DroiCloud callRestApi:@"APIKey" apiPath:@"/api/v2/add" method:DROIMETHOD_POST parameter:addInput andClassType:AddResult.class error:&error]; } // 不建议使用 callCloudService // - (void) callSimpleCloudCode() { // AddInput* addInput = [AddInput new]; // addInput.num1 = 1.0; // addInput.num2 = 2.0; // AddResult* addResult = [DroiCloud callCloudService:@"add.lua" parameter:addInput andClassType:[AddResult class] error:nil]; // NSLog(@"Result: %d", addResult); // } @end // 不建议使用 callCloudService //- (void) callSimpleCloudCodeInBG { // AddInput* addInput = [AddInput new]; // addInput.num1 = 1.0; // addInput.num2 = 2.0; // DroiTaskDispatcher* taskDispatcher = [DroiTaskDispatcher getTaskDispatcher:BackgroundThreadDispatcher]; // [taskDispatcher enqueueTask:^{ // [DroiCloud callCloudServiceInBackground:@"add.lua" parameter:addInput andCallback:^(AddResult *addResult , DroiError *error) { // XCTAssertNotEqual(addResult.result, 0.0); // } withClassType:[AddResult2 class]]; //}]; // AddResult* addResult = [DroiCloud callCloudService:@"add.lua" parameter:addInput andClassType:[AddResult2 class] error:nil]; // XCTAssertNotEqual(addResult.result, 0.0); } ``` * Swift ```swift import DroiCoreSDK.DroiObject import DroiCoreSDK.DroiCloud class AddInput : DroiObject{ // DroiExpose var num1: Float = 0.0 // DroiExpose var num2: Float = 0.0 } class AddResult : DroiObject{ // DroiExpose var result: Float = 0.0 } func callSimpleCloudCode() { var error: DroiError? = nil let addInput = AddInput() addInput.num1 = 1.0 addInput.num2 = 2.0 let addResult = DroiCloud.callRestApi("APIKey", apiPath: "/api/v2/add", method: .DROIMETHOD_POST, parameter: addInput, andClassType: AddResult.self, error: &error) } // 不建议使用 callCloudService //func callSimpleCloudCode(){ // let target_cloudcode_name = "add.lua" // var error: DroiError? = nil // let addInput = AddInput() // addInput.num1 = 1.0 // addInput.num2 = 2.0 // var addResult = AddResult() // addResult = DroiCloud.callCloudService(target_cloudcode_name, parameter: addInput, andClassType: AddResult.self, error: &error) as! AddResult! } // 不建议使用 callCloudService //func callSimpleCloudCodeInBG(){ // let disp = DroiTaskDispatcher.getTaskDispatcher("123") // disp.enqueueTask { // DroiCloud.callCloudServiceInBackground(self.target_cloudcode_name, parameter: self.addInput, andCallback: // { // (addResult, error) in // XCTAssertNotEqual(addResult.result, 0.0, "Not a valiad calcuation") // } // , withClassType: AddResult.self) // } // sleep(3) //} ```

关于


  • 关于DroiBaaS
  • 使用协议

产品


  • 为何选择DroiBaaS?
  • 价格
  • 核心功能
  • 技术实力

资源


  • Quick Start
  • 文档
  • SDK下载
  • 教学视频
  • 服务申请

帮助


  • 社区
  • 常见问题
  • 联系我们
  • 服务状态

18501785218
baas.business@droi.com


  • 商务咨询QQ:3476783913
  • 技术支持邮箱:baas.support@droi.com
  • 技术交流QQ群:105530629
  • 技术支持工单
  • 微信公众号
  • 官方微博
Copyright©2018,Shanghai Droi Technology Co., Ltd. 上海卓易科技股份有限公司 沪ICP备11020935号-10