📖 テーマ設定
🔊 音声設定
1.2
1.0
1.0
▶️ 再生コントロール
🎵 BGM設定
0.3
🔔 効果音設定
0.3

UIと機能の通信(RPC/SOAP/REST/JSON)

概要

  • 日程: Day 3 / セッション 08
  • 時間: [14:10-14:40]
  • 形式: 座学
  • ゴール: RPC・SOAP・RESTの違いを3つ以上の観点で説明でき、REST APIのリクエスト/レスポンスをJSON形式で書ける
  • 学習形式: 対話型解説

導入(5分)

前セッションで「データはRDBに永続化する」と学びました。では、そのデータをどうやって画面(UI)に届けるか? 答えは「通信(Communication)」です。

UIと機能(API・ロジック)を分離する流れは、Day 2のモックアップ作成、Day 4の実装まで一貫した方針です。分離するからには、両者を繋ぐ「通信規約」が必要になります。

RPC、SOAP、RESTという3つの代表的な方式があります。それぞれ「何を、どんな形で送るか」のルールが違います。本セッションで、現代の主流であるREST + JSONを中心に学びます。

本編(20分)

1. 通信方式の歴史

flowchart LR R1["RPC
1980s〜
関数呼び出し型"] --> C["CORBA
1990s
分散オブジェクト"] C --> S["SOAP
1998〜
XMLでメッセージ"] S --> REST["REST
2000〜
HTTP/JSONでリソース操作"] REST --> G["GraphQL / gRPC
2015〜
新しい選択肢"]
方式 一言で 主なフォーマット
RPC(Remote Procedure Call) リモートの関数を呼ぶ バイナリ、JSON-RPC
CORBA オブジェクトを跨いで操作 IIOPバイナリ
SOAP XMLメッセージで操作 XML
REST URIで識別したリソースをHTTPで操作 JSON(XMLも可)
GraphQL クエリで欲しい形のデータを取得 JSON
gRPC バイナリ高速RPC(Google発) Protocol Buffers

2. RPC・SOAP・RESTの違い

観点 RPC SOAP REST
概念 リモートの関数呼び出し XMLメッセージ送受信 リソースをHTTPで操作
データ形式 何でも XML(重い) JSON(軽い)
URLの設計 エンドポイント1つ エンドポイント1つ リソースごとに分割
状態 持つこともある 持つこともある ステートレス(毎回独立)
仕様の厳密さ 緩い 厳密(WSDL) 緩い(OpenAPIで補強)
学習コスト
主な用途 内部マイクロサービス 銀行・大企業基幹 Web API全般

コード例・実例

「ユーザーID 123 の情報を取る」処理を3方式で書いてみます。

RPC風(関数呼び出し)

POST /api
{ "method": "getUser", "params": { "id": 123 } }

SOAP(XML)

<soap:Envelope>
  <soap:Body>
    <getUser>
      <id>123</id>
    </getUser>
  </soap:Body>
</soap:Envelope>

REST(URI+HTTPメソッド)

GET /users/123

REST が圧倒的にシンプルなのが分かります。

ここがポイント

RESTは「リソース指向」。URLを見ただけで「何をしようとしているか」が分かるのが強みです。

3. RESTの4原則

Roy Fielding が2000年の博士論文で定義した「RESTful(REST制約に従う)」の主要原則。

  1. リソース指向: すべてのデータをURIで識別する(/users/123
  2. HTTPメソッドで操作: GET(取得)、POST(新規)、PUT(更新)、DELETE(削除)
  3. ステートレス: サーバはセッション状態を持たない(毎回必要情報を送る)
  4. 表現と実体の分離: 同じリソースを JSON でも XML でも HTML でも返せる

HTTPメソッドの使い分け

メソッド 役割 URI例 冪等性
GET 取得 GET /users/123 あり(何回呼んでも同じ)
POST 新規作成 POST /users なし(呼ぶたびに増える)
PUT 全置換 PUT /users/123 あり
PATCH 部分更新 PATCH /users/123 場合による
DELETE 削除 DELETE /users/123 あり

コード例・実例

REST API リクエスト/レスポンス例(JSON)

リクエスト:

POST /users HTTP/1.1
Host: api.example.com
Content-Type: application/json

{
  "name": "山田太郎",
  "email": "yamada@example.com"
}

レスポンス:

HTTP/1.1 201 Created
Content-Type: application/json
Location: /users/124

{
  "id": 124,
  "name": "山田太郎",
  "email": "yamada@example.com",
  "createdAt": "2026-06-16T13:00:00Z"
}

ここがポイント

HTTPステータスコードで結果を伝えるのもRESTのルールです。

  • 200 OK: 成功
  • 201 Created: 新規作成成功
  • 400 Bad Request: リクエストが不正
  • 401 Unauthorized: 認証されていない
  • 404 Not Found: リソースが存在しない
  • 500 Internal Server Error: サーバエラー

4. JSONとXMLの違い

観点 JSON XML
由来 JavaScript由来 SGML由来
文字数 少ない(軽い) 多い(重い)
可読性 高い
拡張性 緩い 強い(XMLスキーマ)
主な使用 Web API、設定ファイル 業務システム、文書

JSON例

{ "name": "山田", "age": 30 }

XML例

<user><name>山田</name><age>30</age></user>

JSONのほうが約30%少ない文字数で同じ情報を表せます。

5. WSDLとWADL(参考)

  • WSDL(Web Services Description Language): SOAPサービスの仕様書(XML)
  • WADL(Web Application Description Language): RESTサービスの仕様書(XML)
  • 現代では: OpenAPI(旧Swagger)、AsyncAPI、GraphQL Schema などが主流

コラム

JSONを発明したダグラス・クロックフォードは「私はJSONを発明したのではなく、発見しただけだ」と言っています。彼はJavaScriptのオブジェクトリテラル記法をデータ交換に使うアイデアを2001年に提唱しました。「軽くて、人間も読めて、ほぼすべての言語でパースできる」というシンプルな設計が、20年以上経った今もWeb通信のデファクトスタンダードであり続けています。

コラム

RESTを提唱したRoy Fieldingは、博士論文を書いた当時、ちょうどHTTP/1.1の仕様策定にも関わっていました。彼は「Webがなぜ成功したか」を理論化する過程で、RESTという制約セットを発見したのです。RESTは「新しく作った技術」ではなく「Webの成功要因を抽出した原則」というのが正確です。

💬 AIに聞いてみよう

ここまでの内容で疑問があれば、AIに質問してみましょう。たとえば:

  • 「PUTとPATCHの違いを、自分のテーマの例で説明して」
  • 「GraphQLはRESTと比べて何が嬉しい?」
  • 「自分のテーマでREST API を設計するとしたら、エンドポイントを5つ挙げて」

まとめ(5分)

通信方式はRPC→SOAP→RESTと進化してきました。現代のWeb開発では「REST + JSON」が圧倒的主流です。URIでリソースを識別し、HTTPメソッドで操作する、というシンプルなルールがREST の強みです。

次のセッションでは、ここまで設計してきたシステムを「どこで実行するか(ネイティブ、Web、モバイル、クラウド)」を考え、実際にcurlでHTTPリクエストを送ってみます。

🔄 振り返りチェック

  • RPC・SOAP・RESTの違いを3つ以上の観点で説明できますか?
  • REST APIのGET/POST/PUT/DELETEをそれぞれ用途と例で説明できますか?
  • JSONで name=山田、age=30 のオブジェクトを書けますか?

補足資料

  • 参考リンク: Roy Fielding『Architectural Styles and the Design of Network-based Software Architectures』、『Webを支える技術』山本陽平
  • 発展課題: 自分が知っているWebサービス(Twitter、GitHub等)のAPIドキュメントを1つ読み、RESTfulか判定してみる

学習ガイド

想定される質問と回答例

質問 ヒント
RPCは古いの? もう使わない? いや、gRPCとして現役。マイクロサービス間通信で多用される
RESTful と REST API は同じ? RESTfulは「REST制約を守る」程度の意味。REST APIと厳密に区別する必要は実務ではあまりない
ステートレスにすると認証はどうする? リクエストごとにトークンを送る(Authorization ヘッダなど)。サーバ側にセッションを残さない

つまずきやすいポイント

つまずきポイント ヒント
HTTPメソッドの選び分け 「読むだけならGET、新規作成はPOST、変更はPUT/PATCH、消すならDELETE」で大体OK
URLの命名で悩む 名詞の複数形 + ID(/users/123)が基本。動詞は避ける(/getUser/123はNG)
RESTの「ステートレス」が理解しづらい 「サーバ側にログイン状態を保存しない、毎回トークン投げる」とイメージするとよい
読み上げを開始します...

AIに質問する