- Published on
Node.js + axios で XMLのリクエストとレスポンスを簡単にする
はじめに
リリースから随分経っているサービスののAPIを叩くときにXMLのときがありますよね?
最近の主流はjsonなので、使ったことなかったり解析するのが大変ってことありませんか?
axiosにある工夫をすればリクエストとレスポンスを自動でjsonっぽくしてくれます。
環境
- node 14.17.0
- axios 0.24.0
- fast-xml-parser 4.0.3
本題
まず、axiosとfast-xml-parserをそれぞれインストール
npm i axios fast-xml-parser
次に、各モジュールのセットアップ
各それぞれの処理の説明は、コメントに記載
import axios from 'axios';import { XMLParser, XMLBuilder } from 'fast-xml-parser';
const parser = new XMLParser({ ignoreAttributes: false, // attributeが自動で削除される設定になっているのでオフに numberParseOptions: { // 数字の場合、0が消えてしまうので設定追加 leadingZeros: false, hex: false, },});
const builder = new XMLBuilder({ ignoreAttributes: false, // attributeが自動で削除される設定になっているのでオフに format: true, // きれいにフォーマット});
this.axios = axios.create({ baseURL: 'https://exmaple.com', // ベースになるURL responseType: 'document', headers: { 'Content-Type': 'text/xml' }, // リクエストがXMLだと示す transformRequest: [ // リクエスト前に処理を挟む (data) => { const xml = builder.build(data); // axiosにデータとして渡したものをXMLに変換 return xml.toString(); }, ], transformResponse: [ // レスポンス後に処理を挟む (data) => { const obj = parser.parse(data); // レスポンスをオブジェクトに変換 return obj; }, ],});
まとめ
今回のいちばん重要な部分は、transformRequest
と transformResponse
でそれぞれリクエストとレスポンスの間に処理を挟むことができる。
この部分を改造すれば、たとえXMLでなくても同じ感じに処理できる。
参考までに〜