SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Spring Bootで作るマイクロサービス

Spring BootでWeb APIを作ろう

Spring Bootで作るマイクロサービス 第4回


  • このエントリーをはてなブックマークに追加

 前回、サンプルアプリケーションを通じて、Spring Bootで利用する基本的なアノテーションについて紹介しました。今回も前回利用したサンプルアプリケーションを通じて、Web APIを実装する際に利用するアノテーションや必要となるSpring Bootの設定方法などを中心に紹介します。

  • このエントリーをはてなブックマークに追加

サンプルアプリケーションの概要

 サンプルアプリケーションは、前回と同様で図1に示すような簡単な住所録管理アプリケーションです。

図1:サンプルアプリケーションのイメージ
図1:サンプルアプリケーションのイメージ

 このアプリケーションでは、表1のAPIを提供します。

表1:提供するAPI
エンドポイント HTTPメソッド   概要 
/contact/add  POST 新規に連絡先データを登録する
/contact/list GET 登録してあるデータ一覧を取得する
/contact/item/{id} GET 指定したidの連絡先データ情報を取得する
/contact/item/{id} POST 指定したidの連絡先データ情報を更新する
/contact/item/{id}  DELETE  指定したidの連絡先データを削除する

Web APIを実装する(1)

 Spring BootでWeb(REST)システムを構築する場合には、Spring MVCを通常利用します。

Spring Bootを使わないSpring MVCの設定方法

 最初にSpring Bootを使わない場合のSpring MVCの設定方法を紹介します。

 Spring BootからSpring MVCを利用している場合には、Spring MVCがServletを利用したフレームワークであることをあまり意識せずに開発が可能です。

 最近のWebシステムでは、URLとそれに対応する処理を定義するスタイルで開発を進めるのが一般的であり、言語が異なってもおおよそ似た流れで開発が行えます。

 ただし、Servlet APIの知識があると開発していて何か悩んだ場合に、簡単に解決できることもあります。そのため、Spring MVCが通常のServlet APIとしてどのように設定されているのか、知識だけでも知っておくと良いでしょう。

 リスト1はSpring Bootを使わずに、Spring MVCを利用する場合の設定(web.xmlファイル)例です。

[リスト1]Spring Bootを使わない場合のWebコンテナに対してのSpring MVCの設定方法
<?xml version="1.0" encoding="ISO-8859-1"?>
// (省略)
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet  // (1) 利用するサーブレットクラス
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/dispatcher-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

// (2) URLと動作するサーブレットの関係
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
//  (省略)

 (1)では、Spring MVCのサーブレットであるDispatcherServletクラスを登録します。次に、(2)ですべてのパス("/")のリクエストを(1)で登録したサーブレットが処理をするように指定します。

 つまり、図2の関係でSpring MVCはサーブレットAPIを通じて実装されています。

図2:DispatcherServletクラスとSpring MVCとの関係
図2:DispatcherServletクラスとSpring MVCとの関係

Spring MVCのControllerを定義する

 Spring MVCのControllerを定義する場合には、@Controllerと@RequestMappingというアノテーションを使ってControllerを定義します。

 リスト2はサンプルアプリケーションでのControllerの定義例です。

[リスト2]Controllerの定義例(java/src/main/java/com/coltware/contacts/controller/ContactController.javaの抜粋)
@RestController      // (1) WEB Controllerとして機能するためのBean登録
@RequestMapping("/contact")  // (2) リクエストURLの指定
@Scope("request")    // (3) オブジェクトのスコープ
public class ContactController {
  // (省略)
}

 (1)では、@RestControllerというアノテーションを使っていますが、こちらはRest APIとして動作させるための@Controllerと@ResponseBodyを、1つのアノテーションとして指定しています。

 続いて、(2)ではリクエストURLの指定をします。最低これら2つの指定をしますが、(3)のようにControllerオブジェクトのライフタイムスコープについて指定することもあります。

リクエストURLを定義するアノテーション

 Spring MVCのリクエストとのマッピングを定義するには、@RequestMappingアノテーションを利用します。

 @RequestMappingアノテーションは、クラスとメソッドに指定が可能であり、クラスに指定する場合には図3のように各メソッドで指定するパスの親パスとして扱われます。また、表2のような属性が指定が可能です。

図3:RequestMappingでのクラスとメソッドの関係
図3:RequestMappingでのクラスとメソッドの関係
表2:RequestMappingで指定可能な属性
属性  概要
value(path) リクエストパス(pathというパラメータでも可能)
method  受け付けるHTTPメソッド(GET,POST,PUT,DELETEなど)
params 指定するリクエストパラメータの有無(Rest APIなどを実装する場合にはあまり利用しません)
headers  リクエスト時のヘッダの有無
consumes リクエストのContent-Typeの指定(Rest APIの場合には、application/jsonなどを指定する)
produces  リクエストのAcceptの値の指定

 リスト3はサンプルアプリケーションでの利用例です。

[リスト3]@RequestMappingの利用例(java/src/main/java/com/coltware/contacts/controller/ContactController.javaの抜粋)
// (1) 基本的な利用例
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = "application/json") 
// (2) PostMappingの利用例
//  @PostMapping(value = "/add",consumes = "application/json") 
// (3) パス指定だけのPostMappingの利用例
//  @PostMapping("/add")  
public Response addAction(@RequestBody(required = false) ContactModel item){
    //  (省略)
}

 (1)は、/contact/addというURLに対してPOSTメソッドでJSON形式のリクエストに一致します。また、POSTメソッドに対応する場合にはmethodを(2)のように、@PostMappingというアノテーションが利用可能です。

 同様に、GETメソッドでは@GetMapping、PUTメソッドでは@PutMapping、DELETEメソッドでは@DeleteMappingが利用可能です。

 また、パスだけの指定の場合には、(3)のように記述可能です。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
Web APIを実装する(2)

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Spring Bootで作るマイクロサービス連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11546 2020/06/01 18:54

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング