【Spring Boot】RESTful API と Web アプリケーションの根本的な違い

こんにちは。ゆうせいです。
Spring Boot でアプリケーションを開発するとき、「RESTful API」と「Web アプリケーション(MVC)」の違いを理解することは重要です。
どちらも Spring Boot で構築できますが、それぞれ 目的や仕組みが大きく異なります

この記事では、Spring Boot の RESTful API と Web アプリケーションの根本的な違い を整理し、どのようなケースでどちらを選択すべきかを解説します。


1. RESTful API と Web アプリの違い(概要)

項目RESTful APIWeb アプリケーション(MVC)
目的フロントエンド(SPA, モバイル, 他のシステム)向けにデータを提供HTML をレンダリングして Web ページを表示
レスポンスJSON / XML(データのみ)HTML / View(Thymeleaf, JSP など)
クライアントフロントエンド(React, Vue.js, Angular, モバイルアプリ)Web ブラウザ
URL 設計RESTful なエンドポイント (/users, /products)Web ページごとのルーティング (/home, /dashboard)
主な技術@RestController, @ResponseBody, Spring WebFlux@Controller, Thymeleaf, ModelAndView
ステート管理基本的にステートレス(状態を保持しない)セッション管理(HttpSession)を使用
ユースケースモバイルアプリのバックエンド、マイクロサービス、データ API企業向け管理画面、ブログ、ECサイト

2. RESTful API(データ提供型アプリケーション)

2.1 特徴

RESTful API は、「データをやり取りするための仕組み」 です。
フロントエンド(SPA やモバイルアプリ)に JSON などのデータを提供 し、表示処理はクライアント側で行います。

2.2 具体的な実装例

RESTful API を Spring Boot で実装

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
        User user = new User(id, "Alice", "alice@example.com");
        return ResponseEntity.ok(user);
    }
}

リクエスト

GET /users/1 HTTP/1.1
Host: example.com

レスポンス

{
  "id": 1,
  "name": "Alice",
  "email": "alice@example.com"
}

JSON データを提供するだけで、フロントエンドは自由に表示を制御できる!
React, Vue.js, Angular などのフロントエンドフレームワークと組み合わせることが多い!


3. Web アプリケーション(HTMLレンダリング型)

3.1 特徴

Spring Boot の Web アプリケーションは、HTML をサーバー側で生成し、ブラウザに送信する方式 です。
Thymeleaf, JSP などのテンプレートエンジンを使用し、Model にデータを渡して画面をレンダリングします。

3.2 具体的な実装例

Spring Boot MVC(Thymeleaf を使用)

@Controller
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public String getUser(@PathVariable Long id, Model model) {
        User user = new User(id, "Alice", "alice@example.com");
        model.addAttribute("user", user);
        return "user-detail";  // user-detail.html をレンダリング
    }
}

Thymeleaf テンプレート (user-detail.html)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>User Detail</title>
</head>
<body>
    <h1>User Information</h1>
    <p>Name: <span th:text="${user.name}"></span></p>
    <p>Email: <span th:text="${user.email}"></span></p>
</body>
</html>

リクエスト

GET /users/1 HTTP/1.1
Host: example.com

レスポンス

<!DOCTYPE html>
<html>
<head>
    <title>User Detail</title>
</head>
<body>
    <h1>User Information</h1>
    <p>Name: Alice</p>
    <p>Email: alice@example.com</p>
</body>
</html>

HTML をサーバー側でレンダリングし、そのままブラウザに送信する!
テンプレートエンジン(Thymeleaf, JSP など)を使って動的にページを生成!


4. どちらを選ぶべきか?

ユースケースRESTful APIWeb アプリ(MVC)
モバイルアプリのバックエンド✅ 最適❌ 不向き
SPA(React/Vue.js)との連携✅ 最適❌ 不向き
データを外部サービスと共有✅ 最適❌ 不向き
企業向け業務システム❌ 使わない✅ 最適
管理画面(ダッシュボード)❌ 使わない✅ 最適
サーバーサイドレンダリングが必要❌ 使わない✅ 最適

✅ RESTful API を選ぶ場合

  • フロントエンドを React / Vue.js / Angular で開発する場合
  • モバイルアプリのバックエンド API を構築する場合
  • マイクロサービス間のデータ連携をする場合

✅ Web アプリ(MVC)を選ぶ場合

  • 企業向けの管理画面や社内システム
  • サーバーサイドで HTML を生成して直接表示するケース
  • フルスタック Java(Spring Boot + Thymeleaf)で開発する場合

5. ハイブリッドなアプローチ

最近では、「RESTful API + Web アプリ(MVC)の組み合わせ」というハイブリッドな開発も増えています。

5.1 API + Web を統合する方法

  1. /api で RESTful API を提供
  2. それ以外のルートで Web アプリを提供(Thymeleaf など)
@RestController
@RequestMapping("/api/users")
public class UserApiController {
    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return new User(id, "Alice", "alice@example.com");
    }
}

@Controller
@RequestMapping("/users")
public class UserWebController {
    @GetMapping("/{id}")
    public String getUser(@PathVariable Long id, Model model) {
        User user = new User(id, "Alice", "alice@example.com");
        model.addAttribute("user", user);
        return "user-detail";  
    }
}


フロントエンドとバックエンドを分離しつつ、Web アプリも提供できる!
管理画面は Web アプリ、外部システム連携は REST API という使い分けが可能!


6. まとめ

項目RESTful APIWeb アプリケーション(MVC)
目的データ提供(JSON, XML)HTML ページをレンダリング
クライアントReact, Vue.js, モバイルアプリブラウザ(Thymeleaf, JSP)
URL設計GET /users(データ取得)/users(ページ表示)
技術@RestController@Controller + Thymeleaf
セッション管理ステートレスHttpSession あり

結論

  • フロントエンドが別(SPA, モバイル)なら RESTful API
  • HTML をレンダリングするなら MVC(Web アプリ)
  • 組み合わせることで、柔軟なアーキテクチャが実現可能!

用途に応じて、最適なアーキテクチャを選択しましょう! 🚀

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。