0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Web通信・API基礎まとめ(Java開発)

Posted at

JavaでWebシステムを構築していると、通信に関する内容を理解する必要が出てきたので、学習するついでにアウトプットする。「GET/POST通信」および「REST API」の概念について理解を深めるためのまとめ。


1. Webシステムの通信方式

Webシステムは基本的に HTTP や HTTPS という通信プロトコルを利用する。

クライアント(Webブラウザなど)が「リクエスト(要求)」を出し、サーバーが「レスポンス(応答)」を返す。原則として、1つのリクエストには1つのレスポンスが対となる。

HTTPとTCP/IPの関係

HTTPは、信頼性の高い通信を行うために TCP というプロトコルを用いている。(厳密には「TCP/IP」という階層モデルに基づいてデータが運ばれる。)

※まあわかりにくいので、「自分がリクエストを投げ、相手(サーバー)からレスポンスが返ってくる」 という基本構造を押さえておけばよいかと、、

  1. アプリケーション層 (HTTP): データ(便箋)を書く。

  2. トランスポート層 (TCP): 書留の封筒に入れる(確実に届けるため)。

  3. インターネット層 (IP): 宛先住所(IPアドレス)を書く。

  4. ネットワークインターフェース層: 物理的な通信網(トラックやWi-Fi)に乗せる。


2. GET / POST通信

HTTP通信において、目的によって使い分けられる代表的なメソッド。
Get

  • webサーバーからデータを取得する

  • データは URL(クエリパラメータ) に付与される

  • 検索、ページ表示など、サーバーの状態を変えない操作に使う

Post

  • webサーバーに新しいデータを送信して、作成する

  • ログイン情報や個人情報など機密情報の送信に使用

  • **フォーム送信、会員登録、投稿など、サーバーに書き込みが発生する操作に使う

特徴の比較

項目 GET POST
目的 データの取得 データの新規作成・送信
データの場所 URLの末尾(クエリパラメータ)



例: ?id=1&word=java
リクエストボディ(Body)



封筒の中身に入れるためURLには出ない
用途 検索、ページ表示など フォーム送信、会員登録、ログインなど
Javaでの取得 request.getParameter() request.getBody()等の処理が必要

※補足: REST API等の設計では、更新には PUT、削除には DELETE を使うことが多いが、従来のWebフォームでは POST が書き込み全般に使われる。

重要な概念:冪等性と安全性

技術的な定義において、以下のように区別される。

  • 冪等性(べきとうせい) (Idempotent):

    • 1回実行しても100回実行しても、結果(サーバーの状態)が同じになる性質。
  • 安全性 (Safe):

    • 操作を行っても、サーバーのデータが**書き換わらない(副作用がない/読み取り専用)**性質。
メソッド URL例 冪等性 安全性 理由
GET /home あり あり 何度見ても同じ画面で、データは破壊されない。
POST /register なし なし 連打するとデータが増殖し(冪等でない)、DBが更新される(安全でない)。

つまり、Getの通信は、"https://example.com" から home に移動するために "https://example.com/home" というように、URLに目的を表示してページの表示などを行うため、
何度やっても同じ結果が得られ(冪等で)かつページのデータは書き換わらない(安全)である。

対してPostの通信は、サーバーの情報を更新するのが目的なので、
何度やっても違う結果になり(冪等でない)、安全でない(更新するのでデータは書き換わる)

※補足: 冪等性は漢字が読めないので注意。
安全性は、セキュリティ的に安全という意味ではない。


3. API (Application Programming Interface)

Web APIは、「システムとシステムを連携させるための窓口」

自社システムで開発するのが困難な機能や、セキュリティリスクの高い処理を外部システムへアウトソースするために使われる。

具体例:ECサイトとStripe(広く使われている決済システム)の連携

自社でクレジットカード情報を持ちたくない場合、APIを利用する。

  1. ECサイト: 「金額」+「カード情報」+**「APIキー(身元証明の鍵)」**を送信。

  2. Stripe: 送信元を認証し、決済処理を実行。

  3. Stripe: 「決済完了」の通知だけを返す。

  4. ECサイト: 完了通知を受け取り、注文を確定する。


4. Web APIの主な種類

Web APIにもいろいろ種類があるみたい。
現在のWeb開発では以下の3つが主流

① REST API (現在主流)

Web(HTTP)の仕組みを最大限に活かした設計思想。

鉄則ルール

  • URLには「名詞(リソース)」のみを使う。(動詞は入れない)

  • 動作は「HTTPメソッド」で使い分ける。

悪い例: /getUsers, /createUser (動詞が入っているため管理しづらい)

良い例: /users (名詞のみ)

リクエストの設計例

メソッド URL 意味 日本語イメージ
GET /users 一覧取得 「ユーザーリストをください」
POST /users 新規作成 「新しいユーザーを登録してください」
GET /users/1 詳細取得 「ID:1のユーザー情報をください」
PUT /users/1 更新 「ID:1のユーザー情報を書き換えてください」
DELETE /users/1 削除 「ID:1のユーザーを消してください」

レスポンス(ステータスコード)

結果は「数字」で判断する。

  • 200番台 (成功): 200 OK, 201 Created

  • 400番台 (クライアントのミス): 400 Bad Request(データ形式が変。), 401 Unauthorized (認証切れ), 404 Not Found(URLが見つからない)

  • 500番台 (サーバーのミス): 500 Internal Server Error


② GraphQL (新鋭・柔軟)

Meta(旧Facebook)が開発。RESTの課題(過剰取得・複数通信)を解決するために生まれた。

  • 思想: 「クライアントが欲しいデータを指定する」(データクエリ指向)。

  • 特徴:

    • エンドポイント(URL)は 1つだけ(例: /graphql)。

    • リクエスト時に「ユーザーの名前だけ欲しい」と指定すれば、それだけが返ってくる。

    • 複数のリソース(ユーザー情報+投稿記事など)を1回の通信でまとめて取得できる。


③ gRPC (超高速通信)

Googleが開発。主にマイクロサービス間の通信で利用される。

  • 思想: JSONではなく**バイナリデータ(機械語に近い形式)**で通信する。

  • 特徴:

    • 人間には読めないが、通信速度が極めて速い。

    • 定義ファイル(Protocol Buffers)を用いて厳密に型を決める。


5. まとめ:APIスタイルの比較表

項目 REST (現在主流) GraphQL (柔軟) gRPC (高速)
思想 リソース指向



(URLでモノを指定)
データクエリ指向



(欲しいデータを要求)
手続き指向



(関数呼び出しに近い)
URL 複数ある



(/users, /posts...)
1つだけ 1つだけ
データ形式 JSON (テキスト) JSON (テキスト) Protocol Buffers (バイナリ)
自由度 サーバーが決める クライアントが決める 厳密な契約(定義)に従う
主な用途 Webサービス全般 スマホアプリ、複雑なUI マイクロサービス、サーバー間通信
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?