コンテンツにスキップ

049. JSON Request(JSON形式の送信:モダンなAPIとの共通言語)

原理:構造化された「スマートな対話」

JSONとは何か?

これまでに紹介した「クエリパラメータ」や「フォームデータ」は、Webの黎明期からある非常にシンプルなデータ形式でした。しかし、今のプログラミングの世界で最も標準的に使われている「共通言語」は、JSON(ジェイソン:JavaScript Object Notation)です。

JSONは、データを { "name": "tanaka", "age": 20, "hobbies": ["cooking", "hiking"] } のように括弧で囲んで表現します。 - データの種類(文字列、数字、配列など)がハッキリしている。 - 枝分かれ(階層構造)を表現できる。 - コンピュータにとっても人間にとっても読みやすい。 というメリットがあり、現代の多くのWebサービス(API)は、このJSON形式でやり取りすることを前提に作られています。

HTMXとJSONの距離感

HTMXは、基本的には「HTMLをやり取りする」ツールです。そのため、標準ではデータを「フォームデータ形式」で送ろうとします。しかし、あなたが連携したいサーバー(API)が「JSONで送ってくれないと受け取らないよ!」という頑固な仕様である場合もあります。

そんなとき、HTMXは拡張機能(Extensions)を使うことで、「いつものHTML属性を使いつつ、送信する瞬間だけデータをJSONにパッキングし直す」という器用な芸当ができるようになります。


実践:HTMXからJSONでデータを飛ばす

1. JSONエンコーディング拡張の導入

HTMXでJSONを送るには、json-enc という公式の「プラグイン」を一行読み込むのが最も簡単な近道です。

<!-- 1. 拡張機能を読み込む -->
<script src="https://unpkg.com/htmx.org/dist/ext/json-enc.js"></script>

<body hx-ext="json-enc"> <!-- 2. JSON配送モードを有効にする -->

    <form hx-post="/api/modern-service">
        <input type="text" name="title" value="Hello">
        <input type="number" name="count" value="101">

        <!-- 
          通常なら title=Hello&count=101 と送られるところが、
          { "title": "Hello", "count": 101 } というJSONになって送信されます!
        -->
        <button type="submit">モダンなAPIに送信</button>
    </form>

</body>

2. なぜJSONに変えるのか?(ユースケース)

  • 外部サービスとの連携: FirebaseやAWSLambdaといった、JSONを主食とするクラウドサービスに直接データを送りたいとき。
  • 複雑なデータ: 入力した内容がリスト(配列)状になっていたり、深い階層を持っているとき。

3. ステップ・バイ・ステップ解説

  1. サーバーの要求を確認: サーバー側の担当者に「データはどんな形式で送ればいい?」と聞き、もし「JSON(application/json)」と言われたらこの手法を使います。
  2. 拡張機能の有効化: hx-ext="json-enc" を、送信したい要素またはその親に書きます。
  3. 注意: HTMXは「HTMLを受け取ること」が目的です。JSONを送ることはできますが、サーバーからは「更新用のHTMLパーツ」を返してもらうように設計してください。

比較:フォームデータ vs JSON

フォームデータ(標準)

  • 見た目: key=value&key2=value2
  • 相性: HTMLそのもの、サーバーサイドの古いプログラム。
  • 手軽さ: 設定不要で、どこでも動く。

JSON(拡張)

  • 見た目: { "key": "value", "key2": 123 }
  • 相性: JavaScript、スマホアプリのバックエンド、モダンなAPI。
  • 表現力: 数字や真偽値(true/false)、入れ子構造を正確に伝えられる。

まとめ:初心者のための「デジタル翻訳」

JSONリクエストは、HTMXという「HTMLの騎士」が、JSONという「APIの魔法使い」とスムーズに会話するための翻訳機です。

  • 無理にJSONにしない: 自分が作っているサーバーが、普通のフォームデータを受け取れるのであれば、あえてJSONにする必要はありません。標準のまま(フォームデータ)で進めるのが最もHTMXらしいやり方です。
  • 「型」を意識する: JSONにすると、サーバー側で「これは文字列ではなく、ちゃんと『数字』として届いたな」と判断しやすくなり、プログラムのミスが減ります。
  • 拡張の力を借りる: HTMX単体でできないことも、今回のような拡張機能(Extensions)をサッと読み込むだけで解決できる、という柔軟性を覚えておきましょう。

相手に合わせて、言葉(形式)を選ぶ。hx-ext="json-enc" を味方につけて、どんなにモダンなAPIであっても物怖じせずに、あなたのHTMLから直接データを届けてください。次の記事では、通信の「封筒の表書き」について詳しく探る「リクエストヘッダー(050. Request Headers)」をご紹介します。