SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

InterSystems IRISでシンプルに開発するIoTアプリケーション(AD)

IRISのインターオペラビリティ機能を使いこなそう(後編)~OpenAPIを利用したRESTサーバの構築

InterSystems IRISでシンプルに開発するIoTアプリケーション 第6回

  • このエントリーをはてなブックマークに追加

REST APIの作成(1)

 この連載の最後に、IRISが保持する車の最新情報を取得するためのREST APIを作成します。

 IRISでREST APIを作成する方法にはいくつかありますが、今回は、OpenAPI 2.0を利用する方法を紹介します。実際に試す方は、REST APIを呼び出せるツールを用意してください。この連載では、Postmanを使用します。

REST APIの生成と実装

 OpenAPIは、REST APIのインターフェースを記述するための仕様で、OpenAPI Initiativeにより管理されています。IRISは、OpenAPI 2.0に準拠した仕様をもとに、REST APIを作成することができます。

 次に示すのは、OpenAPIで記述されたインターフェース定義の一部です。DriveDemo/IRIS-MQTT/projects/RestAPI/spec.jsonというJSONファイルがあるので確認してください。

{
  "swagger":"2.0",
  "info":{
    "version":"1.0.0",
    "title":"Drive Demo",
    "description":"Drive Demo: REST APIの定義",
    "termsOfService":"http://swagger.io/terms/",
    "contact":{
      "name":"InterSystems Japan"
    },
    "license":{
      "name":"MIT"
    }
  },
  "basePath":"/csp/DriveDemo",
  "schemes":[
    "http"
  ],
  "consumes":[
    "application/json"
  ],
  "produces":[
    "application/json"
  ],
  "paths":{
    "/cars":{
      "get":{
        "description":"すべての車の情報を返す",
        "operationId":"getAllCars",
        "produces":[
          "application/json"
        ],
        "responses":{
          "200":{
            "description":"車のリスト",
            "schema":{
              "type":"array",
              "items":{
                "$ref":"#/definitions/Car"
              }
            }
          }
        }
      }
    }
  },
  "definitions":{
    "Car":{
      "type":"object",
      "required":[
        "carid",
        "relativetm",
        "longitude",
        "latitude",
        "azimuth",
        "speed",
        "enginerpm",
        "accelpos",
        "brakesw"
      ],
      "properties":{
        "carid":{
          "type":"string"
        },
  …後略…
}

 いくつか重要な項目を説明します。

  • “basePath” : APIのルートとなるURLのパス名です。IRISでは、後に説明するようにWebアプリケーション名としてこのパス名を使用します。
  • “paths” : インターフェースに含まれるAPIそれぞれの相対パスです。ここでは、/carsというAPIがGETメソッドを受け取るよう定義されています。また、”operationId”には、IRISが生成するメソッドの名前を指定します。

 ではPostmanでREST APIの生成を行います。Postmanを立ち上げます。次の図のように、リクエストの画面に設定を行います。

API作成リクエスト1
API作成リクエスト1
  • メソッドにはPOSTを選択します。
  • URLはhttp://localhost:52003/api/mgmnt/v2/drive/DriveDemoを指定します。ここで/api/mgmnt/v2がIRISのAPI作成機能のURLで、/driveはネームスペース、/DriveDemoはアプリケーション名を示します。
  • Bodyを選択し、上で示したJSONファイルの内容を貼り付けます。また、”raw”と”JSON”を選択します。
API作成リクエスト2
API作成リクエスト2
  • 上の図のように、Authorizationタブを開き、TYPEには”Basic Auth”、ユーザ名・パスワードには、SuperUser/driveuserと指定します。
API作成リクエスト3
API作成リクエスト3
  • 上の図のとおり、Headersタブを開き、”Content-Type”に” application/json; charset=utf-8”を指定します。

 次に”Send”ボタンを押します。そうすると、IRISにリクエストが送信され、REST APIの生成に成功すれば、次の図のような応答が得られます。

API作成レスポンス
API作成レスポンス

 それではVisual Studio Codeに戻って、生成されたクラスを確認してみましょう。生成されたのは、DriveDemo.implとDriveDemo.specです。次の図のように、Visual Studio Codeの左側メニューからInterSystems のロゴをクリックし、”projects”→”Classes”から2つのクラスにアクセスすることができます。

DriveDemo.specクラス
DriveDemo.specクラス

 Postmanから生成したREST APIの実装を行うには、DriveDemo.implクラスを編集します。

 DriveDemo.implクラスを開くと、IRISが生成したテンプレートが書かれており、getAllCarsメソッドの定義があります。getAllCarsメソッドの中身に次のようなコードを記述しコンパイルします。

ClassMethod getAllCars() As %DynamicObject
{
    // SQLで車の最新情報を取得し、DynamicObjectを生成する
    Set tArr = []
    Set tRS = ##class(%SQL.Statement).%ExecDirect(,"SELECT CarId, RelativeTm, Longitude, Latitude, Azimuth, Speed, EngineRPM, AccelPos, BrakeSW, aX, aY, aZ FROM DriveDemo_Data.CarLatest order by CarId")
    While tRS.%Next() {
        Do tArr.%Push({
            "carid":    (tRS.%Get("CarId")),
            "relativetm":    (tRS.%Get("RelativeTm")),
            "longitude":    (tRS.%Get("Longitude")),
            "latitude":    (tRS.%Get("Latitude")),
            "azimuth":    (tRS.%Get("Azimuth")),
            "speed":    (tRS.%Get("Speed")),
            "enginerpm":    (tRS.%Get("EngineRPM")),
            "accelpos":    (tRS.%Get("AccelPos")),
            "brakesw":    (tRS.%Get("BrakeSW")),
            "aX":    (tRS.%Get("aX")),
            "aY":    (tRS.%Get("aY")),
            "aZ":    (tRS.%Get("aZ"))
        })
    }
    Do ..%SetStatusCode(200)
    Quit tArr.%ToJSON()
}

 このメソッドでは、SELECT文でDriveDemo_Data.CarLatestを検索し、得られた結果をJSON形式に変換して返しています。

 もう1か所編集を行います。DriveDemo.specクラスを開き、

Parameter HandleCorsRequest = 1;

 のようにHandleCorsRequestパラメータに1をセットします。これは、CORS(Cross-Origin Resource Sharing)をオンにするものです。CORSとは、簡単にいうと、Webページをサービスしているサーバと異なるサーバに対してRESTリクエストを送信する機能のことです。

次のページ
REST APIの作成(2)

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
InterSystems IRISでシンプルに開発するIoTアプリケーション連載記事一覧

もっと読む

この記事の著者

堀田 稔(インターシステムズジャパン)(ホリタ ミノル)

SEマネージャー。1992年大阪大学基礎工学部情報工学科卒。同年日本ディジタルイクイップメント(株)入社。電気通信など様々な業界向けプロジェクトにシステムエンジニアとして携わる。1996年InterSystems Data Platform製品の日本語版開発プロジェクトに従事し、同製品の販売・サポー...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/12286 2020/05/26 12:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング