Requests

Request contracts are the foundation of type-safe input validation in Azu. They define exactly what data your endpoints expect and automatically validate incoming requests.

What are Request Contracts?

A request contract is a type-safe object that:

  • Defines Input Structure: Specifies what fields are expected

  • Validates Data: Automatically validates incoming data

  • Provides Type Safety: Ensures compile-time type safety

  • Generates Errors: Produces detailed validation error messages

Basic Request Contract

struct CreateUserRequest
  include Azu::Request

  getter name : String
  getter email : String
  getter age : Int32?

  def initialize(@name = "", @email = "", @age = nil)
  end

  # Validation rules
  validate name, presence: true, length: {min: 2, max: 50}
  validate email, presence: true, format: /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
  validate age, numericality: {greater_than: 0, less_than: 150}, allow_nil: true
end

Key Components

  1. Module Include: include Azu::Request

  2. Property Declarations: Define expected fields with types

  3. Initializer: Set default values for optional fields

  4. Validation Rules: Define validation constraints

Field Types

Request contracts support all Crystal types:

Basic Types

Optional Fields

Array Fields

Hash Fields

Validation Rules

Azu provides comprehensive validation rules:

Presence Validation

Length Validation

Format Validation

Numerical Validation

Inclusion Validation

Exclusion Validation

Custom Validation

Error Messages

Customize validation error messages:

Nested Objects

Handle complex nested data structures:

Array Validation

Validate arrays of objects:

Conditional Validation

Apply validation rules conditionally:

Data Sources

Request contracts can parse data from different sources:

JSON Data

Form Data

Direct Initialization

Validation Methods

Check validation status and access errors:

Error Handling

Handle validation errors in your endpoints:

Testing Request Contracts

Test your request contracts:

Best Practices

1. Use Descriptive Names

3. Use Appropriate Types

4. Provide Default Values

5. Use Meaningful Validation Messages

Next Steps

Now that you understand request contracts:

  1. Response Objects - Structure your API responses

  2. Endpoints - Use request contracts in your endpoints

  3. Validation - Advanced validation techniques

  4. Testing - Test your request contracts

  5. Error Handling - Handle validation errors gracefully


Request contracts provide the foundation for type-safe, validated input handling in Azu applications. With comprehensive validation rules and clear error messages, they ensure data integrity and improve developer experience.

Last updated

Was this helpful?