【Java REST API超入門】簡単サーバ構築ガイド|誰でも作れる実用例付き!

プログラミング

「Javaの勉強をしているけど、Webアプリの裏側がわからない」
「APIって難しそう…でも使えるようになりたい」
そんな悩みを抱える方には、JavaでREST APIサーバを自作する体験がおすすめです。

APIの基本から始めて、リクエスト受信・JSON応答・POST/GET処理まで
一通りの流れを体験できることで、Javaの実践力と理解度が一気に深まります。

この記事では、初心者でも構築できる簡易REST APIサーバの作り方を、
わかりやすく・丁寧に・コード付きで解説します。


REST APIサーバとは何か?

サーバとクライアントをつなぐ窓口です

結論:REST APIは、アプリやWebサービスを連携させるための入り口です。

たとえば、天気予報アプリで今日の天気を取得する際、
裏では「APIにアクセス → サーバがJSON形式でデータを返す」というやり取りが行われています。

Javaでも、この仕組みをコードで実装することができます。

文部科学省も「情報活用能力の育成」において、情報通信の構造や仕組みの理解を重要視しています。
(出典:https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1375607.htm)


必要な機能と構成を把握する

たった2つの機能でREST APIが作れます

結論:GETとPOSTの処理を実装するだけで基本のAPIが完成します。

作るAPIは以下のような内容です:

  • GET /message → メッセージ一覧を返す
  • POST /message → メッセージを受け取って保存する

構成はとてもシンプル:

  • JavaHttpServer.java:APIの起動・ルーティング処理
  • /message → GET/POST対応
  • データ保持は簡易なListに保存(メモリ内処理)

使用するJavaの標準クラス

追加ライブラリなしでもAPIは作れます

Javaにはcom.sun.net.httpserver.HttpServerという標準クラスがあります。
これを使えば、TomcatなどのサーバソフトなしでAPIサーバを作ることができます。

必要なインポート:

1
2
3
import com.sun.net.httpserver.HttpServer;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpExchange;

実装:JavaでREST APIサーバを作る

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import com.sun.net.httpserver.*;
import java.io.*;
import java.net.InetSocketAddress;
import java.nio.charset.StandardCharsets;
import java.util.*;
 
public class JavaHttpServer {
    private static final List<String> messages = new ArrayList<>();
 
    public static void main(String[] args) throws IOException {
        HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
        server.createContext("/message", new MessageHandler());
        server.setExecutor(null); // デフォルトのスレッド
        System.out.println("APIサーバ起動中: http://localhost:8000/message");
        server.start();
    }
 
    static class MessageHandler implements HttpHandler {
        @Override
        public void handle(HttpExchange exchange) throws IOException {
            String method = exchange.getRequestMethod();
 
            if ("GET".equalsIgnoreCase(method)) {
                handleGet(exchange);
            } else if ("POST".equalsIgnoreCase(method)) {
                handlePost(exchange);
            } else {
                exchange.sendResponseHeaders(405, -1); // メソッド不許可
            }
        }
 
        private void handleGet(HttpExchange exchange) throws IOException {
            String response = String.join("\n", messages);
            byte[] bytes = response.getBytes(StandardCharsets.UTF_8);
            exchange.sendResponseHeaders(200, bytes.length);
            try (OutputStream os = exchange.getResponseBody()) {
                os.write(bytes);
            }
        }
 
        private void handlePost(HttpExchange exchange) throws IOException {
            InputStream is = exchange.getRequestBody();
            String body = new String(is.readAllBytes(), StandardCharsets.UTF_8);
            messages.add(body);
            String response = "メッセージを受け付けました。";
            byte[] bytes = response.getBytes(StandardCharsets.UTF_8);
            exchange.sendResponseHeaders(200, bytes.length);
            try (OutputStream os = exchange.getResponseBody()) {
                os.write(bytes);
            }
        }
    }
}

よくあるエラーと対策

躓きやすいポイントを解決します

エラー1:ポートが使用中 → 別のアプリでポート8000が使用されている可能性があります。

  • 解決策:8001など他のポート番号に変更する

エラー2:com.sun.net.httpserverが見つからない

  • 解決策:JDKに標準で含まれています。JDK 11以降では存在しない場合があるため、JDK 8〜10で実行するか、Jettyなど別のサーバに切り替えましょう。

応用:ファイル保存やJSON形式への対応

より実践的なAPIを目指すには

  • 投稿データをファイルやデータベースに保存する
  • JSON形式の応答にする(Jacksonライブラリなど使用)
  • PUTDELETEなどのHTTPメソッド対応も追加可能

完成形コードまとめと構成

  • JavaHttpServer.java:1ファイルで完結
  • ポート:8000
  • エンドポイント:/message
  • HTTPメソッド:GET, POST

まとめ:JavaでAPIの基本を理解しよう

この記事では、JavaでREST APIサーバを構築する方法をご紹介しました。

この記事で学べたこと:

  • JavaでWeb APIサーバを起動する方法
  • GET・POST処理の書き方
  • 躓きやすいポイントの回避策

まずは「APIって実は簡単だ」と感じることが第一歩です。
ぜひ、自分だけのAPIを改造しながら学習を深めてみてください!

タイトルとURLをコピーしました