【Node.js】xml2jsでxmlをJSONとして扱う

nodeとxml

今回はnodeでxml形式のレスポンスを扱う方法を紹介します。

趣味で簡単なAPIを作成することはありましたが、「実際のサービス開発の時のAPI設計のベストプラクティスは何だろう?」と疑問に思ったので勉強中です。


 

この本はエンドポイントの設計、レスポンスデータの設計から公開までのチェックリストまであり、実際のサービス開発の時のAPI設計に触れることができます。

APIのレスポンスデータの形式で、xml形式を見ることはこの本の中だけで、実際に扱うことはないだろうと考えていました。

しかし、法人番号システム Web-APIを使用するにあたってxml形式のレスポンスデータを処理する必要があったので記録として残します。今回は【Node.js + Express】の組み合わせで作成したAPIで、xml形式のレスポンスデータを処理します。

法人番号システムWeb-API

まず、法人番号とは法人に対し日本の国税庁が指定する13桁の識別番号であり、法人番号システムWeb-APIはその法人番号から法人を検索するAPIです(会社名から法人番号の検索も可)。

今回は法人番号から法人名を検索できるWebAPIを作成していました。

実装中に1つ気になった点がありました。この法人番号システムWeb-APIはレスポンスデータの形式がxml形式であるということです。

xml形式とは

XML(eXtensible Markup Language)は、文章の見た目や構造を記述するためのマークアップ言語の1つです。

マークアップ言語の代表といえばHTMLですが、xmlとの違いはHTMLはWebページの装飾が目的ですが、xmlは文書中のデータをわかりやすくすることが目的であるということです。

XMLとは?IT初心者でもすぐわかるXML基礎知識 - XMLとHTML、そしてJAVAとの関係 | マニュアルの多言語対応とDX化を実現するサイバーテック
SGMLは、電子出版物や文書を効率的に活用するために1980年代に生まれましたが、実用が困難なため幅広い普及には至っていません。そこでよりカンタンに使いこなせるHTMLが生まれ、それ以上の拡張性を叶えるために生まれたのがXMLです。

express

Express - Node.js Web アプリケーション・フレームワーク

expressは、サーバーサイドのJavaScript実行環境であるNode.jsのフレームワークです。

MERNスタック(Mongo + Express + React + Nodejs)として紹介されていることが多いと感じています。私自身、MERNスタックでExpressのことは知ってたので一度試しに簡単なWebAPIを作成したいと考えていました。

全体像をつかむには以下の動画チュートリアルがおすすめです。


 

xml2js

今回はxml形式のレスポンスデータを扱うために「xml2js」というパッケージをインストールします。

またTypescriptを使用していたので「@types/xml2js」も -D でインストールします。

xml2jsを使う記事はあるのですが、console.logで出力するだけの記事が多かった印象です。ドキュメントには記載がしっかりあります。

「parseString」ではなく、「parseStringPromise」を使いました。

エラー処理はテンプレート通りに。

{explicitArray : false}とすることで、配列の乱用を防ぎます。

public static async getCompany({検索する法人番号}:string): Promise {
    try {
      const { data, status }:{data: string; status: Number} = await axios.get(
        {法人番号から法人名を検索するAPIのエンドポイント},
        {
          headers: {
            Accept: 'application/json',
          },

          params: {
            id: {申請すると取得できるAPI_KEY},
            number: {検索する法人番号},
            type: '12',
            history: '0'
          }
        },
      );

      const json: searchCompanyNumberAPI = await parseStringPromise(data,{explicitArray : false});
      console.log('response status is: ', status);

      return json;
    } catch (error) {
      if (axios.isAxiosError(error)) {
        console.error('error message: ', error.message);
        throw error;
      } else {
        console.error('unexpected error: ', error);
        throw error;
      }
    }

 

まとめ

今回は【Node.js + Express】の組み合わせで作成したAPIで、法人番号システム Web-APIにおけるxml形式のレスポンスデータを処理しました。ドキュメントを読み込む大事さを改めて感じました。

コメント

タイトルとURLをコピーしました