概要
MODE シリーズ第 3 弾です
前回まで は Swift と Nodejs 両方で MODE への WebSocket 接続を試しました
今回は MODE の REST API を使ってコマンドを送信する部分を実装してみました
環境
- Mac OS X 10.10.5
- Xcode 7.2.1 (Swift 2.1.1)
- SwiftClient 2.0
SwiftClient のインストール
Cocoapods を使ってインストールします
- pod ‘SwiftClient’, ‘~> 2.0’
を追加して pod install
すれば OK です
コマンドを送信する部分のコーディング
SwiftClient を使ってコマンド送信用のエンドポイントに対してリクエストします
具体的なコードは以下の通りです
冒頭の deviceId
と deviceAPIKey
は MODE のデバイス一覧から取得してください
func sendCommand() {
var deviceId = "000"
var deviceAPIKey = "ModeCloud v1.xxxxxxxxxx==.xxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
var client = Client().baseUrl("https://api.tinkermode.com").onError(
{
e in print(e)
}
);
client.put("/devices/" + deviceId + "/command")
.set("Authorization", deviceAPIKey)
.type("json")
.send(["action":"test", "parameters":["p":"1"]])
.end({(res:Response) -> Void in
print("Status code from MODE: " + String(res.statusCode))
print(res.body)
})
}
で使う側は
import SwiftClient
class MainViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
sendCommand()
}
}
こんな感じで OK です
ポイントを簡単に説明します
まず、コマンド送信は PUT メソッドを使って送信したいデバイスの ID を含んだパスに対してリクエストします
client.put("/devices/" + deviceId + "/command")
ここで指定された deviceId に対して MODE がコマンドを対象のデバイスに対して送信します
もちろん自分に対しても送信することができます
WebSocket の接続時同様 REST API をコールするときにも Authorization ヘッダが必要になるのでセットしてください
.set("Authorization", deviceAPIKey)
あとはコマンド送信後に受け取ったレスポンスステータスとボディ情報を今回は print しているだけです
正常にコマンドが送信できた場合は 204 が返ってきました
コマンドを送信したい対象のデバイスが MODE に接続されていない場合は 400 番台のエラー系のコードが返ってきます
最後に
今回、前回、前々回も含めて、SDK 使えばいいじゃんという話があると思います
もちろん試しました、使ってもみました
それでもあえて自分で実装した理由は以下の通りです
- Nodejs-SDK のときは MODE の WebSocket を動作させるのに必要なエンドポイントやパラメータを理解したかったから
- Swift のときは MODE の iOS-SDK で WebSocket の部分を使おうとするとユーザ認証が必ず必要になることがわかったから (たぶん)
になります
後者に関してはもしかしたら自分の調査不足かもしれません
使うときは確かに準備されている各種 SDK を使うほうが絶対楽だと思いますが、いろいろとハマるポイントがあったり理解も不十分なまま進むこともあるので自分で実装しちゃうのも間違いではないかと思います
0 件のコメント:
コメントを投稿