3月にリリースされたスクリプト機能を使ってiOS側からコードを実行してみたいと思います。今回はデータストアに保存する際に、事前に入力チェックを行うスクリプトとしてみます。
サーバ側にアップロードするコードについて
今回アップロードするコードは次のようになります。データストアでItemクラスを定義し、受け取った内容 req.body.item
を使ってItemクラスのインスタンスを生成します。そして入力チェックを行い(nameに値が入っているかどうか)、エラーだった場合はHTTPステータス400でエラーを返します。エラーがない場合はデータを保存し、そのオブジェクトを返します。
YOUR_APPLICATION_KEY、YOUR_CLIENT_KEYはそれぞれ自分のキーに変更してください。
var NCMB = require('ncmb'); module.exports = function(req, res) { var application_key = 'YOUR_APPLICATION_KEY'; var client_key = 'YOUR_CLIENT_KEY'; var ncmb = new NCMB(application_key, client_key); var Item = ncmb.DataStore('Item'); var item = new Item(req.body.item); if (emptyString(item.get("name"))) { return res.status(400).json({ "error": "Name is required." }); } item.save() .then(function(obj) { return res.status(201).json(obj); }) .catch(function(err) { return res.status(503).json(err); }); }; function emptyString(value) { if (typeof value === 'undefined') return true; if (value === null) return true; if (value === "") return true; return false; }
注意点としては、エラー時には error というキーにメッセージを入れて返してください。この error はiOS SDK側で使っています。
iOS側のコード
ではアプリ側のコードです。今回はSwiftで書いてみました。Objective-Cのコードはスクリプト (iOS) : 基本的な使い方 | ニフティクラウド mobile backendを参考にしてください。
let application_key = "YOUR_APPLICATION_KEY" let client_key = "YOUR_CLIENT_KEY" NCMB.setApplicationKey(application_key, clientKey: client_key) let script = NCMBScript.init(name: "ItemSave.js", method: NCMBScriptRequestMethod.ExecuteWithPostMethod) let dic: [NSObject: AnyObject] = ["item": ["message": "Hello World", "name": "Test"]] script.execute(dic, headers: nil, queries: nil, withBlock: {(data, err) -> Void in // print(err) print(data) })
注意点としては、HTTPメソッドを定義するところは、
- GET: NCMBScriptRequestMethod.ExecuteWithGetMethod
- POST: NCMBScriptRequestMethod.ExecuteWithPostMethod
- PUT: NCMBScriptRequestMethod.ExecuteWithPutMethod
- DELETE: NCMBScriptRequestMethod.ExecuteWithDeleteMethod
として定義する必要があるということです。
また、データを渡す部分ですが、NCMBObjectを使うことはできませんでした。そのため、データをAnyObjectとして定義する必要があります。
script.executeではデータの他、ヘッダーとクエリーを渡すことができます。そしてwithBlockにコールバックが返ってきますので、errオブジェクトがnilであるかどうかでエラー判定を行います。
今回、エラーでない場合はItemクラスのJSONデータが返ってきます。後はこれを使ってNCMBObjectを作成できます。
サーバ側のコードはAndroidやJavaScript、Unity SDKとも共通で利用ができます。入力値の検証など、複雑なロジックをサーバ側に持たせることでアプリ側が簡素化できるようになります。ぜひ試してみてください。