Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java JSP/Servlet

RESTful APIのサンプル(Java)を作成する手順をご紹介

投稿日:2022年1月12日 更新日:

 

<目次>

(1) RESTful APIのサンプル(Java)を作成する手順をご紹介
 (1-1) 作成するAPIの概要
 (1-1) RESTful APIの開発用プロジェクト作成(Spring Boot)
 (1-2) リソースのクラス作成(MVCのM=Model相当)
 (1-3) リソースのコントローラー作成(MVCのC=Controller相当)
 (1-4) アプリケーションの実行
 (1-5) 疎通確認

(1) RESTful APIのサンプル(Java)を作成する手順をご紹介

本記事ではJavaのフレームワークであるSpring Bootをベースに使用して、簡単な「RESTful API」を実際に作成する手順をご紹介します。

(1-0) 作成するAPIの概要

・このAPIは「/say_hello」に対する「GET」リクエストを処理します。
・オプションパラメータは「name」をクエリパラメータ(※注0)として許可します。
・GETリクエストが正常処理されたら、レスポンスコード「200 OK」を応答します。
・応答(レスポンス)のボディ部にはJSON形式で、挨拶文(Hello XXXX)を返却します。

(※注0)クエリパラメータ:サーバにデータを送るためURLの末尾に付与するパラメータ。

以下、レスポンスのボディ部の例です(JSON形式)(→★JSON記事)
(例)
{
    "id": 1,
    "content": "Hello, World!"
}
(図100)APIのイメージ図

(1-1) RESTful APIの開発用プロジェクト作成(Spring Boot)

今回はSpring Bootのプロジェクトを使って、RESTful APIのサンプルを使用します。Spring Bootの概要やプロジェクトの作り方(Hello World)については、別途以下の記事で紹介していますので、そちらを参照頂けたらと思います。
 
 
上記手順で、プログラムを作るための土台のプロジェクトや、ビルド(※注1)の仕組みを用意出来たので、ここからRESTful APIの実装をします。
 
(※注1)コンパイル済みプログラムや外部参照ファイルを集め、実行ファイルを固める処理のこと。

(1-2) リソースのクラス作成(MVCのM=Model相当)

まずはリソースのオブジェクトを表現するクラスを作ります(MVCのModelに相当)。このクラス自体は、変数・コンストラクタ・ゲッターメソッドがある、一般的なJavaのクラスになります。
 

●追加場所

プロジェクトの以下のパスに追加します。
 
src/main/java/com/XXXX/YYYY
 
※基本的に、XXXX=Groupの「com.」以降の値、YYYY=Artifactの値です。
 
(図121)①

プロジェクトのツリーで言うと、下記の箇所に追加する形になります。
(図121)②

●追加手順

・①追加対象フォルダを「右クリック」⇒「New」⇒「File」を選択
(図122)①

・②ファイル名を「SayHello.java」として「Finish」を押下
(図122)②

・③プログラムの追加完了
(図122)③

●追記するコード

(サンプル)
package com.example.restservice;
public class SayHello {

  private final long id;
  private final String content;

  public SayHello(long id, String content) {
    this.id = id;
    this.content = content;
  }

  public long getId() {
    return id;
  }

  public String getContent() {
    return content;
  }
}
(図123)

(1-3) リソースのコントローラー作成(MVCのC=Controller相当)

RESTful APIが受けるリクエストやレスポンスは、コントローラーを作って制御します。コントローラー部品には「@RestController」のアノテーションを付与します。下記のコントローラークラスが「/say_hello」に対するGETリクエストを処理します。
 

●追加場所

プロジェクトの以下のパスに追加します(先ほどのModelと同じ場所です)。
src/main/java/com/XXXX/YYYY/
 
※基本的に、XXXX=Groupの「com.」以降の値、YYYY=Artifactの値です。
 

●追加手順

・①追加対象フォルダを「右クリック」⇒「New」⇒「File」を選択
(図131)①

・②ファイル名を「SayHelloController.java」として「Finish」を押下
(図122)②

●サンプルプログラム(コントローラー)

package com.example.restservice;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SayHelloController {

  private static final String template = "Hello, %s!";
  private final AtomicLong counter = new AtomicLong();

  @GetMapping("/say_hello")
  public SayHello say_hello(@RequestParam(value = "name", defaultValue = "World") String name) {
    return new SayHello(counter.incrementAndGet(), String.format(template, name));
  }
}
(図123)

●サンプルプログラム説明
・「@GetMapping」アノテーションにより、HTTPの「GET」リクエストが「/say_hello」の「say_hello()」メソッドにマッピングされます。
・「@RequestParam」の役割はクエリパラメータ(name)を、say_hello()メソッドの引数「name」に組み込む事です。また、クエリパラメータ(name)がURLで与えられていない場合は、「defaltValue」に指定した値が使われます。
・「say_hello()」メソッドのボディ部の実装(「return new ~」の行)では、SayHelloクラスのインスタンスを生成して返却します。この中にはSayHelloクラスのメンバ変数である「id」と「name」が入っています。
 
ここまでで、プログラム自体の作成は完了で、後は次のステップで実行するのみです。
 
●(補足)従来のMVCコントローラーとRESTful APIのコントローラーの違い
上記の手順でMVCのController相当のクラスを作りましたが、これら従来のMVCのControllerと異なる点は何でしょうか?特に、HTTPレスポンスのボディ部の中身が異なります。従来のMVCでは画面描画はViewが担っており、HTMLの中に、今回で言う「Hello XXXX」の文言を埋め込んで表示していました。
 
(図133)

一方で、今回のRESTful APIおのコントローラーはオブジェクト(例:SayHello)を丸ごと、JSON形式にしてHTTPレスポンスで返却します。
(図134)
 

(1-4) アプリケーションの実行

作成したアプリケーションを次のコマンドで起動します。
 
・①プロジェクト資源のあるパスに移動します。
$ cd /[プロジェクト資源のあるパス]/
 
私の例では他のEclipseプロジェクトと同じ階層です。フォルダの中は下図のようになっています。
(図141)

・②Mavenのラッパーシェル実行
上記ディレクトリ配下の「mvnw」というシェルを次のように実行します。
 
$ ./mvnw spring-boot:run
 
この「mvnw」というシェルスクリプトはMavenのラッパー(=Mavenの機能含み、別の形態で提供する外包みのクラス・関数・ライブラリ等の事)であり、このシェルを使う事でMavenがインストールされていない環境においても、Mavenのプロジェクトを実行する事が可能になります。シェルを実行すると、正しいMavenのバージョンをホームディレクトリ等から自動で取得してくれます。
 
(図142)①

(図142)②

 
もし、起動時にエラーが出る場合は以下の記事もご参照ください。
 
⇒(参考)mvnwでMavenアプリケーション起動時のエラー対処方法(★エラー)

(1-5) 疎通確認

ブラウザから次のようなURLで、JSON形式の応答が返ってくれば成功です。
 
http://[サーバのホスト名]:8080/say_hello
(図151)

URLの最後にクエリパラメータ「name=XXXX」を追加して反映される事も確認します。

 
http://[サーバのホスト名]:8080/say_hello?name=XXXX
 
(図152)

Adsense審査用広告コード


Adsense審査用広告コード


-Java, JSP/Servlet

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Twitter APIのRate Limit Exceedエラー(code – 88)の意味について

  <目次> (1) Twitter APIのRate Limit Exceedエラー(code – 88)の意味について  (1-1) APIコールのリミット(Rate Limit)につい …

Javaで正規表現を使ってURLを文字列から検出する方法

<目次> (1) Javaで正規表現を使ってURLを文字列から検出する方法  (1-1) 構文  (1-2) 構文の説明  (1-3) サンプルプログラム  (1-4) ツールのご紹介 (1) Jav …

InputStreamやInputStreamReaderやBufferedReaderの機能や役割の違い+速度測定で比較をした結果共有

(0)目次&概説 (1) 記事の目的  (1-1) 目的  (1-2) 前提条件 (2) InputStreamやBufferedReaderとは?  (2-1) 概要  (2-2) InputStr …

JFreeChartで描画したグラフをJSP/Servlet画面に表示する方法

(0)目次&概説 (1) 記事の目的  (1-1) 目的 (2) 表示方法の概要  (2-1) 表示の仕組み  (2-2) 実装の手順 (3) サンプルプログラム  (3-1) JSPのサンプルプログ …

JavaのServletでフォーム認証(Form認証)をカスタム実装する方法

<目次> (1) JavaのServletでフォーム認証(Form認証)をカスタム実装する方法  (1-1) フォーム認証の概要  (1-2) フォーム認証をカスタムする際のポイント  (1-3) 構 …

  • English (United States)
  • 日本語
Top