2017年3月8日水曜日

SwiftClient で MODE にコマンドを送信してみた

概要

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 を使ってコマンド送信用のエンドポイントに対してリクエストします
具体的なコードは以下の通りです
冒頭の deviceIddeviceAPIKey は 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 件のコメント:

コメントを投稿