4.3 KiB
API Dash Validation Logging Implementation
Overview
This implementation addresses GitHub issues #906 and #587 by migrating validation warnings and errors from transient UI notifications to the persistent in-app logging console.
Changes Made
1. Enhanced collection_providers.dart
File: lib/providers/collection_providers.dart
Added validation logic in the sendRequest() method:
Validation Checks Implemented:
-
Empty URL Validation
- Level: Error
- Message: "Request URL is empty. Please provide a valid URL."
- Tags:
['request-validation', 'empty-url']
-
GET Request with Body Warning
- Level: Warning
- Message: "GET request contains a body. This may not be supported by all servers."
- Tags:
['request-validation', 'get-with-body'] - Trigger: When HTTP method is GET and request body is not empty
-
JSON Validation
-
Valid JSON (Debug):
- Level: Debug
- Message: "Request body contains valid JSON."
- Tags:
['request-validation', 'valid-json']
-
Invalid JSON (Error):
- Level: Error
- Message: "Invalid JSON in request body: [error details]"
- Tags:
['request-validation', 'invalid-json']
-
Trigger: When Content-Type is JSON and body is not empty
-
-
Request Validation Summary
- Level: Info
- Message: "Request validation completed for [METHOD] [URL]"
- Tags:
['request-validation', 'completed']
2. Added Import
Added: import 'package:better_networking/better_networking.dart';
- Required for accessing
HTTPVerb,ContentType, andkJsonDecoderconstants
Implementation Details
Code Location
The validation logic is inserted in the sendRequest() method right after the HTTP request model is prepared but before the actual network request is sent. This ensures:
- All request parameters are finalized
- Validation happens for every request
- Logs appear in the terminal before network activity
Terminal Integration
Uses the existing terminal logging system:
final terminal = ref.read(terminalStateProvider.notifier);
terminal.logSystem(
category: 'validation',
message: 'Validation message',
level: TerminalLevel.warn, // or error, info, debug
tags: ['request-validation', 'specific-tag'],
);
Testing Scenarios
Test Case 1: GET Request with Body
Setup:
- Method: GET
- URL: https://api.example.com/data
- Body:
{"key": "value"}
Expected Result:
- ⚠️ Warning log appears in terminal console
- Message: "GET request contains a body. This may not be supported by all servers."
Test Case 2: POST Request with Invalid JSON
Setup:
- Method: POST
- URL: https://api.example.com/data
- Content-Type: application/json
- Body:
{"key": "value", "invalid": }(missing value)
Expected Result:
- ❌ Error log appears in terminal console
- Message: "Invalid JSON in request body: [FormatException details]"
Test Case 3: Valid POST Request
Setup:
- Method: POST
- URL: https://api.example.com/data
- Content-Type: application/json
- Body:
{"key": "value", "number": 123}
Expected Result:
- ✅ Debug log: "Request body contains valid JSON."
- ℹ️ Info log: "Request validation completed for POST https://api.example.com/data"
Benefits
- Persistent Logging: Validation messages are now permanently logged in the terminal console
- Better Debugging: Developers can review all validation issues in one place
- Categorized Messages: All validation logs use consistent categorization and tagging
- Multiple Severity Levels: Warnings, errors, info, and debug messages appropriately categorized
- No UI Interruption: No more transient toasts or status bar messages that disappear
Migration Status
✅ Completed:
- GET request with body validation
- JSON validation for request bodies
- Empty URL validation
- Integration with existing terminal logging system
✅ Verified:
- No compilation errors
- Proper import statements
- Consistent logging format
- Appropriate severity levels
Future Enhancements
Potential additional validations that could be added:
- URL format validation
- Header validation
- Authentication parameter validation
- Request size limits
- Content-Type mismatch warnings