Я много раз пытался спроектировать API для своих приложений, и это всякий раз заканчивалось разочарованием по одной из этих причин:
Так что, столкнувшись со всеми этими проблемами, я решил написать REST API на Kotlin, используя фреймворк Spring Boot, а также Gradle в качестве поставщика зависимостей (вместо Maven). Как Android-разработчик, я уже знаком с Kotlin и Gradle. Spring Boot же, с другой стороны, предоставляет способ быстрой настройки API, а также содержит встроенный Tomcat. Еще одна сильная сторона Spring Boot — активное сообщество пользователей, которое уже имеет опыт в решении проблем масштабирования.
На картинке видны параметры, которые использовал я. Пока что не нужно добавлять никаких зависимостей — этим займемся позже. Нажимаем на “Сгенерировать” (Generate) и получаем zip-файл с пустым проектом.
На всякий случай: вот содержимое моего файла build.gradle.kts — просто чтобы убедиться, что все мы видим одно и то же. Благодаря знакомству с Gradle, мы можем распознать здесь такие элементы, как плагин Kotlin и зависимости, а также Java 1.8, благодаря которому в нашем проекте доступны функции языка Java 8.
Контроллер — то, что обрабатывает запрос от клиента и возвращает ответ с требуемой информацией. Здесь вы найдете больше подробностей о контроллерах Spring.
Начнем с того, что добавим зависимости для всех веб-ресурсов Spring Boot (включая контроллеры) в наш build.gradle.kts:
После синхронизации 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.
Если вы предпочитаете графический интерфейс, а также хотите, чтобы ваши API оставались организованными и синхронизированными, рекомендую тестировать API с помощью бесплатной программы Postman. На картинке ниже вы можете увидеть, как протестировать контроллер, который мы только что создали.
Вот и всё!
Перевод статьи Cristian Villaseca: How to create a REST API for your App with Spring Boot, Kotlin & Gradle (Part 1: Initial setup & Controller)
Комментарии