読者です 読者をやめる 読者になる 読者になる

Xojo日本語ブログ

マルチプラットフォーム対応アプリが開発できるXojoのブログです。

デスクトップ用Xojoアプリの中でHTTPサーバを立てる

デスクトップアプリケーションの中には他のアプリケーションから操作したいと思うものがあります。よくあるケースとしてはExcelAccessなどのオフィスツールです。そうしたソフトウェアではAPIアプリケーションプログラミングインタフェース)を提供しています。しかしこの手のAPIはアプリケーションの実行環境が大きく影響します。例えばWindows上で動いているソフトウェアをmacOSLinuxからは操作できません。

そこで紹介したいのがデスクトップアプリの中にWeb APIサーバを立てるという方法です。Web APIは先ほどのAPIと似ていますが、HTTP/HTTPSを使っているのが特徴です。つまりWebブラウザやCUI、他のプログラミング言語とも連携がとても簡単にできるようになります。

今回はそんなXojoアプリの中でHTTPサーバを立てる方法を紹介します。

関連ライブラリをインポート

実際の作業としてはXojo向けHTTP機能を提供するbeardedio/XojoHTTPServer: A http server class for Xojo / RealBasicを自分のXojoプロジェクトにインポートするところからはじまります。

プロパティを用意

2つプロパティを用意します。これはAppでもウィンドウでも良さそうです。

  • Socket as MyHTTPServerSocket
  • RequesterIndex as MyRequesterIndex

コーディング

今回はウィンドウのOpenイベントに対して実装します。

RequesterIndex = New MyRequesterIndex
Socket = New MyHTTPServerSocket
Socket.AddURL("/data.json", RequesterIndex)
Socket.Port = 8080
Socket.Listen

これで分かる点として 8080番ポートで入力を待ち受けています。 http://localhost:8080/data.json にアクセスすると RequesterIndex が呼び出されます。

実際にコールされるのは MyRequesterIndex.HandleRequest になります。例えば次のように実装します。

dim Person as new JSONItem
Dim items As New JSONItem
dim i as integer
For i = 0 to 50
  items.Append(i)
Next

Person.Value("values") = items

Context.headers.Value("Content-Type") = "application/json"
Context.Print(Person.toString())
Context.Print(EndOfLine)

Context.StatusCode = MyHTTPServerModule.kstatusok

Exception err
  Raise err

アクセスする

では実際にアクセスしてみます。

$ curl http://localhost:8080/data.json
{"values":[0,1,2,...,49,50]}

このようにJSONデータが返ってきました。このデータはアプリケーション内のデータを返せますので、保存したデータなどを他のアプリケーションに渡すのにも使えるでしょう。XojoであればHTTPSocketを使ってデータを取得し、JSONをパースすればアプリケーション内部で利用できます。


かつてのAPIというと用意する側も利用する側も手間暇かかるものでしたが、Web APIであればとても簡単に実現できます。アプリケーション同士の連携に役立ててください。