Web APIを開発することは可能ですか?
要するにhttpリクエストを受けて、JSONやXMLでレスポンスできるような機能はありますか?
-
Puさん、こんにちは。
nextはVueのnuxtと名前が似てますが、Reactのフレームワークです。
vue.jsも直感的で楽しいですよね。
-
神楽彪さん、こんにちはPuです。
失礼しました('_')。nuxtの仲間が増えたのかと思い喜んでしまいました。vue3が好きなので(^^)/
でわ~でわ~ -
神楽彪さん、
> ただ、論理値がtrueでほしいのにTrueときたり、文字に書式分のスペースが入ったり、
> と使い勝手が悪い状態です。値をいったん変数経由で渡すのでは面倒でしょうか?
-
神楽彪さん、
今、テストしてみましたら、「文字に書式分のスペースが入ったり」という現象は、私のところでは起きないですよ。
-
tanda さん
tandaさんはMagic xpa上でどのような方法でjson形式のレスポンスを実装しているのでしょうか?
私が分かっている方法としては、Blob型の変数(例えば testという変数)にDataViewToJsonで値をセットし、マージ形式のファイルで<!$MG_test>と記載して出力すれば、論理やスペースの問題は解決しました。
-
このtestという変数をBlob2Reqでレスポンスする方法も試してみましたが、不具合なのかjsonにnullがたくさん埋め込まれた状態になってしまいました。
-
神楽彪さん、
私の場合、特殊なことは何もしていないですよ。オーソドックスにタグテーブルで紐付けを行い、普通にバッチタスクでマージしているだけです。関数も変数も使用していないです。ただし、Shift-JISのままでは文字化けを起こしますので、UTF-8で出力しています。
ちなみに、これからはマージもWebClientも、ブラウザを使用するアプリはすべてUTF-8で統一したほうがいいと思っています。いつまでもShift-JISにこだわっていると、インターネット社会では通用しなくなると思います。macOSやiOSやAndroidはすでに全てUTF-8で統一されているのに、です。
-
tanda さん
何かやりかたが異なるとは思いますが、私はそのやり方だとスペースが入ってしまいましたね。
なんにせよ、いったんはDataViewToJsonを使っていきたいと思います。
-
神楽彪さん、
私がテストしている環境はMagic xpa 4.8.1 PT1ですが、神楽彪さんの環境はどうですか?
-
tanda さん
4.10です。
-
神楽彪さん、
4.8.1と4.10でしたら、そこまで動きは変わらないとは思うのですが、一応確認してみますね。
-
神楽彪さん、
セミナーが終わって時間が取れたので、試してみました。
4.10でも、下図の通りJSON形式で正常に表示されましたよ。
-
tandaさん
いろいろとありがとうございます。
商品コードや在庫の手前のスペースのことを言っておりました。ただ、フロント側で数値化すればさほど問題ではないですね。
現時点でMagic xpaをWebAPIとして活用できることが分かりましたので、とりあえず何か一つアプリケーションを作ってみたいと思います。
-
神楽彪さん、
あ、それは数値型の場合は、値を右寄せで表示させるための配慮でしょうね。
もし気になるようでしたら、タグテーブルで Trim(Str()) して、空白を取ってやればいいですよ。MagicをWeb APIサーバとして利用すれば、Magicが排他制御もトランザクションも全自動でやってくれますので、たいへん楽だと思いますよ。
-
tanda さん
タグテーブルでやったらうまくいきました。ありがとうございます。
最後に一つだけ、POSTリクエストでリクエストボディにデータをセットした場合、Magic xpa側でそれを取得する方法はご存じですか?
例えば、[POST] /productsに
{
商品コード: 10,
商品名: バナナ,
価格: 500,
在庫: 10,
}
とJSONで送った場合にMagic xpaでInsert処理を行いたいです。
-
神楽彪さん、
POSTコマンドで送られた値は、Magic側では GetParam() 関数で受け取ることができますよ。
「name」の値を直接指定して受け取ることもできますし、あるいは受け取ったパラメータの「数」を取得して、「何番目の値」といったように、順番指定で受け取ることもできます。
-
tandaさん
GetParamはクエリパラメーターしか取得できないと思っておりました。また確認してみます。
-
神楽彪さん、
はい、GetParam() 関数はフォームパラメータやリクエストパラメータも取得することができます。
すごいですよ!
-
神楽彪さん、
補足の注意事項です。
グローバルパラメータはUTF-8で渡されますので、そのまま取り込むと文字化けを起こすはずです。
したがってMagic側でそれを利用する場合、Shift-JISに変換してやる必要があると思います。 -
tandaさん
GetParamでPOSTリクエストのリクエストボディを取得することが出来ました。
確かに文字化けしたのでフロントで取得する際はフロント側で、POSTで送る際などはMagicで変換するようにしました。
ありがとうございます。
-
神楽彪さん、
出力時の UTF-8 指定は、下記のように入出力特性で行うことができますよ。

-
tandaさん
出力はそこで指定できるんですね。今試したらうまくいきました。
いろいろとありがとうございます。
-
神楽彪さん、
ちなみに、入力の場合はご存知かとは思いますが、UTF8ToAnsi() 関数が使えます。GetParam() 関数と入れ子にすれば、「項目更新」コマンドでダイレクトにパラメータの値を放り込めますよ。
-
tandaさん
同じように実装してました。日本語が入るところはUTF8ToAnsiを都度使用するしかなさそうですね。
オプション>設定>動作設定の国別設定でMagicで扱う文字コード自体を変更できないかと試しましたが、どうもうまくいかないので諦めました。
しかし、あらかじめUTF8ToAnsiを使わなければいけないということを認識していれば支障はないですね。
-
神楽彪さん、
> オプション>設定>動作設定の国別設定でMagicで扱う文字コード自体を変更できないかと試しましたが、
> どうもうまくいかないので諦めました。ここはですね、元になるコードページが何であるかを指定する場所ではないかと思います。したがって、日本語Windows上で動いているMagicであれば「932」が固定になるみたいですね。
-
神楽彪さん、
いずれにしても、Magicの「マージ」は、仕組みが単純で動きが素早いというところが魅力ですよね。
-
tandaさん
そうなんですね。勉強になりました。
-
神楽彪さん、
この機会にぜひ、マージの大家になってMagic業界を盛り上げてくださいね。
今時は、HTMLやJavaScriptはどんなに難しくても、ChatGPTに聞けば3秒で書き上げてくれますので、Magicのマージは、業界の頂点に立てる可能性を秘めていると確信しています。
私も連載のほうでそのこと強調して書いていますが、神楽彪さんのような見識に富んだ仲間が増えると嬉しいです。
-
tandaさん
この一連のやり取り、本当にありがとうございました。
Magic XPAをWeb APIとして活用するために、これから少しずつ勉強していこうと思います。
-
神楽彪さん、
はい、MagicのマージをWeb APIサーバとして仕立て上げるというアイデアは、最高のアイデアだと思います。
横には、ChatGPT、Gemini、Copilot、Claude等が控えてくれていますので、むかうところ敵なしだと思っています(笑
サインインしてコメントを残してください。
コメント
70件のコメント