今回は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は文書中のデータをわかりやすくすることが目的であるということです。
express
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形式のレスポンスデータを処理しました。ドキュメントを読み込む大事さを改めて感じました。
コメント