Extensibility

Extensibility
lac42
 
CA Live API Creator
 complements automation with provisions for extending:
 
 
3
 
 
Logic
You can meet requirements that are not solved by reactive logic by defining rules that can invoke JavaScript. 
CA Live API Creator
 applies table-based logic to updates on the table and to updates to the resources that you explicitly define over the table.
You can enhance and extend system automation for update and retrieval logic with procedural code using server-side JavaScript. Underlying these extensibility services is the JavaScript object model that 
CA Live API Creator
 creates from your schema. You specify the logic for event rules, formula rules, and validation rules in JavaScript.
JavaScript provides access to the following services:
  • Other JavaScript or Java logic running in the Java Virtual Machine (JVM), by way of Java or JavaScript libraries.
  • External services, by way of REST, Simple Object Access Protocol (SOAP), etc.
The JavaScript code that you write in API Creator runs on your servers. It has access to most of the resources on those servers, such as files and network interfaces. To limit the resources to which your code has access, install 
CA Live API Creator
 to run in a Java container or as a Docker container.
If you have multiple TeamSpaces defined with APIs running in these TeamSpaces, the JavaScript code that you write in API Creator can affect the performance of the APIs that are running in other TeamSpaces.
For more information:
  • About reactive logic, see Reactive Logic.
  • About how to define rules, see Rule Types.
  • About the JavaScript object model, including persistence-enabled row objects, see Row Objects.
Code Insertion Points
 
CA Live API Creator
 fires rules in an order that reflects their dependencies. This order changes as you alter rules and, therefore, affect their dependencies. By contrast, 
CA Live API Creator
 fires events at designated points in the request-processing cycle, as illustrated in the following image:
  code%20insertion%20points.png  
Custom Endpoints
While you define most RESTful endpoints as resources (tables, views, and stored procedures) or functions, you can build services, perhaps unrelated to your database objects, by adding custom endpoints. For example, you can add a custom endpoint that returns JSON or HTML responses or that returns results directly to the client.
For more information about how to determine which endpoint type to define for your API, see Customize your API.
Event Handlers
CA Live API Creator
 invokes event handlers before resource and logic processing begin. You can reformat the response message or the request information or you can log the requests.
For more information about event handlers, see Event Handlers.
JavaScript Resources
Automated SQL operations typically retrieve resources. Instead, you can create a JavaScript resource that 
CA Live API Creator
 executes whenever an API user accesses the resource and returns JSON. You can materialize data using JavaScript, for example, by invoking REST services to build a request that integrates data from other systems.
For more information about how to create a JavaScript resource, see Define JavaScript Resource Types.
Resource Row Events
CA Live API Creator
 invokes resource row events as it retrieves rows. For example, add attributes or filter the row. You can inject new attributes, remove attributes, or make REST calls and append the results.
For more information about resource row events, see Resource Row Events.
Row Logic Events
CA Live API Creator
 invokes event rules with the current/old rows and the current verb on POST, PUT, and DELETE operations. They can operate on the row, the results of which 
CA Live API Creator
 subjects to reactive logic.
For more information about how to create event rules, see Event Rule Types.
You can view an example of the JavaScript code for an event in the 
Demo
 API. Open the 
Audit Purchase Order amount changes
 event.
Invoke JavaScript from Reactive Logic
You specify JavaScript methods for reactive formula and validation expressions. You can access Java code from JavaScript. In the most common case, these are simple expression such as 
row.price * row.quantity
CA Live API Creator
 analyzes your JavaScript for dependencies to provide proper ordering.
You can build conditional logic or you can invoke standard functions such as date arithmetic using JavaScript. You can perform complex processing or you can invoke other SOA services or re-usable Java/JavaScript methods. 
CA Live API Creator
 analyzes the logic for dependencies which are reflected in proper execution order.
For more information:
  • About how 
    CA Live API Creator
     handles ordering and creates JavaScript rows for each base table, see Logic.
  • About how to create a formula rule, Formula Rule Type.
  • About how to specify validation using JavaScript, see Validation Rule Type.
  • About how to access Java code from JavaScript, see Logic Libraries.
Access JVM and Services
Whether you reach JavaScript by way of code insertion points, or reactive logic, you then have the flexibility to access code inside the JVM, or remotely available services.
You can also access Java code from JavaScript.
For more information about how to access Java code from JavaScript, see Logic Libraries.
The following diagram illustrates how server-side JavaScript addresses logic:
  CA Technologies  
System Variables and System Classes
The extension capabilities draw upon system variables and system classes. Discover these services using code completion. System variables define system state, for example, for the request and logic operation, and useful methods. System classes provide helper classes.
For more information about these system variables and classes, see Code Completion.
JavaScript System Variables
Your code requires the following system variables that are set when 
CA Live API Creator
 invokes JavaScript logic:
  • The 
    req
     object. This variable provides access to the API request, such as the current user and the url parameters.
    For more information about this object, see The req Object.
  • Row objects. 
     
    row
     is a JavaScript object representing the current row, with access to attributes and related data, and persistence (with logic enforcement).
    For more information about row objects, see Row Objects.
  • The 
    logicContext
     object. Logic context makes visible key aspects of logic execution.
    For more information about this object, see The logicContext Object.
For more information about the JavaScript context variables that are set when JavaScript logic is invoked, see Quick Reference Guide.
JavaScript System Classes
Your code requires the following JavaScript context variables to operate. 
CA Live API Creator
 initializes the following variables:
  • The 
    SysUtility
     object. You can invoke RESTful services from business logic or row events using the services that this object provides, such as the 
    restGet
    restPut
    restPost
    , and 
    restDelete
     methods.
    For more information about this context variable, see The SysUtility Object.
  • The 
    SysLogic
     object. You also have access to logic services, such as the 
    a
     
    llocateFromTo()
     and 
    InsertIntoFrom()
     methods.
    For more information about this context variable, see The SysLogic Object.
For more information:
Logic Libraries
JavaScript invocations typically provide the row and logic context for your programmatic access. In many cases, you can use libraries of existing functions, such as date routines. You can add libraries to your API.
For more information about logic libraries, see Logic Libraries.
Re-usable Rule Types
You can add new rule types to the core rules (such as formula, sum, and count, validation). You can define the parameters that the rule types accept. 
CA Live API Creator
 uses extended rules by using the parameters. You can detect logic patterns and you can implement re-usable solutions to these using the extended rule types.
For more information about viewing an illustration of how the 
InsertIntoFrom()
 system method and allocation rules use this underlying technology, see allocateFromTo System Method.
SQL Access
Your SQL operations are typically automated, but you can address more complex cases by overriding these defaults. You can define a Free SQL resource in API Creator.
For more information about how to define a Free SQL resource type, see Define Free SQL Resource Types.
Access SOAP Services
You can access SOAP services using Java libraries and return them as REST services in 
CA Live API Creator
.
For more information about viewing an example on how to expose SOAP endpoints and return them as REST responses using 
CA Live API Creator
, see the LAC-SOAP2REST example on GitHub.
Request Metadata
You can control processing at the request level. You can insert 
@metadata
 action tags to link child rows to parent rows, without the requirement for the client to supply 
autonum
 identifiers (which they may not know) using services. You can designate that request rows can result in either an update of an existing row, or if not present, the insertion of a new row by using related services.
For more information:
API Definition Access
You can retrieve information about an API, such as the list of entities and resources and their attributes, rather than actual data, using the system REST endpoints. 
CA Live API Creator
 provides these endpoints as metadata services.
For more information about how to retrieve information using these endpoints, see System REST Endpoints.
Customized Authentication
You can authorize API users using your existing security data, such as Lightweight Directory Access Protocol (LDAP), Microsoft Azure Active Directory (Azure AD), and OAuth, instead of requiring the user to reenter user lists that are maintained elsewhere.
You can customize authentication in the following ways:
  • By handling incoming requests to 
    CA Live API Creator
     using CA API Gateway.
    For more information about how to integrate  
    CA Live API Creator
     with CA API Gateway, see Integrate with CA API Gateway.
  • By authenticate API users using a custom authentication provider.
    For more information about how to authenticate API users using a custom authentication provider, see Configure Authentication.