...
Development of modules within the circulation domain started early in FOLIO's overall development, meaning it is they are some of the oldest modules and integrate heavily with other older modules.
Historical Constraints
When FOLIO started, it began with some constraints that were applied when these modules were developed.
...
- Business logic and storage are split in two separate modules (in order to support independent substitution)
- All integration between modules is done via HTTP APIs (proxied via Okapi)
- A record oriented design with a single source of truth for each record (business logic / storage separation not-withstanding)
- Business logic must the most current state for decisions
Expectations
A checkout (including the staff member scanning the item barcode) must complete within 1 second (from the documented /wiki/spaces/DQA/pages/2658550). It is stated that this includes the time for a person to scan the barcode (presumably of the item).
...
At the moment, the average request takes 62ms, which is more than double the budget we have available. Whilst there are some outliers that push up this number, I think this indicates the degree of challenge we have with the current approach.
...
Improve the performance of individual downstream requests
Characteristics
- Retains the same amount of downstream requests (
- Any single request can
Combine downstream requests for related records into a single request
Introduces context-specific APIs that are intended for specific use.
It may not make sense to combine all of the record types from a single single module. For example,
Characteristics
- Limited to reducing Reduces the quantity amount of individual requests (and hence the Okapi overhead)
- Requires at least one downstream requests per destination module
- Requires at least one database query per downstream module
- Reduction in downstream requests is limited to number of record types within a single module
- Increases the number of amount of APIs to maintain
- Increases the coupling between the storage and business logic modules (by introducing context-specific specialized APIsthe clients context into the other module)
- Increases the coupling between the record types involved (e.g. it's harder to move record types, changes to them ripple across APIs)
- Increases the amount of APIs to maintain
- Requires at least one downstream requests per destination module
- Requires at least one database query per downstream module
Copy data needed into circulation
...