【Spring Boot入門(4)】Rest API(GET)を作ってみる

はじめに

前回までで、Spring Bootの開発環境構築、とりあえずHello Worldで動作確認は完了しました。

今回からはSpring Bootで実際に開発していきます。

 

私が今回Spring Bootで開発を始めた理由は、フロントエンドのアプリから利用できる

Rest API作成がお手軽にできるのはSpring Boot!!!だからです。

 

ということで、

本記事ではSpring BootでRest API(GET)を作成する手順について説明します。

また、作成したAPIの動作確認として、

作成したAPIに対してブラウザからHTTPのGETメソッドでリクエストし、

JSON形式のレスポンスが返却されることも確認します。

 

絵にするとこんな感じ

 

 

 環境

  • OS:OS X 10.11 El Capitan
  • STS:3.8.4.RELEASE

 

前提

■Spring Bootの開発環境構築

 

■Lombokのインストール

参考

Eclipse:lombokインストール手順Web系開発メモ

 

 

Rest API(GET)作成手順

Rest API(GET)は以下の手順で行います。

  1. アプリの雛形プロジェクト作成
  2. API作成
  3. ローカルPCでAPサーバ起動

 

1.アプリの雛形プロジェクト作成

STSを起動し、右クリック>新規>Springスターター・プロジェクトを選択します。

 

名前に「rest-api」を入力し、「次へ」をクリックします。

 

DependenciesにWeb、H2、JPA、Lombokを追加し、「完了」をクリックします。

 

2.API作成

API作成では以下の作業を行います。

  • ドメイン・オブジェクト(Item.java)作成
  • リポジトリ・クラス(ItemRepository.java)作成
  • サービス・クラス作成(ItemService.java)作成
  • コントローラ(ItemController.java)作成
  • application.properties編集
  • data.sql作成

 

ドメイン・オブジェクト(Item.java)作成

src/main/java/com/example/domain/Item.java
package com.example.domain;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "items")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Item implements Serializable{
	@Id
	@GeneratedValue
	private Integer id;
	@Column(nullable = false)
	private String name;
	@Column(nullable = false)
	private Integer price;
	private String imgPath;
}
MEMO

@Dataについて

Lombokが@Dataを読み取って、ビルド時にクラスの各属性に対してgetterとsetterを自動生成してくれます。

 

@Entityについて

JPAがこのクラスはデータベースの世界のEntity(テーブル)に対応するクラスということを認識します。

さらに、どのテーブルに対応しているかは@Tableで記載します。今回はitemテーブルに対応しています。

 

テーブルからレコードを抽出したら、JPAがこのitemオブジェクトに値を入れてJavaの世界に渡してくれます。

 

リポジトリ・クラス(ItemRepository.java)作成

src/main/java/com/example/repository/ItemRepository.java
package com.example.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import com.example.domain.Item;

public interface ItemRepository extends JpaRepository<Item, Integer>{
}
MEMO
JpaRepositoryを継承することで、select、update、deleteなどの基本的なデータベース操作に対応するメソッドが利用できるようになります。

リポジトリクラスは1テーブルに対して1つ作成します。今回はitemテーブルに対応するリポジトリクラスです。

 

サービス・クラス作成(ItemService.java)作成

src/main/java/com/example/service/ItemService.java
package com.example.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.domain.Item;
import com.example.repository.ItemRepository;

@Service
public class ItemService {
	@Autowired
	ItemRepository itemRepository;
	
	public List<Item> findAll() {
		return itemRepository.findAll();
	}
	
}
MEMO

サービスクラスでは1つの機能を実現できる処理を作ります。今回はリポジトリクラスを利用してitemテーブルから全レコード取得する機能です。

作成したサービスはコントローラーからコールされます。

 

コントローラ(ItemController.java)作成

src/main/java/com/example/api/ItemRestController.java
package com.example.api;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.domain.Item;
import com.example.service.ItemService;

@RestController
@RequestMapping("api/items")
public class ItemRestController {
    @Autowired
    ItemService itemService;
    
    @GetMapping
    List<Item> getItems() {
        List<Item> customers = itemService.findAll();
        return customers;
    }

}
MEMO

@RequestMappingについて

コントローラへアクセスするためのリクエストURLを定義しています。

 

@GetMappingについて

メソッドとHTTPのGETメソッドを紐付けています。

今回はGETメソッドでHTTPリクエストされるとgetItemsメソッドが動きます。他にPostMapping、PutMappingなどがあります。

 

application.properties編集

src/main/resources/application.properties
spring.datasource.driver-class-name=net.sf.log4jdbc.DriverSpy
spring.datasource.url=jdbc:log4jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
logging.level.jdbc=OFF
logging.level.jdbc.sqltiming=DEBUG

 

data.sql作成

src/main/resources/data.sql
INSERT INTO items(name, price, img_path) VALUES('りんご', 100,  'apple.jpg');
INSERT INTO items(name, price, img_path) VALUES('ばなな', 200, 'banana.jpg');
INSERT INTO items(name, price, img_path) VALUES('みかん', 300, 'mikan.jpg');
INSERT INTO items(name, price, img_path) VALUES('ぶどう', 400, 'glape.jpg');
MEMO

ローカルPCでのサーバ起動時、このファイルに記載したSQLが実行されます。

 

以上でAPI作成は完了です。

API作成が完了するとプロジェクト構成は以下のようになります。

 

3.ローカルPCでAPサーバ起動

パッケージ・エクスプローラーでsrc/main/java/com/example/RestApiApplication.javaを右クリック>実行>Spring Boot アプリケーションでAPサーバを起動します。

 

Google Chromeで「http://localhost:8080/api/items」にアクセスします。

以上で、Spring BootによるRestAPI(GET)の作成は完了です。

 

 

おわりに

DB接続して、データをとって、それを返却するAPIを作成したので、なかなかやることが多かったですね、、

 

とにかくSpring BootでRest API(Get)が作れました。

同じ要領でDB更新、登録、削除を行うAPIも作れます。

 

また、フロントエンドのアプリからAPIをコールして取得したデータを画面に表示したりとかも次回以降解説したいと思います。

 

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください