「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 ); // デフォルトのスレッド 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を改造しながら学習を深めてみてください!