Expand description
§API Versioning Infrastructure
Production-grade API versioning system for SciRS2
Core providing semantic
versioning, backward compatibility guarantees, and version negotiation
capabilities for enterprise deployments and long-term API stability.
§Features
- Semantic versioning (
SemVer
) compliance with custom extensions - Backward compatibility enforcement and validation
- API version negotiation and client-server compatibility
- Breaking change detection and migration assistance
- Version deprecation management with transition periods
- API evolution tracking and documentation generation
- Enterprise-grade stability guarantees
- Integration with CI/CD pipelines for automated compatibility testing
§Modules
semantic
: Semantic versioning implementation withSciRS2
extensionscompatibility
: Backward compatibility checking and enforcementnegotiation
: Version negotiation between clients and serversmigration
: Migration assistance for API upgradesdeprecation
: Deprecation management and transition planning
§Example
use scirs2_core::versioning::{Version, VersionManager, CompatibilityLevel, ApiVersionBuilder, ClientCapabilities};
// Create version manager
let mut version_manager = VersionManager::new();
// Register API versions using the builder pattern
let v1_0_0 = ApiVersionBuilder::new(Version::parse("1.0.0")?)
.new_feature("Initial API release")
.build()?;
let v1_1_0 = ApiVersionBuilder::new(Version::parse("1.1.0")?)
.new_feature("Added new computation methods")
.build()?;
let v2_0_0 = ApiVersionBuilder::new(Version::parse("2.0.0")?)
.breaking_change("Changed function signatures")
.build()?;
version_manager.registerversion(v1_0_0.clone())?;
version_manager.registerversion(v1_1_0.clone())?;
version_manager.registerversion(v2_0_0.clone())?;
// Check compatibility
let compat = version_manager.check_compatibility(&v1_0_0.version, &v1_1_0.version)?;
assert_eq!(compat, CompatibilityLevel::BackwardCompatible);
// Negotiate version with client capabilities
let client_caps = ClientCapabilities::new("test_client".to_string(), Version::parse("1.0.5")?);
let negotiated = version_manager.negotiateversion(&client_caps)?;
assert!(negotiated.negotiated_version.major() >= 1);
Re-exports§
pub use compatibility::CompatibilityChecker;
pub use compatibility::CompatibilityLevel;
pub use compatibility::CompatibilityReport;
pub use deprecation::DeprecationManager;
pub use deprecation::DeprecationPolicy;
pub use deprecation::DeprecationStatus;
pub use migration::MigrationManager;
pub use migration::MigrationPlan;
pub use migration::MigrationStep;
pub use negotiation::ClientCapabilities;
pub use negotiation::NegotiationResult;
pub use negotiation::VersionNegotiator;
pub use semantic::Version;
pub use semantic::VersionBuilder;
pub use semantic::VersionConstraint;
pub use semantic::VersionRange;
Modules§
- compatibility
- Backward Compatibility Checking
- deprecation
- Deprecation Management
- migration
- Migration Management
- negotiation
- Version Negotiation
- semantic
- Semantic Versioning Implementation
Structs§
- ApiVersion
- API version information with metadata
- ApiVersion
Builder - Builder for creating API versions
- Maintenance
Report - Maintenance report for version management operations
- Version
Manager - Version manager for coordinating all versioning operations
- Version
Statistics - Version statistics for monitoring and reporting
Enums§
- Stability
Level - API stability levels
- Support
Status - Support status for API versions