GraphQL библиотека Kotlin: полное руководство по работе с API
GraphQL — это язык запросов для API, который позволяет клиентам запрашивать только те данные, которые им действительно нужны. В экосистеме Kotlin существует несколько мощных библиотек для работы с GraphQL. В этой статье мы подробно разберем три основные библиотеки: graphql-kotlin, Apollo Kotlin и KGraphQL, а также покажем примеры их использования.
1. graphql-kotlin — серверная библиотека от Expedia Group
graphql-kotlin — это наиболее популярная библиотека для создания GraphQL серверов на Kotlin. Она полностью поддерживает все возможности GraphQL спецификации и отлично интегрируется с фреймворками Spring Boot, Ktor и Micronaut.
Установка и настройка
Для подключения библиотеки добавьте зависимость в build.gradle.kts:
dependencies {
// Основная библиотека
implementation("com.expediagroup:graphql-kotlin-spring-server:6.5.0")
// Для генерации схемы из аннотаций
implementation("com.expediagroup:graphql-kotlin-schema-generator:6.5.0")
}
Создание простого GraphQL API
Определим модель данных и resolver для запросов:
// Модель данных
data class User(val id: Int, val name: String, val email: String)
// Query resolver
class UserQuery : Query {
fun getUser(id: Int): User? {
return users.find { it.id == id }
}
companion object {
val users = listOf(
User(1, "Анна Петрова", "anna@example.com"),
User(2, "Иван Сидоров", "ivan@example.com")
)
}
}
// Mutation resolver
class UserMutation : Mutation {
fun createUser(name: String, email: String): User {
val newUser = User(users.size + 1, name, email)
users.add(newUser)
return newUser
}
}
Теперь зарегистрируем resolvers в конфигурации Spring Boot:
@Configuration
class GraphQLConfig {
@Bean
fun userQuery(): UserQuery = UserQuery()
@Bean
fun userMutation(): UserMutation = UserMutation()
}
Запросы к API
Пример GraphQL запроса:
query {
getUser(id: 1) {
name
email
}
}
Ответ будет содержать только запрошенные поля:
{
"data": {
"getUser": {
"name": "Анна Петрова",
"email": "anna@example.com"
}
}
}
2. Apollo Kotlin — клиентская библиотека для Android и JVM
Apollo Kotlin — это мощный GraphQL клиент, разработанный специально для Kotlin и Android. Он предоставляет типобезопасные запросы и автоматическую генерацию кода.
Подключение библиотеки
dependencies {
implementation("com.apollographql.apollo:apollo-runtime:3.8.0")
implementation("com.apollographql.apollo:apollo-normalized-cache-sqlite:3.8.0")
}
Создание запроса
Сначала определите GraphQL запрос в файле GetUserQuery.graphql:
query GetUser($id: Int!) {
getUser(id: $id) {
id
name
email
}
}
Затем используйте сгенерированный код в Kotlin:
val apolloClient = ApolloClient.builder()
.serverUrl("http://localhost:8080/graphql")
.build()
suspend fun fetchUser(userId: Int): User? {
val response = apolloClient
.query(GetUserQuery(userId))
.execute()
return response.data?.getUser?.let { user ->
User(
id = user.id,
name = user.name,
email = user.email
)
}
}
3. KGraphQL — легковесная библиотека для Ktor
KGraphQL — это минималистичная библиотека для создания GraphQL серверов в приложениях на Ktor. Она идеально подходит для микросервисов.
Пример использования
// Определение схемы
val schema = graphql {
query("hello") {
resolver { -> "Hello, World!" }
}
query("users") {
resolver { -> listOf("Анна", "Иван", "Мария") }
}
}
// Интеграция с Ktor
fun Application.graphQLModule() {
install(ContentNegotiation) {
json()
}
routing {
post("/graphql") {
val request = call.receive<GraphQLRequest>()
val result = schema.execute(request.query)
call.respond(result)
}
}
}
Сравнение библиотек
- graphql-kotlin — лучший выбор для создания полноценного сервера с поддержкой всех
Также в библиотеке
Геолокация и карты в PHP: обзор библиотек и инструментов
Puppeteer для JavaScript (Node.js): полное руководство с примерами
Обработка JSON в Kotlin: библиотеки и примеры кода
PDF генерация в Rust: обзор библиотек и инструментов для создания PDF-документов
Миграции баз данных в Go: обзор инструментов и практик