header image
header image

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

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

 

こんばんは、 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());

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

books

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

ちなみにgitレポジトリも用意したので どうぞ。

https://github.com/version-1/kotlin-api-sample-

早速Kotlin+SpringBoot APIの説明

はじめに、ファイル構成を

Directory Structure

このように 以前の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

にアクセスすると

browser1

本の一覧が

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

browser2

 

指定したIDの本一件を取得することができます。以上、参照だけだと結構さっくり終わりますね。 次回は作成・更新・削除の部分を公開します。