Spring Bootを使ったREST APIの基本構築から動作確認まで①

## はじめに
Spring Bootを使用して、基本的なCRUD操作ができる簡単なREST APIを構築する方法を解説していきます。
本記事では、使用する環境・ツールの基本構築から、簡単な動作確認までを行います。
各HTTPメソッドを使用した動作について知りたい方は、次の記事を参考にしてください。
[Spring Bootを使ったREST APIの基本構築から動作確認まで②](https://qiita.com/pomecode/private/2eb4fdd737264a335b1b)

## 対象者
・Javaの基礎知識を持っている方
・Spring Bootを初めて触る方、もしくは少し触ったことがある方
・REST APIについて学びたい方

## 動作環境
・Eclipse 2022（Pleiades All in One）
・Spring Boot 3.4.4

## 事前準備
本記事で使用する環境・ツールについて、インストール手順を記載していきます。

### Pleiades All in One
統合開発環境であるEclipseに、日本語化やよく使用するプラグインを内包したものがPleiades All in Oneです。

**手順**
1. 以下のサイトよりダウンロードするバージョンを選択し、使用するOSに応じてJavaのFull Editionをダウンロード
[MergeDoc Project](https://willbrains.jp/)
1. ダウンロード後、任意のフォルダでzipファイルを展開し、eclipseフォルダ配下のeclipse.exeを起動
※当方はCドライブ直下に「pleiades」というフォルダを作成し、この中でzipファイルを展開
起動時にワークスペースを選択しますが、デフォルト(../workspace)で問題ありません。

### Spring Initializr
Spring Bootプロジェクトの雛形を生成するWebサービスで、ブラウザ上もしくはEclipse上で、ビルドツールやバージョン、成果物の情報を入力・選択して、アプリケーションの雛形を簡単に生成することが出来るサービスです。
本記事ではブラウザ上でアプリケーションの雛形を生成する方法について説明します。

**手順**
1. 以下のサイトにて必要な情報を入力・選択し、GENERATEを押下
[Spring Initializr](https://start.spring.io/)
**設定情報**
    - Project：デフォルト（Maven）
    - Language：デフォルト（Java）
    - Spring Boot：デフォルト（2025/4現在は3.4.4）
    - Project Metadata　※修正箇所のみ記載
      - Artifact：restapidemo
      - Name：restapidemo　※自動設定
      - Package name：com.example.restapidemo　※自動設定
    - Dependencies：Spring Web
1. ダウンロード後、zipファイルを展開し、展開したフォルダを先程作成したワークスペースの配下に移動
※当方の場合は、C:\pleiades\workspace
1. Eclipseを起動後、メニューバーから[ファイル]-[インポート]を押下
1. 選択ウィンドウにて[Maven]-[既存Mavenプロジェクト]を選択し、次へを押下
1. Mavenプロジェクトウィンドウにて、ルート・ディレクトリーに先程移動したフォルダを設定し、完了ボタンを押下
※当方の場合は、C:\pleiades\workspace\restapidemo

以上で初期セットアップは完了ですが、Eclipse上から設定する場合は、
メニューバーの[ファイル]-[新規]-[Springスターター・プロジェクト（Spring Initializr）]を選択することでブラウザと同様の設定ウィンドウが表示されるため、そちらから設定可能です。

**補足**
生成される雛形と構成について簡単に触れておきます。ポイントは4つ。

- (指定した名前)Application.java　※今回の場合、RestapidemoApplication.java
  - Spring Bootアプリケーションの大元
  - @SpringBootApplicationというアノテーションが付いている
    →Spring Bootで起動することが分かる
    →最上位のパッケージに配置するクラスに付与されている
- application.properties
  - Spring Bootアプリケーション専用のプロパティファイル
- (指定した名前)ApplicationTests.java　※今回の場合、RestapidemoApplicationTests.java
  - テスト用のクラス
- pom.xml
  - Mavenの設定ファイル

### SpringBootApplicationの起動
上記設定が完了したら、試しにSpringBootApplicationを起動し、設定に問題がないか確認しておきましょう。
起動方法はいくつかありますが、以下のいずれかの方法で起動してください。
- Boot ダッシュボードから[local]-[restapidemo]（今回のプロジェクト名）を選択し、
Boot ダッシュボード内のツールバーのプロセスの開始/再起動ボタンをクリック
- RestapidemoApplication.javaを開き、ツールバーの実行ボタンをクリック
- Eclipse上で右クリックし、[実行]-[Spring Boot アプリケーション]をクリック

起動後、コンソールに以下のような表示が出ていればOKです。
※一部文字化けして表示が崩れておりますがご了承ください。
問題ないことを確認できたら、プロセスの停止ボタンをクリックして停止しておきましょう。
```
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/

[32m :: Spring Boot :: [39m              [2m (v3.4.4)[0;39m

[2m2025-04-24T21:59:13.561+09:00[0;39m [32m INFO[0;39m [35m22344[0;39m [2m--- [           main] [0;39m[36mc.e.restapidemo.RestapidemoApplication  [0;39m [2m:[0;39m Starting RestapidemoApplication using Java 17.0.6 with PID 22344 (C:\pleiades\2022-12\workspace\restapidemo\restapidemo\target\classes started by USER in C:\pleiades\2022-12\workspace\restapidemo\restapidemo)
[2m2025-04-24T21:59:13.564+09:00[0;39m [32m INFO[0;39m [35m22344[0;39m [2m--- [           main] [0;39m[36mc.e.restapidemo.RestapidemoApplication  [0;39m [2m:[0;39m No active profile set, falling back to 1 default profile: "default"
[2m2025-04-24T21:59:14.876+09:00[0;39m [32m INFO[0;39m [35m22344[0;39m [2m--- [           main] [0;39m[36mo.s.b.w.embedded.tomcat.TomcatWebServer [0;39m [2m:[0;39m Tomcat initialized with port 8080 (http)
[2m2025-04-24T21:59:14.906+09:00[0;39m [32m INFO[0;39m [35m22344[0;39m [2m--- [           main] [0;39m[36mo.apache.catalina.core.StandardService  [0;39m [2m:[0;39m Starting service [Tomcat]
[2m2025-04-24T21:59:14.906+09:00[0;39m [32m INFO[0;39m [35m22344[0;39m [2m--- [           main] [0;39m[36mo.apache.catalina.core.StandardEngine   [0;39m [2m:[0;39m Starting Servlet engine: [Apache Tomcat/10.1.39]
[2m2025-04-24T21:59:15.041+09:00[0;39m [32m INFO[0;39m [35m22344[0;39m [2m--- [           main] [0;39m[36mo.a.c.c.C.[Tomcat].[localhost].[/]      [0;39m [2m:[0;39m Initializing Spring embedded WebApplicationContext
[2m2025-04-24T21:59:15.041+09:00[0;39m [32m INFO[0;39m [35m22344[0;39m [2m--- [           main] [0;39m[36mw.s.c.ServletWebServerApplicationContext[0;39m [2m:[0;39m Root WebApplicationContext: initialization completed in 1405 ms
[2m2025-04-24T21:59:15.669+09:00[0;39m [32m INFO[0;39m [35m22344[0;39m [2m--- [           main] [0;39m[36mo.s.b.w.embedded.tomcat.TomcatWebServer [0;39m [2m:[0;39m Tomcat started on port 8080 (http) with context path '/'
[2m2025-04-24T21:59:15.677+09:00[0;39m [32m INFO[0;39m [35m22344[0;39m [2m--- [           main] [0;39m[36mc.e.restapidemo.RestapidemoApplication  [0;39m [2m:[0;39m Started RestapidemoApplication in 2.821 seconds (process running for 3.782)
```

## 基本的な動作確認
### REST API
実装に入る前に、REST APIについて簡単に触れておきます。
REST APIとはRESTの原則に従って設計されたAPIのことです。
RESTはWebサービスの設計に関する原則的な考え方を指す用語で、いくつかの原則が定められています。
その中の一つに「統一インターフェース」というものがあり、クライアント⇔サーバー間でやり取りするための方法があらかじめ定義されています。
具体的には、GETやPOSTといったHTTPメソッドを使って、リソースに対する操作を行います。
本記事では、GETを使った処理を実装して、実際の動きを確かめてみたいと思います。

### APIの実装
ブラウザからHTTP GETリクエストを利用してSpring Bootに対してリクエストを送り、文字列を返すだけの簡単なAPIを実装してみましょう。
流れとしては、まず、Controllerを格納するパッケージを作成し、Controllerクラスを作成します。
Controllerクラス内にHTTP GETリクエスト用のメソッドを実装し、ブラウザで表示を確認するといった流れです。

#### Controllerパッケージ
Controllerクラスを格納するためのパッケージです。

**手順**
1. com.example.restapidemoパッケージを選択し、右クリック
1. [新規]-[パッケージ]を押下
1. 新規Javaパッケージのウィンドウが表示されるので、名前欄の最後尾に`.controller`を入力
1. 名前欄が`com.example.restapidemo.controller`となっていることを確認し、完了ボタンを押下

#### Controllerクラス
クライアントからのリクエストを受け取り、リクエスト内容に応じて処理を実行するクラスです。
必要に応じて内部サービスやデータベースを呼び出し、ロジックの実行を依頼します。

**手順**
1. 先程作成したcontrollerパッケージを選択して右クリック
1. [新規]-[クラス]を押下
1. 新規Javaクラスのウィンドウが表示されるので、名前欄に`SampleController`を入力して完了ボタンを押下

以下のように、controllerパッケージの配下にSampleController.javaが作成されていればOKです。
```
restapidemo
  ∟src\main\java
    ∟com\example\restapidemo
      ∟controller
        ∟SampleController.java
      ∟RestapidemoApplication.java
```

#### HTTP GETメソッド
では、作成したControllerクラスの中に処理を実装していきましょう。
通常、Controllerクラスには処理を実装せず、Serviceクラスに処理を依頼しますが、今回はブラウザにアクセスした際、文字列を返すだけですので、Controllerに処理を書いていきます。

**手順**
1. 今回はREST API用のControllerですので、SampleControllerクラスにRestControllerアノテーションを付与します。
    ```java
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class SampleController {
    ```
    ※RestControllerをインポートしてください。保存でもインポートされるかと思います。
1. HTTP GET用のメソッドを作成。
    1. GETメソッドを使ってリクエストを処理するため、GetMappingアノテーションを付与します。
    また、引数にvalue属性を使って、URLのパスを指定します。
    今回はトップにアクセスした際、メソッドが実行されるようにしたいため、valueは"/"を指定します。
    1. 文字列を返すだけのメソッドを書いていきます。
    返却する文字列は "ようこそ、トップページへ！" としておきます。
        ```java
        import org.springframework.web.bind.annotation.GetMapping;
        ～～～
            @GetMapping(value="/")
        	public String index() {
        		return "ようこそ、トップページへ！";
        	}
        ```
        ※GetMappingをインポートしてください。保存でもインポートされるかと思います。
    1. もう一つ追加でHTTP GET用のメソッドを書いておきます。
    引数のvalue属性は"/qiita"として、返却する文字列は "こんにちは、Qiita" としておきます。
        ```java
            @GetMapping(value="/qiita")
            public String qiita() {
                return "こんにちは、Qiita";
                }
        ```
    
以上で処理の記載は完了です。全体としては以下のようになっているかと思います。
```java
package com.example.restapidemo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SampleController {
	
	@GetMapping(value="/")
	public String index() {
		return "ようこそ、トップページへ！";
	}
	
	@GetMapping(value="/qiita")
	public String qiita() {
		return "こんにちは、Qiita";
	}

}
```

### ブラウザでの確認
先程、SpringBootApplicationの起動をした時と同様に、起動してみましょう。
起動が完了したら、Boot ダッシュボード内のツールバーの「デフォルトURLでWebブラウザーを開く」（地球のようなマーク）をクリックしてください。
もしくは、ブラウザで`http://localhost:8080/`を開いていただいてもOKです。

アクセスすると、「ようこそ、トップページへ！」と表示されていることが確認できるかと思います。
これは、"/"（トップページ）にGETリクエストがきた時に、index()メソッドが実行され、 "ようこそ、トップページへ！" を返却しているためです。

次に、URLの末尾に"/qiita"を追加してみてください。
すると、今度は"/qiita"にGETリクエストがきたため、qiita()メソッドが実行され、「こんにちは、Qiita」と表示されます。

### 実行ポートの変更
Spring Bootはデフォルトで8080ポートで起動しますが、application.propertiesにポート番号を設定することで任意のポートに変更することが出来ます。
試しにポート番号を8081に変更してみましょう。

ポート番号の変更は、以下のようにserver.portに8081を指定してあげればOKです。
```properties:application.properties
spring.application.name=restapidemo
server.port=8081
```

SpringBootApplicationが起動中の場合は一度停止し、再度起動してみてください。
コンソールに以下のような表示が出ているかと思います。
```
Tomcat started on port 8081 (http) with context path '/'
```

また、先程と同様に、ブラウザで`http://localhost:8081`にアクセスしてみると、
「ようこそ、トップページへ！」の表示が確認できます。

## おわりに
ここまでご覧いただきありがとうございます。
次の記事ではREST Clientを使用して、各HTTPメソッドを使用した動作について説明していますので、良ければそちらもご覧ください
[Spring Bootを使ったREST APIの基本構築から動作確認まで②](https://qiita.com/pomecode/private/2eb4fdd737264a335b1b)