SORACOMのSDKを生成して使ってみた。 for Node.js #soracom

2015.12.07

はじめに

好物はインフラとフロントエンドのかじわらゆたかです。 本記事はSORACOM Advent Calendar 2015の7日目です。

SORACOMを操作するに当たり、RubyのSDKは用意されておりますが、
それ以外の言語のSDKは用意されておりません。
しかし、API RefarenceがSwagger形式で公開されているということは自動生成できるのではと思いたち、
SDKの自動生成と自動生成したSDKを利用してみました。

なお、今回の作例では以下のバージョンのNode.js・npmを用いています。

  • Node.js v4.2.2
  • npm 3.4.0

SDKの自動生成

swaggerのjsonからNode.js/AngularJSのSDKを生成してくれるNode.JSのモジュールとして下記のモジュールが有りました。
wcandillon/swagger-js-codegen
上記に対して一部変更を入れ、SDKジェネレータとして以下のモジュールを作成しました。

CM-Kajiwara/soracomSDKGenerater

実行方法としては上記のリポジトリから取得後、
npm installで必要なモジュールを取得後、以下のコマンドで生成されます。

リポジトリ取得・モジュール取得・自動生成

$ git clone https://github.com/CM-Kajiwara/soracomSDKGenerater.git
$ cd soracomSDKGenerater
$ npm install
$ node ./nodeGenerate.js
soracom SDK for Node.js Generated !!

生成に成功すると以下のディレクトリに生成されたSDKが配置されます。

$ ls ./soracom-sdk/nodejs
soracomSdk.js

生成したSDKの利用

処理概要

既にSoracomに登録済みとし、SIMの登録・Groupの作成・Groupの所属まで行いたいと思います。
なお、メールアドレス・パスワード・SIMの情報(IMSI PASSCODE)は設定ファイル(userinfo.json)に記載しておきます。
生成したsoracomSdk.jsはsdk/soracomSdk.jsに配置してあるものとします。

index.js

'use strict';
var userInfo = require('./userInfo.json');
var soracom = require('./sdk/soracomSdk.js');
var soracomSDKforGetToken = new soracom.SoracomSDK();
var authRequest = {
'email' : userInfo.email,
'password': userInfo.password,
'tokenTimeoutSeconds':0
};
var req = {};
req.auth = authRequest;
var co = require('co');
var createGroupName = 'nodeSampleCreateGroup';

co(function *(){
var resultToken = yield soracomSDKforGetToken.auth(req);
var option = {};
option.tokenObj = {
'X-Soracom-API-Key':resultToken.body.apiKey,
'X-Soracom-Token':resultToken.body.token
};
var soracomSDK = new soracom.SoracomSDK(option);

console.log("SIM(Subscriber)の登録")
var registerParam = {};
registerParam['imsi'] = userInfo.imsi;
var registerBodyParam = {};
registerBodyParam.registrationSecret = userInfo.passcode;
registerBodyParam.tags = {'name':'SDKGenerate Register SIM'};
registerParam['body'] = registerBodyParam;
// var registerResult = yield soracomSDK.register_subscriber(registerParam);
// console.log(JSON.stringify(registerResult.body));

console.log("Groupの作成")
var createGroupParam = {};
createGroupParam.Group = {};
createGroupParam.Group.tags = {
'name':createGroupName,
'location':'tokyo'
}
var createResult = yield soracomSDK.create_group(createGroupParam);
console.log(JSON.stringify(createResult.body));
var groupId = createResult.body.groupId;

console.log("SubscriberのGroupの所属")
var setGroupParam = {};
setGroupParam['imsi'] = userInfo.imsi;
var setGroupBodyParam = {'groupId':groupId};
setGroupParam['group'] = setGroupBodyParam;
var setGroupResult = yield soracomSDK.set_group_subscriber(setGroupParam);
console.log(JSON.stringify(setGroupResult.body));

console.log("Group所属の確認")
var listGroupsParam = {};
listGroupsParam['group_id'] = groupId;
var listGroup = yield soracomSDK.list_subscribers_in_group(listGroupsParam);
console.log(JSON.stringify(listGroup.body));
}).catch(function(err) {
console.log(err);
});

実行結果

$ npm initl
$ npm install co -save
$ npm install q -save
$ npm install request -save
$ node index.js
SIM(Subscriber)の登録
{"imsi":"xxxxxxxxxxxxxxx","msisdn":"xxxxxxxxxxxx","ipAddress":null,"apn":"soracom.io","type":"s1.standard","groupId":null,"createdAt":1449105845770,"lastModifiedAt":1449105845785,"expiredAt":null,"terminationEnabled":false,"status":"ready","tags":{"name":"SDKGenerate Register SIM"},"sessionStatus":null,"speedClass":"s1.standard","moduleType":"nano","plan":0,"expiryTime":null,"operatorId":"OPxxxxxxxxxx","createdTime":1449105845770,"lastModifiedTime":1449105845785}
Groupの作成
{"operatorId":"OPxxxxxxxxxx","groupId":"ba9b2516-45cc-47bb-9dc2-62763ab84ebf","createdAt":1449106411845,"lastModifiedAt":1449106411845,"configuration":{},"tags":{"name":"nodeSampleCreateGroup","location":"tokyo"},"createdTime":1449106411845,"lastModifiedTime":1449106411845}
SubscriberのGroupの所属
{"imsi":"xxxxxxxxxxxxxxx","msisdn":"xxxxxxxxxxxx","ipAddress":null,"apn":"soracom.io","type":"s1.standard","groupId":"ba9b2516-45cc-47bb-9dc2-62763ab84ebf","createdAt":1449105845770,"lastModifiedAt":1449106411949,"expiredAt":null,"terminationEnabled":false,"status":"ready","tags":{"name":"SDKGenerate Register SIM"},"sessionStatus":null,"speedClass":"s1.standard","moduleType":"nano","plan":0,"expiryTime":null,"operatorId":"OPxxxxxxxxxx","createdTime":1449105845770,"lastModifiedTime":1449106411949}

なお、Soracom ユーザーコンソール上でも反映されていることがわかります。

SORACOM_20151207_1

SORACOM_20151207_2

結論

Soracomから提供されているSwaggerからSDKを生成し、実行できることが確認できました。
明日は上記のGeneratorでAngularJSのSDKを生成して使った話を書きます。