This page covers advanced APIJSON features and optimization techniques for production deployments, including caching strategies, performance tuning, distributed query execution, conditional operations, and transaction management. For basic CRUD operations and protocol syntax, see APIJSON Protocol. For security features, see Security and Access Control.
APIJSON provides several advanced mechanisms to handle complex requirements in production environments:
WITH AS) and query profiling.@url directives for microservices integration.These features are primarily implemented in the core ORM components: AbstractParser APIJSONORM/src/main/java/apijson/orm/AbstractParser.java39-40 AbstractSQLExecutor APIJSONORM/src/main/java/apijson/orm/AbstractSQLExecutor.java28-29 and AbstractSQLConfig APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java27-28
APIJSON implements a two-layer caching architecture to minimize redundant database queries and optimize reference resolution. For details, see Caching Strategies.
Diagram: APIJSON Two-Layer Cache Implementation
Sources:
APIJSON provides several mechanisms to tune query performance, ranging from static configuration flags to advanced SQL features like CTEs and UNION. For details, see Performance Optimization.
The AbstractSQLConfig class provides static fields to control SQL generation and query behavior globally:
| Static Field | Type | Default | Purpose | Location |
|---|---|---|---|---|
ENABLE_WITH_AS | boolean | false | Enable CTE (Common Table Expressions) | APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java45 |
IS_HAVING_DEFAULT_AND | boolean | false | Use AND instead of OR for @having | APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java35 |
MAX_WHERE_COUNT | int | 10 | Max WHERE conditions per query | APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java62 |
MAX_COMBINE_DEPTH | int | 2 | Max nesting depth for @combine | APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java63 |
Sources:
APIJSON tracks execution metrics in AbstractSQLExecutor APIJSONORM/src/main/java/apijson/orm/AbstractSQLExecutor.java47-74 to help identify bottlenecks. These include generatedSQLCount APIJSONORM/src/main/java/apijson/orm/AbstractSQLExecutor.java52-54 executedSQLCount APIJSONORM/src/main/java/apijson/orm/AbstractSQLExecutor.java60-62 and executedSQLDuration APIJSONORM/src/main/java/apijson/orm/AbstractSQLExecutor.java67-69 Global limits for query depth and count are enforced in AbstractParser.
Distributed query support allows an APIJSON server to act as a gateway, forwarding specific object requests to remote APIJSON servers. For details, see Distributed Queries.
Execution Flow and Code Association:
Diagram: Distributed Query Forwarding Logic
Sources:
APIJSON supports flexible constraints for mutation operations and a robust "Fake Delete" (soft delete) mechanism to preserve data. For details, see Conditional Operations and Fake Delete.
AbstractParser manages the validation lifecycle and supports ignoring empty or blank strings during operations via IGNORE_EMPTY_STRING_METHOD_LIST APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java50-55
Fake delete is implemented by defining keys for the deleted status in AbstractSQLConfig APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java57-59 This allows the engine to transform DELETE requests into PUT updates or automatically filter out "deleted" records from GET results.
| Key | Purpose |
|---|---|
KEY_DELETED_KEY | The column name representing deletion status (e.g., "isDeleted") |
KEY_DELETED_VALUE | The value representing a deleted state (e.g., 1 or true) |
KEY_NOT_DELETED_VALUE | The value representing an active state (e.g., 0 or false) |
Sources:
APIJSON provides automated transaction management for complex multi-statement operations. For details, see Transaction Management.
The transaction flow is managed within AbstractParser.
POST, PUT, DELETE).executeUpdate APIJSONORM/src/main/java/apijson/orm/AbstractSQLExecutor.java150-153Mutation operations (POST, PUT, DELETE) are executed via executeUpdate, while queries use executeQuery APIJSONORM/src/main/java/apijson/orm/AbstractSQLExecutor.java145-148 The executor tracks executedSQLCount APIJSONORM/src/main/java/apijson/orm/AbstractSQLExecutor.java49 and duration APIJSONORM/src/main/java/apijson/orm/AbstractSQLExecutor.java64 to monitor transaction performance.
Sources:
Refresh this wiki