9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

APEX超入門チュートリアル Part 3 - センサーデバイスからデータを受け取るIoTバックエンドを構築する

Last updated at Posted at 2016-07-19

Raspberry Piなどの各種センサーデバイスから送信される情報を受け取るIoTバックエンドを構築します。今回は土壌湿度情報を保存すると想定して進めていきます。

表を作成する

HATAKE_LOGという名前の表を作成します。今回必要となる表はこれだけです。この表にセンサーデバイスから送信される情報を順次保存していきます。

SQLワークショップ > オブジェクト・ブラウザを開き、画面右上の+プルダウンメニューから表を選択します。
スクリーンショット_2016-06-02_9_04_37.png

スクリーンショット_2016-06-02_9_06_26.png

スクリーンショット 2016-06-02 13.53.57.png

下記のように入力して次ボタンをクリックします。

表名 : HATAKE_LOG

列名 タイプ 精度 スケール
ID NUMBER
TIMESTAMP NUMBER
MOISTURE NUMBER

主キー

  • 新しい順序から移入
  • 主キー制約名:HATAKE_LOG_PK
  • 主キー:ID(Number)
  • 順序名:HATAKE_LOG_SEQ

外部キー

デフォルトのまま次ボタンをクリックします。

制約

デフォルトのまま次ボタンをクリックします。

確認

表を作成ボタンをクリックします。


これで表が作成されました。

REST APIを作成する

次にこのデータベースにアクセスするためのREST APIを作成します。
まず最初におこなうのがRESTfulモジュールの作成です。

RESTfulモジュールは複数のREST APIをまとめておくための入れ物です。通常はアプリ一つにつき一つのRESTfulモジュールを作るようなイメージです。まずこの入れ物を作成します。

SQLワークショップ > RESTfulサービス > 作成ボタンをクリックします。
スクリーンショット_2016-06-02_9_31_38.png
スクリーンショット_2016-06-02_9_34_01.png
スクリーンショット 2016-06-02 13.59.43.png

下記のように入力してモジュールの作成ボタンをクリックします。(下記にない項目はデフォルトのまま)

  • 名前 : 畑
  • URI接頭辞 : hatake/

次にテンプレートを作成します。これはAPIのURIを設定するためのものです。

左サイドバーの+テンプレートの作成をクリックします。
スクリーンショット_2016-07-06_13_59_19.png
スクリーンショット 2016-07-06 14.06.24.png

下記のように入力して作成ボタンをクリックします。(下記にない項目はデフォルトのまま)

  • URIテンプレート : log

次にハンドラーを作成します。ハンドラはテンプレート毎に設定され、そのAPIにアクセスがあった場合に実行するアクションを設定します。

左サイドバーで作成したテンプレート配下の+ハンドラの作成をクリックします。
スクリーンショット_2016-07-06_14_00_27.png
スクリーンショット 2016-07-06 14.04.07.png

下記のように入力して作成ボタンをクリックします。(下記にない項目はデフォルトのまま)

  • 方法 : POST
  • ソース・タイプ : PL/SQL
  • セキュア・アクセスが必要:いいえ
begin
    insert into hatake_log (timestamp, moisture) values (:timestamp, :moisture);
end;

これで土壌湿度情報を受け取るためのREST APIが作成されました。

あともう一つ、保存したデータを取得するAPIも作っておきましょう。

左サイドバーの+テンプレートの作成をクリックします。
スクリーンショット_2016-07-06_15_59_13.png
スクリーンショット 2016-07-06 15.59.23.png

下記のように入力して作成ボタンをクリックします。(下記にない項目はデフォルトのまま)

  • URIテンプレート : log/list

ハンドラーを作成します。左サイドバーで作成したテンプレート配下の+ハンドラの作成をクリックします。
スクリーンショット_2016-07-06_15_59_42.png
スクリーンショット 2016-07-06 15.59.52.png

下記のように入力して作成ボタンをクリックします。(下記にない項目はデフォルトのまま)

  • 方法 : GET
  • ソース・タイプ : 問い合わせ
  • 書式 : JSON
  • セキュア・アクセスが必要 : いいえ
select * from hatake_log

それでは早速テストしてみましょう。REST APIのテストにはapigeeを利用します。
アカウントをお持ちでないかたはまずサインアップをおこなってください。

アカウントを作成したらログインし、API Consoleを起動します。
スクリーンショット_2016-07-06_14_24_22.png

apigeeは様々な有名どころのAPIアクセスをライブラリとして提供しています。
今回は今作成したばかりのカスタムREST APIにアクセスしますのでOhter (generic)を選択します。
スクリーンショット_2016-07-06_14_27_06.png
スクリーンショット 2016-07-06 14.29.13.png

このコンソールではHTTPメソッドとURL、それにHTTP HeaderとBodyを設定することができ、Sendボタンを押すことでリクエスト(APIコール)が投げられます。

土壌湿度を保存するAPIはHTTPメソッドがPOST、URLがhttps://apex.oracle.com/pls/apex/あなたのワークスペース名/hatake/log となり、Bodyに送信したいデータ(timestampとmoisture)を含めます。

このリクエストを送信するには、下記のように設定してSendボタンをクリックします。

Parameter Value
timestamp 1499886000
moisture 50

成功すると右下のRequest欄にHTTP1.1 200 OKが表示さます。
スクリーンショット 2016-07-06 17.53.26.png

そして実際にデータが保存されているかどうか確認するために、データを取得するAPIもコールしてみましょう。下記のように設定を変更し、Sendボタンをクリックします。

こちらも成功すると右下のRequest欄にHTTP1.1 200 OKが表示され、その出力をみていくとJSON形式で保存されたデータを取得できているはずです。
スクリーンショット 2016-07-06 17.52.38.png

次のステップ

今回学んだ知識をベースに、今後本格的なサービスを開発するにあたり、下記のようなトピックを学んでください。

  • 複数のデータを一度のAPIコールで保存する。
  • ハンドラーで必要となるPL/SQLについて。
  • APIを保護する。(認証・認可)。
  • Database as a Serviceで独自SSL証明書を使ってHTTPS通信を有効化する。
  • データを可視化するチャートなどのUIの開発。

知っておくと便利なAutoRESTについて

スキーマサービスやapex.oracle.comではサポートされていませんが、Database as a ServiceではAutoRESTが利用できます。AutoRESTとは、REST APIを自分でわざわざ作成せずとも、テーブルに対する基本的な操作をREST APIとして利用できるようにする機能です。

例えば、とあるテーブルに1レコードを挿入する、1レコード取得する、検索結果を取得する、レコードを更新する・削除する、複数レコードをロードするといった処理がAutoRESTで実現できます。

設定はスキーマごとに有効化をおこなうだけです。詳しくはこちらの記事で紹介されています。

9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?