Маршрутизация и обработка запросов
Определяйте маршруты и обрабатывайте HTTP-запросы.
«Маршрутизация и обработка запросов» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
Что такое Vapor
Vapor — популярный серверный веб-фреймворк для Swift, построенный на SwiftNIO. Он позволяет полностью на Swift писать HTTP-серверы — API и веб-сайты, используя тот же язык и даже общие модели с Вашим приложением для iOS.
import Vapor
let app = try await Application.make(.detect())Приложение и маршруты
Объект Application — сердце сервера Vapor. В нём регистрируются маршруты: соответствия HTTP-метода и пути обработчику, который возвращает ответ.
app.get("hello") { req in
"Hello, world!"
}Вспомогательные методы HTTP
Vapor предоставляет вспомогательный метод для каждого глагола HTTP: app.get, app.post, app.put, app.patch и app.delete. Каждый из них принимает компоненты пути и обработчик.
app.post("users") { req in
"Created a user"
}
app.delete("users") { req in
"Deleted a user"
}Сегменты пути
Передайте несколько строковых сегментов, чтобы создать вложенные пути. Приведённый ниже вызов отвечает на запрос GET /api/v1/status.
app.get("api", "v1", "status") { req in
"OK"
}Параметры маршрута
Используйте сегмент с двоеточием в начале, чтобы получить динамическое значение. Прочитайте его из запроса с помощью req.parameters.get(_:). В приведённом ниже примере запрос к /users/42 извлекает значение 42.
app.get("users", ":id") { req -> String in
let id = req.parameters.get("id") ?? "unknown"
return "User id is " + id
}Типизированные параметры
Вы можете преобразовать параметр в конкретный тип, передав этот тип в get. Если преобразование не удаётся, Vapor автоматически возвращает ответ 404, благодаря чему обработчики остаются простыми.
app.get("posts", ":id") { req -> String in
let id = try req.parameters.require("id", as: Int.self)
return "Post number " + String(id)
}Параметры запроса
Читайте элементы запроса URL через req.query. Для /search?term=swift Вы можете сразу декодировать параметр term. Отсутствующие необязательные значения просто возвращаются как пустые.
app.get("search") { req -> String in
let term = try req.query.get(String.self, at: "term")
return "Searching for " + term
}Группы маршрутов
Объединяйте связанные маршруты с общим префиксом с помощью app.grouped(...). Это избавляет от повторения компонентов пути и объединяет связанные конечные точки.
let users = app.grouped("users")
users.get { req in "List users" } // GET /users
users.post { req in "Create user" } // POST /usersВозврат ответов разных типов
Обработчик может возвращать String, HTTPStatus, пользовательский тип Content или полностью созданный Response. Vapor знает, как преобразовать каждый из них в ответ HTTP.
app.delete("cache") { req -> HTTPStatus in
// clear something
return .noContent // 204
}Выбрасывание ошибок с помощью Abort
Выбросьте Abort(_:), чтобы прервать обработку запроса с определённым статусом HTTP и необязательным пояснением. Vapor преобразует его в понятный ответ с ошибкой в формате JSON.
app.get("secret") { req -> String in
guard req.headers.first(name: "X-Key") == "open" else {
throw Abort(.forbidden, reason: "Missing key")
}
return "Welcome"
}Асинхронные обработчики
Vapor 4 и более поздние версии полностью поддерживают async/await. Пометьте замыкание обработчика как асинхронное и используйте внутри него try await для работы с базой данных или сетью.
app.get("ping") { req async throws -> String in
try await Task.sleep(for: .milliseconds(10))
return "pong"
}Быстрая проверка: маршрутизация
Проверьте свои знания маршрутизации.
Итоги: маршрутизация и обработка запросов
Теперь Вы умеете настраивать сервер Vapor:
- Регистрируйте маршруты с помощью
app.get/post/put/patch/deleteи сегментов пути. - Получайте динамические значения с помощью
:paramи читайте их черезreq.parameters, используя типизацию с помощьюrequire(_:as:). - Читайте элементы запроса из
req.queryи объединяйте маршруты с помощьюgrouped. - Возвращайте строки, статусы или содержимое; выбрасывайте
Abortдля обработки ошибок; используйте асинхронные обработчики.
Изучай Swift с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 122
- Уроки
- 409
Часто задаваемые вопросы
Урок «Маршрутизация и обработка запросов» бесплатный?
Да — полный текст урока «Маршрутизация и обработка запросов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.
Чему я научусь в уроке «Маршрутизация и обработка запросов»?
Определяйте маршруты и обрабатывайте HTTP-запросы. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Маршрутизация и обработка запросов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Маршрутизация и обработка запросов
- Кодирование содержимого и JSON
- Fluent ORM и модели
- Промежуточное ПО и аутентификация