ACF2 HTTP Protocol ================== Load JavaScript client: req: GET / Start transaction: req: POST / resp: txn ID (in header as X-ACF-Transaction-ID) - use X-ACF-Transaction-ID in the header of any subsequent request to process it in the transaction's context Commit transaction: req: POST / X-ACF-Transaction-ID: Abort transaction: req: DELETE / X-ACF-Transaction-ID: Get object: req: GET /config/ resp: JSON object, with the following attributes: data: JSON serialization of object - primitive types as JSON primitives - references as path names (relative to scope) - models and collections as JSON objects or arrays with members as attributes: - primitive members as JSON primitives - reference, model, and collection members as path names meta: JSON object, with the following attributes - name (last component of path name) - ui-name (shown to user) - description (optional help text) - type (e.g. model, collection, reference, string, number, boolean) - widget (name of client-side JS module used to display the data) - required (boolean) - max-length - choices (optional array of allowed values) - ui-choices (user-friendly choices to be shown in combo boxes) - fields (model only): array of field metadata JSON objects - members (collection only): metadata for members (JSON object) - scope (references only): subtree where the reference can refer to Create/update object: req: PUT /config/ - body shall contain the object serialized as the data attribute in GET responses - undefined model attributes are deleted Delete object: req: DELETE /config/ Invoke object-specific action (not yet supported by server): req: POST /config// - arguments passed as a JSON array in body; serialization as in GET responses resp: action-specific JSON - for time-consuming actions, can return multiple JSON documents, each containing a status update