🍇

Kotlin Spring GraphQL

2024/07/02に公開

対象者

  • Kotlin Springに興味ある人
  • IntelliJ IDEAを操作したことがある人

サーバーサイド Kotlinなるものに興味があってやってみた✨
今回は、 GraphQLを使ってみる!

チュートリアル通りにやれば進めることはできる。
https://www.youtube.com/watch?v=1hGdovDwhPA

こちらのサイトでプロジェクトのテンプレートを作成する。
https://start.spring.io/

zipファイルをダウンロードして、IDEで開く。ダウンロードしてない人はこちら
https://www.jetbrains.com/ja-jp/idea/

こちらのプラグインも追加しておく

こちらが完成品

プロジェクトの説明

動画のチュートリアルを参考にプロジェクトのテンプレートを作成して、GraphQLで、クエリ、ミューテーションができるところまで進めていきます。

application.propertiesを設定

#spring.application.name=demo
spring.graphql.path=/graphql
spring.graphql.graphiql.enabled=true

schema.graphqlsを作成して、スキーマを定義する

type Query {
    getPosts: [Post]!
    recentPosts(limit: Int!, offset: Int!): [Post]!
}

type Mutation {
    createPost(title: String!, description: String): Post!
}

type Post {
    id: ID!
    title: String!
    description: String
}

queryディレクトリを作成してその中に、PostResolver.ktを作成する。ここに今回は、GraphQLを操作するメソッドを定義します。

package com.jboycode.demo.query

import org.springframework.graphql.data.method.annotation.Argument
import org.springframework.graphql.data.method.annotation.MutationMapping
import org.springframework.graphql.data.method.annotation.QueryMapping
import org.springframework.stereotype.Controller
import java.util.UUID

@Controller
class PostResolver {

    @QueryMapping
    fun getPosts(): List<PostDto> {
        return listOf(
            PostDto(
                id = UUID.randomUUID(),
                title = "test title",
                description = "some description"
            )
        )
    }

    @QueryMapping
    fun recentPosts(@Argument limit: Int, @Argument offset: Int): List<PostDto> {
        return listOf(
            PostDto(
                id = UUID.randomUUID(),
                title = "test title",
                description = "some description"
            ),
            PostDto(
                id = UUID.randomUUID(),
                title = "second test title",
                description = "second some description"
            )
        )
    }

    @MutationMapping
    fun  createPost(@Argument title: String, @Argument description: String?): PostDto {
        return PostDto(
            id = UUID.randomUUID(),
            title = title,
            description = description
        )
    }
}

data class PostDto(
    val id: UUID,
    val title: String,
    val description: String? = null
)

Runボタンを押してこちらのURLへいけば、ブラウザで、GraphQLを操作することができます。
http://localhost:8080/graphiql?path=/graphql

感想

サーバーサイドで、Kotlinを使ったことがなくてモバイルでしか経験がなかったもので、どんな感じかなと使ってみたのですが、Java Spring Boot よりはコードが読みやすく使いやすかったですね✨
暇な時に、サーバーサイド Kotlin を勉強してみようかなと思いました笑

Discussion