🌟

WebFOCUSで外部のREST APIを利用する

2025/01/16に公開

「WebFOCUSでRESTを使う」とは

「WebFOCUSでRESTを使う」という場合、以下の3つの内容のいずれかが該当する。

  1. WebFOCUSのRESTアダプタを活用する
    • 利用するデータは外部Webサービスが提供するREST APIから取得できるJSONまたはXMLデータ
    • オンラインで接続可能なすべてのREST APIサービスが対象となる。
    • 外部REST APIにパラメータを渡し、レスポンスを得る。
  2. WebFOCUSのRESTful APIを活用する
    • 利用するデータはWebFOCUSの資産
    • node.jsやpython、またはWebページ内のJavaScriptから利用可能。
    • 外部アプリケーションからWebFOCUS RESTful APIにパラメータを渡し、レスポンスを得る。
  3. WebFOCUSのWebFOCUS Clientアダプタを活用する
    • 利用するデータはWebFOCUSの資産
    • WebFOCUSのプロシジャ内で利用可能
    • TABLEリクエストにより、WebFOCUS RESTful APIにパラメータを渡し、レスポンスをレポートとして出力する。

1.WebFOCUSのRESTアダプタを活用する

サンプルリクエストについて

  • e-StatのREST APIを利用して統計データを取得する
  • 外部のREST APIを利用するためにRESTアダプタを追加する
  • REST APIとHTTPリクエストを送受信するためのシノニムを作成する
  • WebFOCUSリクエストでレポートを出力する

手順

  1. e-StatのREST APIの仕様を理解する
  2. WebFOCUSのRESTアダプタを追加する。
  3. シノニムを作成する
  4. WebFOCUSでレポートを出力する

1.e-StatのREST APIの仕様を理解する

統計ダッシュボードのWEBAPIについて解説ページを参考に仕様を理解する。

https://dashboard.e-stat.go.jp/static/api

今回は「統計メタ情報(系列)取得」機能を利用する

ベースURLとリクエストパラメータの情報が必要になるので詳細な仕様を確認する。

https://dashboard.e-stat.go.jp/static/etc/API_パラメータ_レスポンス_1_メタ(系列).pdf

RESTアダプタ追加

  • 利用する情報
    • ベースURL: JSONで取得するのでhttps://dashboard.e-stat.go.jp/api/1.0/Json/getIndicatorInfo?
    • リクエストパラメータ: LangとCategoryを指定する
      • Lang: JP日本語を設定
      • Category: 0102気象を設定

2.WebFOCUSのRESTアダプタを追加する。

[データの取得>サードパーティアダプタ]からRESTを選択し追加する
RESTアダプタ追加

  • 接続名: RESTESTAT任意の名称
  • ベースURL: https://dashboard.e-stat.go.jp/api/1.0/Json/
  • セキュリティ: なしe-Statは認証無しで利用可能
  • プロファイルの選択: edasprofグローバルプロファイルに設定

3.シノニムを作成する

データに接続からRESTを選択

RESTアダプタ追加

接続の構成からRESTESTATを選択
RESTアダプタ追加

  • シノニム作成オプション
    • REST処理の選択: レポートの取得
    • サービスURL拡張子: getIndicatorInfo
    • サービスURLパラメータ:Lang=JP&Category=0102
    • カスタムヘッダ:なし
    • フィールド名の確認:✅チェックあり
    • ユニークフィールドにする:✅チェックあり
    • アプリケーション:baseapp任意のアプリケーション
    • シノニム名:RESTESTAT_getIndicatorInfo

4.WebFOCUSでレポートを出力する

WebAPIマニュアルを参考に以下の情報を出力する

  • 7行目のパラメータに指定したLang
  • 9行目のパラメータに指定したCategory
  • 25行目の系列名
  • 26行目の系列コード

RESTアダプタ追加

WebFOCUSの出力
RESTアダプタ追加

シノニムを確認する

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としてJP0102が指定されている。

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アダプタのシノニムを作成すれば、外部のREST APIをTABLEリクエストで利用できる。
  • TABLEリクエストでHTTPパラメータを指定したい場合、シノニム作成時にリクエストパラメータとしてデフォルトの値を設定しておく必要がある。

Discussion