Swift Academy · Урок

Маршрутизация и обработка запросов

Определяйте маршруты и обрабатывайте HTTP-запросы.

Урок 1 из 413 шагов

«Маршрутизация и обработка запросов» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Маршрутизация и обработка запросов
  2. Кодирование содержимого и JSON
  3. Fluent ORM и модели
  4. Промежуточное ПО и аутентификация
← Назад к Swift Academy