Web Service APIs
There are two primary ways to interact with Adaptive Framework over the network. The traditional RESTful way allows you to send standard HTTP operations to the server and get status and results back with the appropriate content-type. This method is uri-based, like a typical RESTful service and the HTTP operations map onto the adaptor_session interface methods. Using the RESTful interface is particularly useful for web-based applications that are accustomed to RESTful ways to interact with object data.
REST
The following table describes each HTTP Request and its corresponding adaptor session method that is invoked:
| Method | URI | Adaptor Function | 
|---|---|---|
| GET | /adaptorId/objectType[;options]/objectId | get_object() | 
| GET | /adaptorId/objectType[;options]/[queryCriteria] | retrieve_objects() | 
| PUT | /adaptorId/objectType/objectId | replace_object() | 
| POST | /adaptorId/objectType/ | add_object() | 
| POST | /adaptorId/objectType/objectId | modify_object() | 
| DELETE | /adaptorId/objectType/objectId | delete_object() | 
    
            HTTP GET requests act as both get_object() and 
            retrieve_objects() adaptor session calls, depending on the HTTP URI 
            that is specified. All HTTP URIs must specify an adaptorId. When an Object Type and 
            Object Id are also supplied, the GET is treated as a get_object().  
            When just the adaptorId and Object Type are specified, the GET request is treated as a 
            retrieve_objects() call.  
        
Query Criteria
    
            For retrieve_objects() calls, you may also specify a query criteria, which is passed along 
            to the retrieve_objects(). This is useful if you need to narrow down the search xctx of 
            the retrieve_objects(), or use an index to obtain performance.
        
Object Options
For both GET requests, you may additionally specify object options to instruct the server on how to construct the object or objects that are being returned. For a complete list of options, see the Object Type description for _AdaptiveQueryCriteria_.
Content Types
Adaptive Framework can be configured for a variety of content types, each of which can be used in the RESTful request/response by specifying the appropriate value for the HTTP Header Content-Type.
    
            It's very easy to demonstrate how to use the RESTful API, using the command-line tool, curl.  
            If you are running afwfcgi and have Apache or Nginx setup on the 
            traditional Secure HTTP port 443, and you wanted to get the object afw of type 
            _AdaptiveAdaptor_, from the core adaptor, afw, 
            and you wanted it to be formatted with whitespace, you could run the following:
        
curl https://localhost/afw/_AdaptiveAdaptor_;whitespace/afw
{
    "adaptorId": "afw",
    "metrics": {
        "addObjectCount" : 0,
        "deleteObjectCount": 0,
        "getObjectCount": 38422,
        "modifyObjectCount": 0,
        "replaceObjectCount": 0,
        "retrieveObjectsCount": 2370,
        "updateObjectCount": 0
    },
    "properties":{
        "contextualLabel": "Core afw adaptor",
        "adaptorId": "afw",
        "adaptorType": "afw_runtime",
        "type": "adaptor"
    },
    "referenceCount": 3,
    "serviceId": "adaptor-afw"    
}
Perform Actions
    
            The second way to interact with Adaptive Framework remotely is to send 
            HTTP POST payloads to the core adaptor and specify which adaptive functions 
            and parameters you'd like to interact with. This method requires clients 
            to generate and receive payloads, but it offers some 
            functionality that's not available through traditional REST. For example, 
            you can invoke any adaptive function through, not just adaptor session ones.  
            To use this technique, simply use HTTP POST actions to the Core adaptor, 
            afw, along with a payload to instruct the server which 
            adaptive function to invoke and all of its parameters.
        
Request Format
{
    "actions": [
        {
            "adaptorId": <adaptorId>,
            "function": <adaptive_function_id>
            <parameters...>
        },
        ...
    ]
}Response Format
{
  "actions": [
      "status": <status_level>,
      {
          "status": <status_level>,
          "result": <result>
      },
      ...
  ]
}
Examples
The following section provides some code samples for how to use a tool such as CURL to interact with adaptive framework by creating, modifying and and retrieving objects in different ways.
Add Object
curl -H 'Content-Type: application/json' \
     -H 'Accept: application/json' \
     -X POST http://localhost/vault/users \
     -d @- <<EOF 
{
    "firstName": "John",
    "lastName": "Doe",
    "email": "john.doe@myorg.org"
}
EOFRetrieve Objects
curl -H 'Content-Type: application/json' \
     -H 'Accept: application/json' \
     http://localhost/vault/users;whitespace;objectId/?firstName=JohnGet Object
curl -H 'Content-Type: application/json' \
     -H 'Accept: application/json' \
     http://localhost/vault/users;whitespace;objectId/1234567890Replace Object
curl -H 'Content-Type: application/json' \
     -H 'Accept: application/json' \
     -X PUT http://localhost/vault/users/1234567890 \
     -d @- <<EOF 
{
    "firstName": "Joe",
    "lastName": "Doe",
    "email": "joe.doe@myorg.org"
}
EOFModify Object
curl -H 'Content-Type: application/json' \
     -H 'Accept: application/json' \
     -X POST http://localhost/vault/users/1234567890 \
     -d @- <<EOF 
[
    [
        "set_property",
        "firstName",
        "John"
    ],
    [
        "remove_property",
        "lastName",
        "email"
    ]        
]
EOFDelete Object
curl -H 'Content-Type: application/json' \
     -H 'Accept: application/json' \
     -X DELETE http://localhost/vault/users/1234567890