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
endKey Components
Module Include:
include Azu::RequestProperty Declarations: Define expected fields with types
Initializer: Set default values for optional fields
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
2. Group Related Fields
3. Use Appropriate Types
4. Provide Default Values
5. Use Meaningful Validation Messages
Next Steps
Now that you understand request contracts:
Response Objects - Structure your API responses
Endpoints - Use request contracts in your endpoints
Validation - Advanced validation techniques
Testing - Test your request contracts
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?
