Swift Vapor Web Development Context

Comprehensive context for developing web applications with Swift and Vapor framework

Download

How to use this context:

  1. Click the "Copy Context" button above
  2. Paste it into your AI assistant conversation
  3. The AI will use this context to provide more accurate and relevant responses

Swift Vapor Web Development Context

Overview

This context provides comprehensive guidance for developing web applications using Swift and the Vapor framework. Vapor is a server-side Swift web framework that provides a beautifully expressive and easy-to-use foundation for websites, APIs, and cloud projects.

Core Concepts

Project Structure

  • Sources/App: Main application code
  • Sources/Run: Entry point for the application
  • Resources/Views: Leaf templates for HTML rendering
  • Resources/Public: Static assets (CSS, JS, images)
  • Tests: Unit and integration tests

Key Components

Models

  • Use Content protocol for codable models
  • Implement init(from decoder:) for custom decoding
  • Use CodingKeys for JSON mapping

Controllers

  • Implement RouteCollection protocol
  • Register routes in boot(routes:) method
  • Use async/await for request handlers

Middleware

  • Authentication middleware for protected routes
  • FileMiddleware for serving static files
  • Custom middleware for cross-cutting concerns

Best Practices

Error Handling

throw Abort(.notFound, reason: "Resource not found")

Request Validation

struct CreatePostRequest: Content {
    let title: String
    let content: String
}

let request = try req.content.decode(CreatePostRequest.self)

Database Queries (if using Fluent)

let posts = try await Post.query(on: req.db)
    .filter(\.$isPublished == true)
    .sort(\.$createdAt, .descending)
    .all()

Session Management

req.session.data["userId"] = user.id.uuidString
let userId = req.session.data["userId"]

Configuration

Environment Variables

  • Use Environment.get() for configuration
  • Store sensitive data in environment variables
  • Use .env file for local development

Deployment

  • Docker containerization recommended
  • Use multi-stage builds for smaller images
  • Configure for cloud platforms (Azure, AWS, Heroku)

Testing

Unit Tests

@Test("Test route handler")
func testRouteHandler() async throws {
    try await withApp { app in
        try await app.test(.GET, "/path") { res in
            #expect(res.status == .ok)
        }
    }
}

Integration Tests

  • Test complete request/response cycles
  • Mock external dependencies
  • Test error scenarios

Security Considerations

  • Always validate and sanitize user input
  • Use HTTPS in production
  • Implement rate limiting for APIs
  • Hash passwords with bcrypt
  • Use CSRF tokens for forms
  • Validate file uploads

Performance Optimization

  • Cache frequently accessed data
  • Use pagination for large datasets
  • Optimize database queries
  • Enable compression middleware
  • Use CDN for static assets

Common Patterns

RESTful API Design

  • GET /resources - List all
  • GET /resources/:id - Get single
  • POST /resources - Create new
  • PUT /resources/:id - Update
  • DELETE /resources/:id - Delete

Error Response Format

{
    "error": true,
    "reason": "Detailed error message"
}

Debugging Tips

  • Use req.logger for logging
  • Enable debug mode in development
  • Use breakpoints in Xcode
  • Monitor memory usage
  • Profile with Instruments

Resources

API Access

GET /api/contexts/swift-vapor-development JSON metadata + content
GET /api/contexts/swift-vapor-development/raw Raw markdown