Kotlin + Spring Boot で Web APIを作成してみる。 ~その①~

2018年8月26日

 

こんばんは、
3連休でどこも出かけなかった
@version1
です。

 

もう少し有意義に過ごせたのでは、
という思いは募る一方ですが、
それは置いておいて久しぶりにKotlinに関する記事です。

(3連休でこれしか更新していない・・・
+CRUD全てをAPIからできるようにしたかったけど
終わらなかった。。)

タイトルもその①としたように、
今回はAPIで本のリストと、ID指定した本一件を
jsonで返却するAPIまでです。

 

そのほかの、作成・削除・更新
いつの日か更新します!!
(8割くらいはできているんだけど、詰めの部分でまだあげられないとして
今回の記事からは外しました。)

ではでは早速行きましょう。

 

 

前提条件

使用する構成はいつもの通りです。

Framework: Spring Boot
Language: Kotlin
Database: Mysql
Build: Gradle

 

データベースは
booksテーブルだけで、
これをKotlin+SpringBootでこねこねして
jsonで返却するの今回のミッションになります。

 

 

ちなみに今回使用するテーブルは
SQLだと以下のようになります。

 

create table if not exists books (
  id int primary key,
  name varchar(255),
  author varchar(255),
  isbn varchar(255),
  category_id int,
  created_at datetime,
  updated_at datetime
);

delete from books;
insert into books
VALUES( 1 , '多動力' ,'堀江貴文', '9784344031159', 1 , NOW() , NOW()),
( 2 , 'キングダム47巻' ,'原泰久', '9784088907017', 2 , NOW() , NOW()),
( 3 , '深夜特急〈1〉香港・マカオ (新潮文庫)' ,'沢木耕太郎', '9784101235059', 3 , NOW() , NOW());

 

 

イメージが湧きづらい人用に
一覧ページも作成しました。

kotlin api を説明する上でイメージを沸かせるための画面。本一覧。

↑この一覧がJSON形式で取得できれば成功です。

 

 

ちなみにgitレポジトリも用意したので
どうぞ。
https://github.com/version-1/kotlin-api-sample-

 

 

早速Kotlin+SpringBoot APIの説明

 

 

はじめに、
ファイル構成を
kotlin+SpringBoot APIのファイル構成

このように
以前のKotlinシリーズでもおなじみの
構成となっております。

わからない方はこちらが参考になるかと思います。
Kotlin + Spring boot で DBからデータ取得して画面に表示

 

 

はい、
では下が実際のコードです。

BookController

@Controller
class BookController @Autowired constructor(private val bookService: BookService) {

    @RequestMapping("/books")
    fun index(): ModelAndView = ModelAndView("/book/index").apply { addObject("books", bookService.findAllBook()) }

    @RequestMapping("/api/books")
    fun api_index(): ResponseEntity<MutableList> {
        return ResponseEntity.ok(bookService.findAllBook())
    }
    @RequestMapping("/api/books/{id}")
    fun api_show(@PathVariable("id") id : Int): ResponseEntity {
        return ResponseEntity.ok(bookService.findById(id))
    }

}

 

それぞれなんてことはないコードですね。

 

個人的な今回の学びは、
URLから値をとってくるのに

@RequestMapping("/api/books/{id}")
    fun api_show(@PathVariable("id") id : Int): ResponseEntity {

のようにかけることと

ResponseEntityクラスを使うとクラスをそのまま
jsonにして返却できることですかね。

 

 

ちなみに
springを起動して
http://localhost:8080/api/booksにアクセスすると
本のリストのJSONレスポンス

 

 

本の一覧が

http://localhost:8080/api/books/1にアクセスすると

本のID指定のJSONレスポンス

 

指定したIDの本一件を
取得することができます。

以上、
参照だけだと結構さっくり終わりますね。
次回は作成・更新・削除の部分を公開します。