記事
· 2021年6月1日 6m read

REST/JSON の簡単なサンプルご紹介

これは InterSystems FAQ サイトの記事です。

InterSystems 製品を利用した REST/JSON の操作方法を、簡単なサンプルを利用して解説します。

サンプルでは、REST クライアント、HTML、ターミナルからデータ(JSON)を送信し、サーバ(InterSystems製品)で JSON 形式のデータを返す REST ディスパッチクラスを使った簡単な流れになっています。

サンプルは、https://github.com/Intersystems-jp/FAQ-REST-SimpleSample からダウンロードいただけます。

 

サンプルの利用手順

RESTディスパッチクラスとサンプルHTMLファイルが含まれています


 

(1) サンプルファイル(XML)のインポート

 

管理ポータルからインポートします(スタジオを利用されている場合は、スタジオでもインポートできます)。

管理ポータルは http://localhost:52773/csp/sys/UtilHome.csp でアクセスできます。

※ ポート番号はお使いの環境に合わせて変更してください。

管理ポータルにアクセスできたら以下メニューでインポートを行ってください。

システムエクスプローラ > クラス > ネームスペース選択 > インポートボタンクリック > サンプルファイルを選択してインポート

メモ:インポートファイルを選択すると、インポートアイテムが表示されます(下図)。

クラス定義(User.REST)とHTMLファイル(sampleJSON.html)がインポートされます。

 

 

(2) ウェブアプリケーションパスの設定

 

(1) でインポートしたクラス定義(User.REST)を REST ディスパッチクラスに指定したウェブアプリケーションパスを定義します。

管理ポータルを開き、以下メニューにアクセスします。

システム管理 > セキュリティ > ウェブ・アプリケーション > 「新しいウェブ・アプリケーションの作成」をクリックし、以下の図の設定を行ってください。

(サンプルでは、/simple を REST のベースパスとしています)

  • ネームスペースはサンプルをインポートしたネームスペースを指定してください。
  • ディスパッチクラス名には、 (1)でインポートした User.REST を指定します。大文字小文字を区別します。記入時ご注意ください。
  • 「許可された認証方法」は、「パスワード」を設定します。アクセス時、ユーザ名とパスワードの入力欄が出てきたらユーザ名:_system、パスワードは SYS(または設定したパスワード)を記入してログインします。

メモ:管理ポータルアクセス時にユーザ名、パスワードの入力欄が出ないアクセス(認証なしアクセス)では、デフォルト設定としてユーザ:_system に対するパスワードが SYS(大文字)で設定されています。サンプルテスト時ご利用ください。

 

 

(3) 実行

 

(2) で作成したRESTディスパッチクラスを起動するためのベースパス(/simple)を利用してテストできます。

REST ディスパッチクラスには UrlMap という定義があり、ベースパスのあとに指定したパスに合わせて、どのメソッドが実行されるか定義されています。

XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
{
<Routes>
<Route Url="/req1" Method="GET" Call="req1"/>
<Route Url="/req2" Method="GET" Call="req2"/>
</Routes>
}

/simple/req1 を指定すると、以下のメソッドが実行されます。

ClassMethod req1() As %Status
{
	set name1=%request.Get("NAME1")
	set name2=%request.Get("NAME2")
	set age=%request.Get("AGE")

	set tdobject = {}
	set tdobject.name=name1_" "_name2
	set tdobject.age=age
	write tdobject.%ToJSON()
	    
    quit $$$OK
}

【メモ】

HTTP 応答の Content-Type ヘッダの設定は、REST ディスパッチクラスのクラスパラメータ CONTENTTYPE に "application/json" 、charset の指定は、クラスパラメータ CHARSET に "utf-8" を設定しているため、クラスメソッド内で指定する必要はありません。
また、今回の例にはありませんが、メッセージボディの情報をクラスパラメータ CHARSET で自動的に変換させたい場合は、クラスパラメータ CONVERTINPUTSTREAM に 1 を設定します(設定例は以下例文をご参照ください)。

Parameter CONTENTTYPE = "application/json";

Parameter CHARSET = "utf-8";

Parameter CONVERTINPUTSTREAM = 1;

 

以下 URL を利用して、/simple/req1 のテストが行えます(クエリ文字列に指定した内容が JSON として返送されます)。

http://localhost:52773/simple/req1?NAME1=Yamada&NAME2=Taro&AGE=20

※ ポート番号はお使いの環境に合わせて変更してください。

{"name":"Yamada Taro","age":"20"}

サンプル HTML http://localhost:52773/csp/user/sampleJSON.html を利用してテストする場合は、Pushボタンをクリックすると、HTMLファイル内で設定したクエリ文字列を GET 要求で送信し、RESTディスパッチクラスで加工した文字列が JSON として返送されます(ポップアップで表示されます)。

以下、Pushボタン押下時の JavaScript です。

function go() {
  var url="/simple/req1";
  var params = {"NAME1" : "山田", "NAME2":"太郎","AGE":20};
  var queryparams= new URLSearchParams(params);
  url=url+"?"+ queryparams
  	fetch(url,{
	  headers:{"Accept":"application/json"},
	}
  	).then(function(Response) {
          console.log("status=" + Response.status);
          return Response.json();
      }).then(function(json) {
        alert("取得結果=" +JSON.stringify(json));
      });
 }

ポップアップに表示されるJSONは以下の通りです。

取得結果={"name":"山田 太郎","age":"20"}

 

ターミナルで実行する場合は以下のように %Net.HttpRequest クラスを利用します。

set req=##class(%Net.HttpRequest).%New()
set req.Server="localhost"
set req.Port=52773  // ポート番号は環境に合わせて変更してください
set base64=$system.Encryption.Base64Encode("_system:SYS")
do req.SetHeader("Authorization","Basic "_base64)
do req.SetParam("NAME1", "Yamada")
do req.SetParam("NAME2", "Taro")
do req.SetParam("AGE", "20")
set sts=req.Get("/simple/req1")

set ans=req.HttpResponse.Data.Read()
write ans

 

 


関連するFAQトピックもご参照ください。

 

関連する記事もご参照ください。

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください