🌟
WebFOCUSで外部のREST APIを利用する
「WebFOCUSでRESTを使う」とは
「WebFOCUSでRESTを使う」という場合、以下の3つの内容のいずれかが該当する。
- WebFOCUSのRESTアダプタを活用する
- 利用するデータは外部Webサービスが提供するREST APIから取得できるJSONまたはXMLデータ
- オンラインで接続可能なすべてのREST APIサービスが対象となる。
- 外部REST APIにパラメータを渡し、レスポンスを得る。
- WebFOCUSのRESTful APIを活用する
- 利用するデータはWebFOCUSの資産
- node.jsやpython、またはWebページ内のJavaScriptから利用可能。
- 外部アプリケーションからWebFOCUS RESTful APIにパラメータを渡し、レスポンスを得る。
- WebFOCUSのWebFOCUS Clientアダプタを活用する
- 利用するデータはWebFOCUSの資産
- WebFOCUSのプロシジャ内で利用可能
- TABLEリクエストにより、WebFOCUS RESTful APIにパラメータを渡し、レスポンスをレポートとして出力する。
1.WebFOCUSのRESTアダプタを活用する
サンプルリクエストについて
- e-StatのREST APIを利用して統計データを取得する
- 外部のREST APIを利用するためにRESTアダプタを追加する
- REST APIとHTTPリクエストを送受信するためのシノニムを作成する
- WebFOCUSリクエストでレポートを出力する
手順
- e-StatのREST APIの仕様を理解する
- WebFOCUSのRESTアダプタを追加する。
- シノニムを作成する
- WebFOCUSでレポートを出力する
1.e-StatのREST APIの仕様を理解する
統計ダッシュボードのWEBAPIについて解説ページを参考に仕様を理解する。
今回は「統計メタ情報(系列)取得」機能を利用する
ベースURLとリクエストパラメータの情報が必要になるので詳細な仕様を確認する。
- 利用する情報
- ベースURL: JSONで取得するので
https://dashboard.e-stat.go.jp/api/1.0/Json/getIndicatorInfo?
- リクエストパラメータ: LangとCategoryを指定する
- Lang:
JP
日本語を設定 - Category:
0102
気象を設定
- Lang:
- ベースURL: JSONで取得するので
2.WebFOCUSのRESTアダプタを追加する。
[データの取得>サードパーティアダプタ]からRESTを選択し追加する
- 接続名:
RESTESTAT
任意の名称 - ベースURL:
https://dashboard.e-stat.go.jp/api/1.0/Json/
- セキュリティ:
なし
e-Statは認証無しで利用可能 - プロファイルの選択:
edasprof
グローバルプロファイルに設定
3.シノニムを作成する
データに接続からRESTを選択
接続の構成からRESTESTATを選択
- シノニム作成オプション
- REST処理の選択:
レポートの取得
- サービスURL拡張子:
getIndicatorInfo
- サービスURLパラメータ:
Lang=JP&Category=0102
- カスタムヘッダ:
なし
- フィールド名の確認:✅チェックあり
- ユニークフィールドにする:✅チェックあり
- アプリケーション:
baseapp
任意のアプリケーション - シノニム名:
RESTESTAT_getIndicatorInfo
- REST処理の選択:
4.WebFOCUSでレポートを出力する
WebAPIマニュアルを参考に以下の情報を出力する
- 7行目のパラメータに指定したLang
- 9行目のパラメータに指定したCategory
- 25行目の系列名
- 26行目の系列コード
WebFOCUSの出力
シノニムを確認する
restestat_getindicatorinfo.acx
SEGNAME=M6ILO,
CONNECTION=RESTESTAT,
OBJECT=getIndicatorInfo,
HEADER=HEADER,
SERVICETYPE=REST,
HTTPMETHOD=GET,
RESTRESPONSE=JSON, $
restestat_getindicatorinfo.mas
FILENAME=M6ILO, SUFFIX=REST , $
SEGMENT=M6ILO, SEGTYPE=S0, $
GROUP=HEADER, ALIAS=Header, ELEMENTS=2, $
FIELDNAME=LANG, ALIAS=Lang, USAGE=A30, ACTUAL=A30, ACCESS_PROPERTY=(NEED_VALUE),
XDEFAULT='JP', $
FIELDNAME=CATEGORY, ALIAS=Category, USAGE=A30, ACTUAL=A30, ACCESS_PROPERTY=(NEED_VALUE),
XDEFAULT='0102', $
FIELDNAME=__RESPONSE, USAGE=TX80L, ACTUAL=TX, ACCESS_PROPERTY=(INTERNAL), $
SEGMENT=RESPONSE, SEGTYPE=S0, SEGSUF=JSON , PARENT=M6ILO, POSITION=__RESPONSE, $
FIELDNAME=GET_META_INDICATOR_INF, ALIAS=GET_META_INDICATOR_INF, USAGE=A1, ACTUAL=A1, ACCESS_PROPERTY=(INTERNAL),
PROPERTY=ELEMENT, $
FIELDNAME=RESULT, ALIAS=RESULT, USAGE=A1, ACTUAL=A1, ACCESS_PROPERTY=(INTERNAL),
REFERENCE=GET_META_INDICATOR_INF, PROPERTY=ELEMENT, $
FIELDNAME=STATUS, ALIAS=status, USAGE=P32, ACTUAL=A32,
REFERENCE=RESULT, PROPERTY=ELEMENT, $
FIELDNAME=ERRORMSG, ALIAS=errorMsg, USAGE=A55, ACTUAL=A55,
REFERENCE=RESULT, PROPERTY=ELEMENT, $
FIELDNAME=DATE1, ALIAS=date, USAGE=A55, ACTUAL=A55,
REFERENCE=RESULT, PROPERTY=ELEMENT, $
FIELDNAME=PARAMETER, ALIAS=PARAMETER, USAGE=A1, ACTUAL=A1, ACCESS_PROPERTY=(INTERNAL),
REFERENCE=GET_META_INDICATOR_INF, PROPERTY=ELEMENT, $
FIELDNAME=LANG1, ALIAS=lang, USAGE=A55, ACTUAL=A55,
REFERENCE=PARAMETER, PROPERTY=ELEMENT, $
FIELDNAME=CATEGORY1, ALIAS=Category, USAGE=P32, ACTUAL=A32,
REFERENCE=PARAMETER, PROPERTY=ELEMENT, $
FIELDNAME=METADATA_INF, ALIAS=METADATA_INF, USAGE=A1, ACTUAL=A1, ACCESS_PROPERTY=(INTERNAL),
REFERENCE=GET_META_INDICATOR_INF, PROPERTY=ELEMENT, $
FIELDNAME=CLASS_INF, ALIAS=CLASS_INF, USAGE=A1, ACTUAL=A1, ACCESS_PROPERTY=(INTERNAL),
REFERENCE=METADATA_INF, PROPERTY=ELEMENT, $
SEGMENT=CLASS_OBJ, SEGTYPE=S0, PARENT=RESPONSE, $
FIELDNAME=CLASS_OBJ, ALIAS=CLASS_OBJ, USAGE=A1, ACTUAL=A1, ACCESS_PROPERTY=(INTERNAL),
REFERENCE=CLASS_INF, PROPERTY=ELEMENT, $
FIELDNAME=@NAME, ALIAS=@name, USAGE=A55, ACTUAL=A55,
REFERENCE=CLASS_OBJ, PROPERTY=ELEMENT, $
FIELDNAME=@CODE, ALIAS=@code, USAGE=P32, ACTUAL=A32,
REFERENCE=CLASS_OBJ, PROPERTY=ELEMENT, $
FIELDNAME=DETAILS, ALIAS=details, USAGE=A1, ACTUAL=A1, ACCESS_PROPERTY=(INTERNAL),
REFERENCE=CLASS_OBJ, PROPERTY=ELEMENT, $
SEGMENT=DETAIL, SEGTYPE=S0, PARENT=CLASS_OBJ, $
FIELDNAME=DETAIL, ALIAS=detail, USAGE=A1, ACTUAL=A1, ACCESS_PROPERTY=(INTERNAL),
REFERENCE=DETAILS, PROPERTY=ELEMENT, $
FIELDNAME=@CODE1, ALIAS=@code, USAGE=P32, ACTUAL=A32,
REFERENCE=DETAIL, PROPERTY=ELEMENT, $
FIELDNAME=@NAME1, ALIAS=@name, USAGE=A55, ACTUAL=A55,
REFERENCE=DETAIL, PROPERTY=ELEMENT, $
FIELDNAME=_, ALIAS='$', USAGE=STRING, ACTUAL=STRING,
REFERENCE=DETAIL, PROPERTY=ELEMENT, $
SEGMENT=ANNOTATIONS, SEGTYPE=S0, PARENT=CLASS_OBJ, $
FIELDNAME=ANNOTATIONS, ALIAS=annotations, USAGE=A1, ACTUAL=A1, ACCESS_PROPERTY=(INTERNAL),
REFERENCE=CLASS_OBJ, PROPERTY=ELEMENT, $
FIELDNAME=@CYCLE, ALIAS=@cycle, USAGE=P32, ACTUAL=A32,
REFERENCE=ANNOTATIONS, PROPERTY=ELEMENT, $
FIELDNAME=@REGIONALRANK, ALIAS=@regionalRank, USAGE=P32, ACTUAL=A32,
REFERENCE=ANNOTATIONS, PROPERTY=ELEMENT, $
FIELDNAME=@ISSEASONAL, ALIAS=@isSeasonal, USAGE=P32, ACTUAL=A32,
REFERENCE=ANNOTATIONS, PROPERTY=ELEMENT, $
FIELDNAME=@ANNOTATION, ALIAS=@annotation, USAGE=A118, ACTUAL=A118,
REFERENCE=ANNOTATIONS, PROPERTY=ELEMENT, $
SEGMENT=CLASS, SEGTYPE=S0, PARENT=CLASS_OBJ, $
FIELDNAME=CLASS, ALIAS=CLASS, USAGE=A1, ACTUAL=A1, ACCESS_PROPERTY=(INTERNAL),
REFERENCE=CLASS_OBJ, PROPERTY=ELEMENT, $
FIELDNAME=@NAME2, ALIAS=@name, USAGE=A55, ACTUAL=A55,
REFERENCE=CLASS, PROPERTY=ELEMENT, $
FIELDNAME=@FROMDATE, ALIAS=@fromDate, USAGE=A55, ACTUAL=A55,
REFERENCE=CLASS, PROPERTY=ELEMENT, $
FIELDNAME=@TODATE, ALIAS=@toDate, USAGE=A55, ACTUAL=A55,
REFERENCE=CLASS, PROPERTY=ELEMENT, $
FIELDNAME=CYCLE, ALIAS=cycle, USAGE=A1, ACTUAL=A1, ACCESS_PROPERTY=(INTERNAL),
REFERENCE=CLASS, PROPERTY=ELEMENT, $
FIELDNAME=@CODE2, ALIAS=@code, USAGE=P32, ACTUAL=A32,
REFERENCE=CYCLE, PROPERTY=ELEMENT, $
FIELDNAME=@NAME3, ALIAS=@name, USAGE=A55, ACTUAL=A55,
REFERENCE=CYCLE, PROPERTY=ELEMENT, $
FIELDNAME=REGIONALRANK, ALIAS=RegionalRank, USAGE=A1, ACTUAL=A1, ACCESS_PROPERTY=(INTERNAL),
REFERENCE=CLASS, PROPERTY=ELEMENT, $
FIELDNAME=@CODE3, ALIAS=@code, USAGE=P32, ACTUAL=A32,
REFERENCE=REGIONALRANK, PROPERTY=ELEMENT, $
FIELDNAME=@NAME4, ALIAS=@name, USAGE=A55, ACTUAL=A55,
REFERENCE=REGIONALRANK, PROPERTY=ELEMENT, $
FIELDNAME=ISSEASONAL, ALIAS=IsSeasonal, USAGE=A1, ACTUAL=A1, ACCESS_PROPERTY=(INTERNAL),
REFERENCE=CLASS, PROPERTY=ELEMENT, $
FIELDNAME=@CODE4, ALIAS=@code, USAGE=P32, ACTUAL=A32,
REFERENCE=ISSEASONAL, PROPERTY=ELEMENT, $
FIELDNAME=@NAME5, ALIAS=@name, USAGE=A55, ACTUAL=A55,
REFERENCE=ISSEASONAL, PROPERTY=ELEMENT, $
FIELDNAME=@STATNAME, ALIAS=@statName, USAGE=A55, ACTUAL=A55,
REFERENCE=CLASS, PROPERTY=ELEMENT, $
FIELDNAME=@UNIT, ALIAS=@unit, USAGE=A55, ACTUAL=A55,
REFERENCE=CLASS, PROPERTY=ELEMENT, $
FIELDNAME=@SNAME, ALIAS=@sname, USAGE=A55, ACTUAL=A55,
REFERENCE=CLASS, PROPERTY=ELEMENT, $
注目すべきは、先頭の部分。
GROUP=HEADERのエレメントとして指定したパラメータであるLangとCategoryが設定されている。
それぞれ、XDEFAULTとしてJP
と0102
が指定されている。
FILENAME=M6ILO, SUFFIX=REST , $
SEGMENT=M6ILO, SEGTYPE=S0, $
GROUP=HEADER, ALIAS=Header, ELEMENTS=2, $
FIELDNAME=LANG, ALIAS=Lang, USAGE=A30, ACTUAL=A30, ACCESS_PROPERTY=(NEED_VALUE),
XDEFAULT='JP', $
FIELDNAME=CATEGORY, ALIAS=Category, USAGE=A30, ACTUAL=A30, ACCESS_PROPERTY=(NEED_VALUE),
XDEFAULT='0102', $
FIELDNAME=__RESPONSE, USAGE=TX80L, ACTUAL=TX, ACCESS_PROPERTY=(INTERNAL), $
このHEADERグループに指定されている要素は、TABLEリクエスト実行時に、HTTPパラメータとしてREST APIに受け渡す値であり、WebFOCUSのフィルタ(WHERE)で値を指定するとデフォルト以外の値をHTTPパラメータに設定することができる。
以下のリクエストでLang=EN
英語のCategory=0201
人口情報を表示できる。
sample.fex
TABLE FILE restestat_getindicatorinfo
PRINT LANG CATEGORY @CODE @NAME
WHERE LANG EQ 'EN' AND CATEGORY EQ '0201'
END
出力結果
WebFOCUSの出力
まとめ
- RESTアダプタのシノニムを作成すれば、外部のREST APIをTABLEリクエストで利用できる。
- TABLEリクエストでHTTPパラメータを指定したい場合、シノニム作成時にリクエストパラメータとしてデフォルトの値を設定しておく必要がある。
Discussion