Kotlin + Spring Bootで簡単なAPIを作ってみた
Java
Kotkin
はじめに
もはや説明する必要もないくらい、Kotlinは色んなサービスや Android アプリで広く使われています。 僕も一度は触ってみたかったので、使ってみようと思いました。
使うフレームワークは Spring Boot です。
java が動く環境や IntelliJ IDEA は用意できている前提で書いていきます。
ゴール
curl -H “Content-Type: application/json” -X POST -d ‘{[{データ 1},{データ 2}]}’ http://localhost:8080/create-order, と叩くと、DB(MySQL)に保存される
curl http://localhost:8080/item/[値],と叩くと DB(MySQL)から[値]に対応した Json データを返す
動作確認
Spring Iinitializr
まずは、こちらでアプリケーションの雛形を作っていきましょう。 Dependencies で、
Spring WEB
Spling Data JPA
MySQL Driver
を選択します。
雛形をダウンロードできたら、IntelliJ IDEA で開きましょう。
Controller の作成
com.example.demo に controller パッケージを作り、 DemoController.kt を作成します。
package com.example.demo.controller
import com.example.demo.repository.DemoRepository
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.*
@RestController
@RequestMapping("/api")
class DemoController(private val demoRepository: DemoRepository) {
@GetMapping("/hello")
fun createNewDemo(): ResponseEntity<String> =
ResponseEntity.ok("Hello World.")
}
サーバー起動
動かすとサーバーが起動します。 ターミナルで、 curl http://localhost:8080/api/hello と入力すると、「Hello World.」と表示されます。 これで動作確認できましたね!
API の作成
MySQL との連携
MySQL の環境は各自で用意お願いします。 私は、Docker で MySQL のコンテナを立ち上げてます。
application.properties に MySQL と接続する設定を書いていきます。
spring.datasource.url = jdbc:mysql://localhost:13306/root?useSSL=false
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto = update
Model の作成
com.example.demo に model パッケージを作り、 Demo.kt を作成します。
package com.example.demo.model
import javax.persistence.*
@Entity
@Table(name = "test")
data class Demo(@Id @GeneratedValue var id: Long? = 0,
@Column(nullable = false) var name: String = "",
@Column(nullable = false) var num: Int = 0) {
}
Repository の作成
com.example.demo に repository パッケージを作り、 DemoRepository.kt を作成します。
package com.example.demo.repository
import com.example.demo.model.Demo
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.stereotype.Repository
@Repository
interface DemoRepository: JpaRepository<Demo, Long>
Controller 変更
先ほど作成した DemoController.kt を MySQL の情報を返すように変更します。
package com.example.demo.controller
import com.example.demo.model.Demo
import com.example.demo.repository.DemoRepository
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.*
@RestController
@RequestMapping("/api")
class DemoController() {
@GetMapping("/item/{num}")
fun getDemoById(@PathVariable(value = "num") number: Int): ResponseEntity<Demo> {
val res = demoRepository.findAll().filter { el -> el.num == number }
if (res.isNotEmpty()) res.forEach{ e -> return ResponseEntity.ok(e) }
return ResponseEntity.notFound().build()
}
@PostMapping("/create-order")
fun createNewDemo(@RequestBody data: Demo): Demo =
demoRepository.save(data)
}
サーバー起動
動かすとサーバーが起動します。 ターミナルで、
$ curl -H "Content-Type: application/json" -X POST -d '{"name": "hoge", "num": 10}' http://localhost:8080/api/create-order
$ curl -H "Content-Type: application/json" -X POST -d '{"name": "hogehoge", "num": 100}' http://localhost:8080/api/create-order
と打つと、MySQL に保存され、
$ curl http://localhost:8080/api/item/10
と打つと、先ほど保存したデータで、 "num" が 10 のデータが返ってきます。 これで完成ですね!
まとめ
Pure Javaと比較すると、非常に簡単に API を作ることができました。
やはり、Kotlinは、Java をもっと簡単に安全にというのを実際に感じれたなと思います。
大学の研究では、C++を使っているため、Java には大きな壁を感じませんでした。 そのため、Kotlin もすぐ扱えたのかなといった感じですかね
とはいえ、言語にプラスして、ライブラリやフレームワークの使い方が大事になってくるので、実際に開発するときはもっと勉強して慣れてからでないとって感じですね