Я много раз пытался спроектировать API для своих приложений, и это всякий раз заканчивалось разочарованием по одной из этих причин:
- Недостаточное понимание языка или фреймворка.
- Неготовность платить за хостинг до запуска проекта.
- Платформа без поддержки масштабирования.
Так что, столкнувшись со всеми этими проблемами, я решил написать REST API на Kotlin, используя фреймворк Spring Boot, а также Gradle в качестве поставщика зависимостей (вместо Maven). Как Android-разработчик, я уже знаком с Kotlin и Gradle. Spring Boot же, с другой стороны, предоставляет способ быстрой настройки API, а также содержит встроенный Tomcat. Еще одна сильная сторона Spring Boot — активное сообщество пользователей, которое уже имеет опыт в решении проблем масштабирования.
1. Создаем проект Spring Boot через генератор проектов Spring Boot со следующими параметрами.
На картинке видны параметры, которые использовал я. Пока что не нужно добавлять никаких зависимостей — этим займемся позже. Нажимаем на “Сгенерировать” (Generate) и получаем zip-файл с пустым проектом.
2. Открываем сгенерированный проект в IntelliJ Idea
На всякий случай: вот содержимое моего файла build.gradle.kts
— просто чтобы убедиться, что все мы видим одно и то же. Благодаря знакомству с Gradle, мы можем распознать здесь такие элементы, как плагин Kotlin и зависимости, а также Java 1.8, благодаря которому в нашем проекте доступны функции языка Java 8.
3. Создаем первый контроллер
Контроллер — то, что обрабатывает запрос от клиента и возвращает ответ с требуемой информацией. Здесь вы найдете больше подробностей о контроллерах Spring.
Начнем с того, что добавим зависимости для всех веб-ресурсов Spring Boot (включая контроллеры) в наш build.gradle.kts
:
implementation("org.springframework.boot:spring-boot-starter-web" )
После синхронизации Gradle перейдем к нашему классу HelloController
. В демонстрационных целях я включил сюда несколько примеров того, как добавлять параметры, отправлять ответы со статусом 200 с объектами JSON, а также ошибки с пользовательскими сообщениями.
package com.cvillaseca.mobileapi.controller
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RequestMethod
import org.springframework.web.bind.annotation.RestController
import kotlin.reflect.jvm.internal.impl.load.kotlin.JvmType
@RestController
@RequestMapping("/mobileApi")
class HelloController {
@RequestMapping(value = ["/helloWorld"], method = [(RequestMethod.GET)])
fun getHelloWordMessage(): ResponseEntity<String> =
ResponseEntity.ok("Hello World")
@RequestMapping(value = ["/helloWorld/{name}"], method = [(RequestMethod.GET)])
fun getHelloWordMessageWithName(
@PathVariable("name") name: String
): ResponseEntity<Any> =
if (name != "Cristian") {
ResponseEntity.ok(
HelloResponse(
message = "Hello $name",
name = name
)
)
} else {
ResponseEntity.badRequest().body("I am Cristian")
}
}
data class HelloResponse(
val message: String,
val name: String
)
Чтобы убедиться, что наш первый веб-сервис работает, нам сначала нужно развернуть его на своей локальной машине. Это мы можем сделать, запустив команду gradle bootRun
. После этого проверяем, что всё работает ожидаемым образом, используя curl
.
curl --location --request GET 'http://localhost:8080/mobileApi/helloWorld'
Если вы предпочитаете графический интерфейс, а также хотите, чтобы ваши API оставались организованными и синхронизированными, рекомендую тестировать API с помощью бесплатной программы Postman. На картинке ниже вы можете увидеть, как протестировать контроллер, который мы только что создали.
Вот и всё!
Читайте также:
- Как спроектировать REST API для выполнения системных команд с помощью Actix Rust
- Развёртывание модели машинного обучения в виде REST API
- Миграция REST API на GraphQL
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Cristian Villaseca: How to create a REST API for your App with Spring Boot, Kotlin & Gradle (Part 1: Initial setup & Controller)