「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サーバを作ることができます。
必要なインポート:
import com.sun.net.httpserver.HttpServer;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpExchange;
実装:JavaでREST APIサーバを作る
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ライブラリなど使用)
PUT
やDELETE
などのHTTPメソッド対応も追加可能
完成形コードまとめと構成
JavaHttpServer.java
:1ファイルで完結- ポート:
8000
- エンドポイント:
/message
- HTTPメソッド:
GET
,POST
まとめ:JavaでAPIの基本を理解しよう
この記事では、JavaでREST APIサーバを構築する方法をご紹介しました。
この記事で学べたこと:
- JavaでWeb APIサーバを起動する方法
- GET・POST処理の書き方
- 躓きやすいポイントの回避策
まずは「APIって実は簡単だ」と感じることが第一歩です。
ぜひ、自分だけのAPIを改造しながら学習を深めてみてください!