Skip to content

2. Specification

小林伸郎 edited this page Feb 16, 2017 · 17 revisions

はじめに

ここでは、Device Connect システムの仕様を説明します。

APIアクセスデザインパターン

Device Connectシステムでは、シンプルで手軽なHTTP通信(REST)と、効率的なWebSocket通信によるイベント処理を行い、ウェアラブルデバイスやIoTデバイスなどの操作を行います。

Device Connectシステムは、以下の3つのデザインパターンの基本設計に基づきます。

  • One shot data
  • Event driven data
  • Streaming data

One shot data

シンプルなHTTP通信(REST)でDevice Conenct Managerにアクセスすることで、ウェアラブルデバイスやIoTデバイスの情報を取得、操作を行います。

例) アクセスした瞬間の心拍センサーの値を取得

Event driven data

WebSocketを使用して、ウェアラブルデバイスやIoTデバイスで発生するイベントを連続的に受信します。

例) 心拍センサーの値に変化があった瞬間の値を連続的に自動取得

Streaming data

各デバイスプラグインがWebサーバを立ち上げたURIをアプリケーションに中継します。
アプリケーションでは、受け取ったURIを直接参照することで、Device Connect Managerを経由せずに映像リソースなどのデータを受信します。

例) カメラ映像を要求した場合に、OSやGotAPIの内部構造を経由せずに映像リソースとしてアプリケーションから直接利用

アプリケーションと各デバイスプラグインが立ち上げたWebサーバ間の通信においては、特に規定は行なっていません。
デバイスプラグインの仕様に合わせて、アプリケーションが処理する必要があります。

Device Connect Manager

Device Connect Managerは、GotAPIで定義されているGotAPI Serverを実装したアプリケーションになります。

Device Connectシステムを使用するアプリケーションは、このDevice Connect Managerにアクセスして、様々なデバイスの操作します。

GotAPI

OMA GotAPI v1.1 上で定義されている各サービス(デバイス)を操作するためのAPI仕様になります。
詳しくは、GotAPIの資料を参照してください。

GotAPI Interface

GotAPI Interface は、標準化したAPIを定義し、各サービスの発見、操作などを行う機能を提供します。

Device Connectシステムでは、GotAPI Interface が定義している以下のAPIを実装しています。

  • Availability API
  • Authorization API
  • ServiceDiscovery API
  • ServiceInformation API

Availability API

GotAPI Serverが使用可能状態にあるかの確認を行う機能を提供します。

GET /gotapi/availability HTTP/1.1
Host: localhost:4035
Origin: http://app.example.com
{
    "result":0
}

Authorization API

GotAPI Auth Serverにユーザ認可を求める機能を提供します。
ユーザに認可された場合にアクセストークンを取得することができます。

Availability、Authorization 以外のAPIにアクセスする場合には、このAPIで取得したアクセストークンを一緒に送らないとアクセスすることができません。

Grant

クライアントIDを生成する機能を提供します。

GET /gotapi/authorization/grant HTTP/1.1
Host: localhost:4035
Origin: http://app.example.com
{
    "result":0,
    "clientId": "0123456789",
    "errorCode": 0,
    "errorMessage": "" ,
    "hmac": "0123.....xyz"
}
AccessToken

Grantで生成したクライアントIDを元に、アクセストークンを生成する機能を提供します。
このAPIが呼び出された時点でユーザに認可を求めます。
ユーザ認可された場合には、アクセストークンを生成し返却します。
また、ユーザ認可されなかった場合にはアクセストークンを生成せずに、エラーを返却します。

GET /gotapi/authorization/accesstoken?clientId=0123456789&scope=notification,vibration&applicationName=Smart%20Watch&20Controller HTTP/1.1
Host: localhost:4035
Origin: http://app.example.com
{
    "result": 0,
    "accessToken": "9876543210",
    "errorCode": 0,
    "errorMessage": "" ,
    "hmac": "0123.....xyz"
}

このAPIが呼び出された時点で、Device Connect Managerは、ユーザに使用の認可を求めるダイアログを表示します。
また、一定時間ユーザから認可を得られなかった場合もエラーを返却します。

ServiceDiscovery API

GotAPI Serverに接続されているサービス(デバイス)一覧を取得する機能を提供します。

例) ServiceDiscoveryでサービスを検索します。

GET /gotapi/servicediscovery?accessToken=xxxxx HTTP/1.1
Host: localhost:4035
Origin: www.example.com
{
    "product":"Device Connect Manager",
    "version":"x.x",
    "result":0,
    "services":[
        {
            "id":"device1.localhost.deviceconnect.org",
            "name":"Service1",
            "type":"Bluetooth",
            "online":true,
            "config":""
        },
        {
            "id":"device2.localhost.deviceconnect.org",
            "name":"Service2",
            "type":"WiFi",
            "online":false,
            "config":""
        }
    ]
}

ServiceInformation API

GotAPI Serverからサービス(デバイス)の詳細な情報を取得する機能を提供します。

例) ServiceDiscoveryで発見したサービスのidを指定して詳細な情報を取得します。

GET /gotapi/serviceinformation?accessToken=xxxxx&serviceId=device1.localhost.deviceconnect.org HTTP/1.1
Host: localhost:4035
Origin: www.example.com
{
    "product":"Device Connect Manager",
    "version":"x.x",
    "result":0,
    "connect":{
        "wifi":true
    },
    "supports":[
        "system",
        "battery",
        "vibration"
    ],
    "supportApis": [
        "battery" : {
            // ...省略...
        },
        "vibration" : {
            // ...省略...
        }
    ]
}

Device Connect Managerでは、拡張機能として、supportApisにSwagger2.0で定義されたAPIの情報を格納します。

GotAPI セキュリティ

GotAPIでは、以下のようなセキュリティを定義しています。

リクエストの発行元を明示

OMA GotAPI v1.1 の規定に従い、アプリケーションは、リクエストにOriginヘッダを付加する必要があります。
GotAPIのセキュリティ機能であるアプリケーション認可機能やホワイトリスト機能は、Originヘッダの情報を元に処理されます。

また、HTMLアプリケーションとNativeアプリケーションでは、付加するヘッダが異なります。

  • HTMLアプリケーションの場合

RFC6454上で定義されるOriginをOriginヘッダに指定します。

GET /gotapi/availability HTTP/1.1
Host: 127.0.0.1:4035
Origin: http://xxx.example.com/

ブラウザ上で動作させると思いますので、自動的に付加されるので、開発者はあまり気にする必要はありません。

  • Nativeアプリケーションの場合

X-GotAPI-OriginヘッダにNativeアプリケーションの識別子(Androidの場合はパッケージ名等)を指定します。

GET /gotapi/availability HTTP/1.1
Host: 127.0.0.1:4035
X-GotAPI-Origin: com.example.android.app

なお、Device Connect Managerでは、両方のヘッダが指定された場合は、Originヘッダを優先して使用します。

本機能はDevice Connect Managerの設定画面で有効/無効を切り替えることができます。
本機能を無効にした場合は、Originが不要になるためにアプリケーション認可機能やホワイトリスト機能も同時に無効になります。

アプリケーション認可機能

ユーザが認可していないアプリケーションからのアクセスをブロックする機能です。

アプリケーションは、初めてGotAPI Serverにアクセスする際、ユーザからの認可とともに、アクセストークンを取得する必要があります。
アクセストークンは、Authorization APIで取得します。

アクセストークン無しでデバイスにアクセスしようとした場合、GotAPI Serverはアプリケーションに対してエラーを返却します。

WebSocketをGotAPI Serverに接続しようとした場合にも、同様にアクセストークンが必要になります。

アクセストークン無しでWebSoketを接続しようとした場合に、GotAPI Serverは{"result":1}を通知してWebSocketを切断します。

なお、本機能はDevice Connect Managerの設定画面で有効/無効を切り替えることができます。
無効にされた場合には、アクセストークンの有無は無視します。

ホワイトリスト機能

ホワイトリストに含まれないアプリケーションからのアクセスを禁止する機能です。
また、ユーザに対してアプリケーションのホワイトリスト管理機能及びUIと本機能の有効/無効を操作するUIを提供します。
これによりユーザ操作によって切り替え可能にします。

本機能が有効になっている場合、アプリケーションから受信したリクエストメッセージのOriginヘッダをチェックし、Originがホワイトリストに含まれていない場合、エラーを返却します。

HMACサーバ検証機能

アプリケーション側でGotAPI Serverの正当性を検証する機能を提供します。

アプリケーション側で、GotAPI Serverの正当性を検証できるように、アプリケーションからのリクエストへの応答にHMACを付加します。
本機能の使用・不使用はアプリケーション側に委ねられています。

HMACを生成するためのキーをGotAPI Serverに送信するためにURLスキームを使用します。
以下のようにURLスキームのパラメータにキーを含めることで送信します。

  • 例) Android(Chrome)
<a href="intent://#Intent;scheme=gotapi;package=com.example.gotapi;S.origin=app.example.jp;S.key=0123456789;;end">Invoke the GotAPI Server</a>

GotAPI Serverでは、受け取ったキーを保持し、アプリケーションからのリクエストに付加されているnonceからHMACを計算してレスポンスに返却します。
アプリケーションでは、キーとnonceからHMACを生成して、GotAPI Serverから返却されたHMACと比較して正当性を確認します。

ただし、アプリケーションがnonceをリクエストに付加していない場合には、HMACの処理は行われません。

Device Connect セキュリティ

Device Connect Managerでは、GotAPIのセキュリティ以外にも以下の制限を設けています。

外部IPを許可

Device Connect Managerは、127.0.0.1(localhost)以外の外部IPからのアクセスを許可することができます。

外部IPからのアクセスを許可している場合には、Device Connect Managerがインストールされている端末と同じネットワーク内のPC端末などから操作を行うことができます。

外部IPからのアクセスを許可する場合には、意図しない人からのアクセスが考えられますので、デフォルトでは無効に設定してあります。

ただし、機能にアクセスしようとした時点で、アプリケーション認可機能がDevice Connect Managerがインストールされている端末で実行され認可が求められます。
よって、認可を受けていない外部IPからのアクセスでは、操作することはできません。

ポート監視

Device Connect Managerで使用するポートを監視を行い、Device Connect Manager以外のアプリケーションが起動している場合には、警告を表示してユーザに確認を行います。

ユーザは、Device Connect Manager以外のアプリがポートを使用していることに気がつくことができ、Device Connect Managerになりすましをしているアプリケーションを発見することができるようになります。

iOSでは、バックグラウンドでアプリケーションが動作することができないため、他のアプリケーションがなりすましすることができません。よって、この機能はAndroidにのみの仕様になります。

外部からの起動・停止

Device Connect Managerは、URLスキームを使用して起動と停止を操作することができます。

以下のURLスキームを呼び出すとDevice Connect Managerの起動・停止を確認する画面が表示されます。

  • Device Connect Manager 起動確認ダイアログを表示
<a href=intent://start/activity#Intent;scheme=gotapi;package=org.deviceconnect.android.manager;end">起動</a>
  • Device Connect Manager 停止確認ダイアログを表示
<a href="intent://stop/activity#Intent;scheme=gotapi;package=org.deviceconnect.android.manager;end">停止</a>

また、ユーザ確認なしでDevcie Connect Managerの起動・停止を行うこともできます。

  • Device Connect Manager 起動
<a href=intent://start/server#Intent;scheme=gotapi;package=org.deviceconnect.android.manager;end">起動</a>
  • Device Connect Manager 停止
<a href="intent://stop/server#Intent;scheme=gotapi;package=org.deviceconnect.android.manager;end">停止</a>

なお、本機能は、Device Connect Managerの設定画面で、有効・無効を設定することができます。
無効にされている場合には、勝手にDevice Connect Managerの起動・停止を行うことができずに、ユーザに対して確認を行う画面が表示されます。

Device Connect API

各サービスの機能にアクセスするために Device Connect システムで定義したAPIです。

Device Connect API は、プロファイル単位で Swagger 2.0 で規定されるフォーマットで記述します。
各プロファイルの定義は、こちらを参照してください。

また、アプリケーションは、ServiceInformation APIで、その定義を取得することができ、サービスがサポートしているAPIを確認することができます。

リクエストの定義

リクエストは、RESTの仕様であるArchitectural Styles and the Design of Network-based Software Architectures CHAPTER 5 Representational State Transfer (REST)を参考にして、Device Connect APIを定義します。

共通パラメータ

アプリケーションはリクエストを送信する際、下記のパラメータが必要になります。

論理名 物理名 データ型 省略 設定値
アクセストークン accessToken string 右記参照 Authorization APIで取得したアクセストークン。
Availability API、Authorization APIのみ省略可。それ以外のAPIでは必須。
GotAPIの仕様のため、詳細はこちらを参照してください。
ワンタイムトークン nonce string HMAC生成用のワンタイムトークン。
GotAPIの仕様のため、詳細はこちらを参照してください。

なお、 Device Connect Managerでは、設定画面において、アプリケーション認可機能の有効/無効を切り替えることができます。
アプリケーション認可機能が無効に設定されている場合には、accessTokenを省略することができます。

HTTPメソッド一覧

Device Connect APIでは以下のHTTPメソッドをサポートしています。

HTTPメソッド
GET
PUT
POST
DELETE

HTTP アクセス制御 (CORS)に対応するために、OPTIONSヘッダについては、Webサーバ側でレスポンスを返却します。

Access-Control-Allow-Origin: *

Device Connect Managerは、CORSのレスポンスで全てのOriginに対して許可を行います。

リクエストURIの規則

Device Connect では、以下の規則に基づいて、Device Connect APIを定義します。 以下の定義に従い、Swagger 2.0のフォーマットで定義ファイルを記述します。

1. セグメント階層

URIは、/api/profile/interface/attributeのセグメントで定義します。

  • interfaceとattributeは省略可能である。
  • interfaceが存在する時は、attributeは省略不可とする。
例) interfaceとattributeが省略された場合
/api/profile

例) interfaceが省略された場合
/api/profile/attribute

例) 省略がない場合
/api/profile/interface/attribute
1.1. セグメントの説明
セグメント 省略 説明
api - Device Connect APIが使用するAPIの名前を指します。
OMAのGotAPIを元にしているため、apiは「gotapi」を指定しています。
profile - ユニークな機能ごとにそれぞれprofileを割り当てます。
interface 提供されるプロファイルで、細分化できる機能がある場合にはinterfaceとして割り当てます。
attribute 提供されるプロファイルで、取得・操作が可能な属性を持つ場合にattributeとして割り当てます。
1.2. セグメント構成の例外

Device Connectでは、GETメソッドを用いて、POST/PUT/DELETEを操作できるようにするために、以下のようなセグメントを定義します。

/api/method/profile/interface/attribute
セグメント 省略 説明
method PUT、POST、DELETEの代替操作を行うためのメソッドを指定します。
例) GETメソッドで、PUT操作相当を行う
GET /gotapi/put/mediaPlayer/play

GET以外のHTTPメソッドを使用している場合には、methodを指定することはできません。

2. URIの命名規則

api、profile、interface、attributeの各セグメントは、以下の命名規則に基づき定義します。

  • ローワーキャメルケースで定義する。
  • セグメントは複数単語(2,3単語程度)に収める。
  • 意味のない冗長な単語はなるべく使用しない。
  • UnixやDOSなどのコマンド名を使用しない。
例) ローワーキャメルケースで定義する。
正: PUT /gotapi/mediaPlayer/play

誤: PUT /gotapi/meida_payer/play
   PUT /gotapi/meida-payer/play

ただし、Device Connectシステムでは、profile、interface、attributeの大文字小文字を無視して処理を行います。

3. 一般的な略語

一般的な略語は使用して良いこととします。

例) 一般的な略語
PUT /gotapi/tv
PUT /gotapi/ecg/onECG

一般的でない略語や複数の意味を持つような単語を使用する場合には、その旨をWikiなどで説明します。

例) 一般的でない略語
PUT /gotapi/omnidirectionalImage/roi

ROIは、「Region Of Image」の意味で使用していますが、「Return On Investment」などの略語の可能性もあるため、説明を追加する必要があります。

4. 数値

値の範囲が決まっているのならば、/profile/interface/attributeに数値などを含めても良いこととします。

  • 可変的に数値を変えられるような数値は使用しない。
  • 推奨としては、0〜10程度の範囲とする。
例) GPIOのピン番号
GET /gotapi/gpio/export/pin0
GET /gotapi/gpio/export/pin1
GET /gotapi/gpio/export/pin2

5. 同じ綴り

同じ綴りのAPIは用意しないようにします。

例) onECGとoneCgで同じ綴り
PUT /gotapi/ecg/onECG
PUT /gotapi/ecg/oneCg

6. 商品名等

造語、商品名などは、汎用性のない操作を定義する時に使用します。

例) Spheroのデバイスの機能を使用する
PUT /gotapi/sphero/quaternion/onQuaternion

Spheroは、アメリカ Spheroのアメリカおよびその他の国における登録商標または商標です。

7. 動詞

RESTでは動詞を使用してはいけないが、Device Connect APIでは分かりやすさを重視して使用しても良いこととします。

  • profileは名詞にする。
  • interface、attributeは動詞を使用しても良い。
例) attributeに動詞を使用
POST /gotapi/notification/notify
POST /gotapi/phone/call

8. 予約語

既存のGotAPIやDevice Connect APIで定義されているProfileは、予約語となるために独自Profileで使用することはできません。

例) 既に定義されているプロファイル
GET /gotpai/availibity
GET /gotpai/files
など

9. イベント

イベント処理の設定を行うAPIは、attributeにonというプレフィックスを付けます。

例) イベントの登録
PUT /gotapi/battery/onChargingChange
PUT /gotapi/deviceOrientation/onDeviceOrientation

例) イベントの解除
DELETE /gotapi/battery/onChargingChange
DELETE /gotapi/deviceOrientation/onDeviceOrientation
9.1. イベントの例外

GotAPIで定義されているイベント処理では、onが付かない場合があります。

例) GotAPIで定義されているAPI
PUT /gotapi/health/heart

レスポンス定義

Device Connect APIへのリクエストに対するレスポンスは、以下の値を返します。

  • ステータスコードは、200で返します。
  • HTTPレスポンスヘッダのcontent typeには、application/jsonを返します。
  • HTTPレスポンスボディには、JSONを返します。

ただし、リソースにアクセスを行うfilesなどへのリクエストに対しては、バイナリを返却します。

共通パラメータ

Device Connect Managerからのレスポンスには以下のパラメータが返却される。

論理名 物理名 データ型 省略 備考
処理結果 result 数値 - 0:正常応答
0以外:異常応答
プロダクト名 product 文字列 - 処理を行った Device Connect Managerの名前
バージョン名 version 文字列 - 処理を行った Device Connect Managerのバージョン名
HMAC hmac 文字列 Device Connect Managerの正当性を示すための署名。
アプリケーションが事前にHMAC生成鍵を送信していなかった場合は省略されます。

レスポンス例

{
    "product" : "Device Connect Manager",
    "version" : "2.0.0",
    "result" : 0,
    "playStatus" : {
        "mediaId" : "media001",
        "mimeType" : "audio/mp3",
        "status" : "play",
        "trackNo" : 5,
        "pos" : 80
    },
    "hmac" : "abcdef0123456789"
}

エラーレスポンス

リクエストに対するレスポンスは result が 0以外 のとき、以下の項目を含むレスポンスを返却します。

エラーレスポンスの共通パラメータ

論理名 物理名 データ型 備考
エラーコード errorCode 数値 エラーを識別するためのコード
エラーメッセージ errorMessage 文字列 エラーの内容
エラーレスポンス例
{
    "product" : "Device Connect Manager",
    "version" : "2.0.0",
    "result" : 1,
    "errorCode" : 1,
    "errorMessage" : "Unknown error."
}

エラーコード一覧

エラーコード エラー内容
1 原因不明のエラー
2 未サポートプロファイルエラー
3 未サポートアクション(HTTPメソッド)エラー
4 未サポートアトリビュートエラー
5 デバイスID未設定エラー
6 デバイス発見失敗エラー
7 タイムアウトエラー
8 未知のインターフェースへのアクセスエラー
9 バッテリー低下による操作不能エラー
10 不正なリクエストパラメータエラー
11 認証エラー
12 アクセストークン有効期限切れエラー
13 アクセストークン未設定エラー
14 スコープ外へのアクセスエラー
15 認証時にクライアントIDを発見できなかったエラー
16 デバイス状態異常エラー
17 サーバー状態異常エラー
18 リクエストの発行元が不正
19 リクエストURLが不正
20 Profile名が不正

イベント

WebSocketを使用して、ウェアラブルデバイスやIoTデバイスで発生するイベントを連続的に受信する機能を提供します。

WebSocketの接続

WebSocketに接続する際には、アクセストークンを送る必要があります。
アクセストークンが送られてくるまでは、接続されたとは認識せずにイベントの送信は行いません。

認可されたいないアクセストークンを送られてきた場合には、レスポンスに{"result": 1}を返却して、WebSocketを切断します。

Device Connect Managerにて、Local OAuthが無効にされている場合には、アクセストークンを送信しなくてもイベントの送信を行います。

WebSocketの切断

WebSocketが切断された時に、切断されたWebSocketのOriginを各デバイスプラグインに通知します。
デバイスプラグインでは、Originに紐づいていたイベントを必要に応じて解除するなどの後始末を行います。

イベント登録

デバイスプラグインに対して、イベントのAPIに対してPUT命令を行うことで、イベントを開始します。
WebSocketが接続されていても、イベント開始のAPIが呼び出されていない場合にはイベントの送信は行われません。

イベント解除

デバイスプラグインに対して、イベントのAPIに対してDELETE命令を行うことで、イベントを停止します。

イベントの解除は、他にもWebSocketが切断の通知でも行います。WebSocketが切れた時点でイベントが不要になったと判断し、デバイスプラグインは、イベントを停止します。

イベント通知

リソースアクセス

アプリケーションとデバイスプラグイン間でのリソースのやりとりする機能を説明します。

リソース送信

アプリケーションからデバイスプラグインに対してリソースを送信する機能を提供します。

マルチパート

マルチパートのデータをDevice Connect Managerに送信することで、デバイスプラグインにリソースを送信します。

Device Connect Managerは、送られてきたマルチパートのデータをファイルに保存します。
Androidの場合には、ContentProvider経由でデバイスプラグインにファイルのデータを送信します。
iOSの場合には、同じアプリに同梱されていますので、NSFileHandle経由でデバイスプラグインにファイルのデータを送信します。

マルチパートサンプル
POST /canvas/drawImage HTTP/1.1
Host: localhost:4035
Content-Type: multipart/form-data;boundary=WebKitFormBoundaryp7MA4YWxkTrZu0gW
--WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="accessToken"

xxxxx
--WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data;name="serviceId"

localhost.deviceconnect.org
--WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="path"

/test/test.png
--WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="mimeType"

image/png
--WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="data"; filename="ic_launcher.png"
Content-Type: image/png

<binary省略>
--WebKitFormBoundaryE19zNvXGzXaLvS5C--

Webサーバ

アプリ側でWebサーバを用意して、そのURLをDevice Connect Manager経由でデバイスプラグインに渡します。
デバイスプラグインは、送られてきたURIからリソースを取得して、処理を行います。

リソース受信

Device Connect Manager経由

デバイスプラグイン側でファイルへのストリームをDevice Connect Managerに渡します。
Device Connect Managerは、自身のWebサーバのURIに変換して、アプリケーションに返却します。

Device Connect Managerとデバイスプラグイン間の通信は、Androidの場合には、ContentProvider、iOSの場合には、NSFileHandleを使用します。

Weサーバ経由

デバイスプラグイン側でWebサーバを起動して、そのURIをアプリケーションに返却します。

デバイスプラグイン

Device Connect Managerと連携して周辺機器を操作、および、イベントを送信するアプリケーションになります。

デバイスプラグインは、以下の機能を提供します。

  • 周辺機器との接続
  • Device Connect Managerとの接続
  • Device Connect APIの機能提供

デバイスプラグインの登録

Device Connect Managerは、デバイスプラグインを発見するとプラグインIDを生成して、デバイスプラグインと紐付けて管理します。

プラグインIDは、デバイスプラグインのパッケージ名をMD5でハッシュした値を使用します。
アンインストールした後にインストールしても、プラグインIDは変わりません。

*iOSは、別アプリケーションを使用することはできませんので、同梱することになります。

デバイスプラグインの解除

Device Connect Managerは、デバイスプラグインがアンインストールされた時に、紐づけていたプラグインIDを削除して、管理から解除します。

*iOSは、別アプリケーションを使用することはできませんので、同梱することになります。

サービス

GotAPIでは、デバイスプラグインが接続した周辺機器やWebサービスなどを総じてサービスと呼びます。

サービスの接続

デバイスプラグインは、周辺機器と接続を行い、接続した機器にIDを生成し、サービスとして管理します。
各デバイスプラグインの中で、ユニークになるようにIDを生成します。
このIDをサービスIDとします。

サービスの探索

デバイスプラグインは、Device Connect ManagerからService Discoveryの要求が行われた時に管理しているサービスの一覧を返却します。

Device Connect Managerは、各デバイスプラグインから取得したサービス一覧をまとめて、アプリケーションに返却します。
また、返却する時に各デバイスプラグインのサービスに、プラグインIDを付加します。

アプリケーションに返却されるサービスIDは以下のようになります。

サービスID(アプリケーションに返却される) = プラグインID + サービスID(プラグイン)

サービスへのリクエスト配送

アプリケーションは、Service Discoveryで取得したサービスIDを指定してDevice Connect Managerにリクエストを送信します。

Device Connect Managerは、送られてきたリクエストからサービスIDを取得し、配送先のプラグインを見つけます。

配送先のプラグインが存在していた場合は、サービスIDからプラグインIDを削除したサービスID(プラグイン)をリクエストに設定して、デバイスプラグインに配送します。

デバイスプラグインは、送られてきたリクエストからサービスIDを取得して、各デバイスの操作を行います。

アプリケーション開発者は、サービスIDの中は気にする必要はなく、取得したサービスIDに対して命令を送信することでデバイスを操作することができます。

また、デバイスプラグイン開発者もデバイスプラグイン内で定義したサービスIDでリクエストが送られてきますので、途中のサービスIDの変換は気にする必要はありません。

Clone this wiki locally