This describes how to use Live API Creator in the context of multiple (concurrent) developers.
Team Dev support is based on the following key concepts.
Recall that your API Definitions (resources, logic, security, filters, Data Explorer settings, etc) are stored in the Admin Database
(not as files). These settings are accessed via the Admin RESTful API.
Import / Export to JSON files
You can import / export your API project into a JSON file, which you can manage with existing tools for diffs, Source Control Systems etc.
The Admin CLI
provides convenient command-line access to the Admin API. This provides one way to script import / export operations.
, however, necessarily live outside API definitions. These therefore require special provisions to load and associate with API projects.
Custom Authentication Providers
Data Source Passwords
live inside projects, exporting their passwords would constitute a security breach. So, they are not exported. Consequently, you must reconfigure these when importing an API, or scripting the creation of an API.
Single Disconnected Developer
The degenerate case is, of course, a single developer. This is intended mainly for evaluations, training, and single person projects (e.g., explore a database using the Data Explorer).
The Admin database can of course be on a server, but it is usually more convenient to store it on your desktop. Some Live API Creator packages further facilitate this by using Derby, so you don't have to install a DBMS.
In any case, you can still import/export into JSON files, and utilize SCS systems (etc) as described above.
Multiple Connected Developers
Most projects engage multiple developers. The sub-sections (corresponding to the 1, 2, 3 in the diagram below) provide suggestions on how to coordinate their work.
Single Admin Database
In most projects, there is a shared Dev database (callout 1 in the diagram). In parallel, you create an Admin Database.
Both accessed concurrently by multiple developers. In addition to the SCS import / export, you may wish to back up the Admin Database.
Automatic Concurrency Management
To ensure that one Developer does not overwrite changes made by another, the system employs Optimistic Locking using the same services provided for user data. This is at a very low level of granularity - a single rule, a single Role Permission, a single Sub Resource level, etc.
This granularity means that actual conflicts are extremely unlikely. If they do occur, you get an optimistic locking violation when your press save. In such cases, make a record of your work, refresh, and re-apply (considering, of course, the changes made your colleague).
Continual Automated Integration
Saves are committed instantly to the Admin Database, and visible to your colleagues. They will be reflected in their testing. You will see colleague's changes when you click left navigation links (Rules, Resources, etc). You will, however, need to reload schema to see new database objects.
It is important to understand that the bulk of "integration" work is done by the system itself. In conventional programming, dependency management is manual. That is, each coding change must consider:
- How is the new code to be called
- In what order is the code executed
By contrast, Reactive Logic automates dependency management. For example:
- New rules and security settings are applied to all existing resources
- New rules are automatically invoked on update requests
- Rule execution is ordered by the system, by analyzing references to other data
As a result, it becomes safe to make and commit changes very rapidly.
Change Management - Resources
Source Control Integration - API Export
As noted above (callout 2
in the diagram), you can import / export
your Admin data to JSON files so they can be managed in SCS systems.
Life Cycle - Scripting API Creation with Admin CLI
Not strictly part of Team Development, but to coordinate developer activities, the following services are available.
enable developers to record why
a rule is defined. This can be invaluable in gaining an understanding of a system, e.g., when considering changes.