Introduction
The views allow to get information on any resource available in Wedia repository. It is a selection of the properties of a unit object in Wedia as well as the properties of the related objects.
Configuration
To each view are an identifier and a JSON configuration associated.
JSON example
{ "objectname": "asset", "query": "", "orderby":"pcreated desc", "secured":true, "max":0, "from":0, "fulltext":"", "props": [ "id", "name", "status.id", "status.name" ], "aggs": { "category": { "props":["id","name","status.id"] } } }
Properties and sections
objectname: String - Object name (type)
description: String - Short description of view
query: String - Selection query (SQL syntax)
11.19 parameterizedQuery: String or Object - Selection query as SQL syntaxe or JSON Query (allowing among other things to make the query parameterisable)
orderby: String - Sorting algorithm (SQL syntax)
11.10 sortbyrelevance: Boolean - (Relevant only if query is fulltext) Indicate if results are sorted first by relevance (true) or not (false). Default to true
11.10 sortbyrelevanceiforderby: Boolean - (Relevant only if query is fulltext) this property allows to deactivate sorting by relevance if an order by clause is configured. If this property is false, sortbyrelevance must be explicity to true to get result sorted by relevance if there is an order by set. Default to true.
Secured: Boolean - Indicate if we apply (true) or not (false) the security. Default to true
max: Integer - The maximum number of instance to export at each call (page size)
from: Integer - The index of the first instance to get (0 based index)
fulltext: String - A text based search criteria
props: Array of Strings - defines attributes that should be retrieved
It is possible to export the properties of a linked object by adding a ‘.’ between the name of the property and the property name of the related object.
E.g. for the name of the object, the status name of the object, and the status color code: [“name”, “status.name”, “status.color.name”].aggs: Object<String, Object<String, Array of Strings>Aggregates section
Keys represent attributes on which aggregation informations should be computed. Array<String> represents list of properties that should be gathered for each aggregation result.
header: allows to add custom information regarding the service
11.18 queryPolicies: object - allows you to manage rights on the requestable fields
11.18 queryPoliciesByRoles: Object<string, object> - allows you to manage rights on the requestable fields, depending of role of the surfer
EndPoints
Two endpoints are available:
To get a view
To get the list of available views
EndPoint: Get a view
11.14
GET http://host:port/app/api/json/view/{viewName}{/id}
HEAD http://host:port/app/api/json/view/{viewName}{/id}
11.12
GET http://host:port/app/api/json/view
Legacy endpoint:
http://host:port/app/_plugins/WXM_RESTAPI/page/view.jspz
Supported methods: GET, HEAD
Parameters
viewName: String - View identifier
props: String - Comma separated names and properties (only properties available in the view can be requested, if blank all properties will be displayed)
query: String - A selection request following JSON type specific language (to combine with the configured request). For long requests (above URL maximum length), request can be defined in the header X-WEDIA-QUERY, or in the body of the request (supported content types: application/json, text/json)).
orderby - String (SQL syntax): Sorting algorithm
11.10 sortbyrelevance: Boolean - Overrides sortbyrelevance from configuration
secured: boolean - To apply or not the security (if configuration is applied, then security must be applied)
fulltext: String - The text based search criteria
from: Integer - Number of the first requested object
max: Integer - Maximum number of the requested objects
rawValues Boolean - Indicates if we apply the localization (false by default)
headers: Boolean - Indicates if headers are required (Cf. hereafter, response format) (false by default)
aggHeaders: Boolean - Indicates if aggregates headers are separated from or mixed with properties headers (true by default)
11.10.2 id (or form_id): String - single resource query (without aggregates)
Response format
{ "viewname": "name of the view", "headers": { "Property name": { "name": "localized label of the property", "type": "type of property" }, "Name of object property": { "name": "localized label of the property", "type": "type of the property", "view": "Mapped view nam", "properties": { "Name of the property": { "name": "localized label of the property", "type": "type of the property" } } } }, "header": {},//the header section in the configuration "request": { "context": { // configuration information result "secured": false, "props": [] }, "parameters": { // Request parameters "viewname": "Name of the view", "headers": "true" } }, "response": { // The response "context": { // the configuration of the view "objectname": "the type of object", // hidden in production mode "query": "the JSON SQL query", //hidden in production mode "orderby": "Sorting algorithm", "props": { "Property name" }, "secured": true, "max": 20, "from": 0 }, "data": [ // the data { // one object per instance "Name of the property": <value of the property>, } ] }, "links": { // hypertext links "href": "http://…", // the link to get the same view in the same way "previous": "http:/…", // the link to get the previous data page "first": "http:/…", // the link to get the first data page "next": "http:/…", // the link to get the next data page }, "status": "", // the http status of the response "time": "" // The execution time }
The property types are:
number (JSON type)
string (JSON type)
boolean (JSON type)
object (JSON type)
timestamp (Javascript timestamp )
resource (for a file)
separator (for a separator)
Example
{ "objectname": "user", "orderby": "", "props": [ "id", "created", "name", "status.id", "status.name" ], "query": "", "secured": true, "aggs": { "fields": { "status": { "props": [ "Id", "name", "color.name" ] } }, "limit": 0 } }
Request
http://host:port/app/_plugins/WXM_RESTAPI/page/view.jspz?viewname=userview&headers=true
Result
{ "viewname": "userview", "headers": { "id": { "name": "id", "type": "number" }, "created": { "name": "created on", "type": "timestamp" }, "status": { "name": "Status", "type": "object", "view": "userstatusview", "properties": { "id": { "name": "id", "type": "number" }, "name": { "name": "User name", "type": "string" }, "color": { "name": "Color", "type": "string", "properties": { "name": { "name": "Name", "type": "string" } } }, "header": null, "request": { "context": { "secured": false, "props": [] }, "parameters": { "headers": "true", "viewname": "test" } }, "response": { "context": { "aggs": { "limit": 20, "fields": { "status": { "props": [ "id", "name" ] } } }, "objectname": "user", "orderby": "", "props": [ "id", "created", "name", "status.id", "status.name" ], "secured": true, "max": 20, "from": 0 }, "data": [ { "id": 4, "created": 1315522800000, "status": { "id": 2, "name": "Inactive" }, "name": "controller" }, { "id": 9, "created": 1354662000000, "status": { "id": 2, "name": "Inactive" }, "name": "designer" }, { "id": 1, "created": 1019084400000, "status": { "id": 6, "name": "Active" }, "name": "developer" }, { "id": 6, "created": 1354662000000, "status": { "id": 2, "name": "Inactive" }, "name": "documentalist" }, { "id": 3, "created": 1320274800000, "status": { "id": 6, "name": "Active" }, "name": "Example Groupe" }, { "id": 8, "created": 1354662000000, "status": { "id": 2, "name": "Inactive" }, "name": "marketingmanager" }, { "id": 7, "created": 1354662000000, "status": { "id": 2, "name": "Inactive" }, "name": "projectmanager" }, { "id": 5, "created": 1339974000000, "status": { "id": 2, "name": "Inactive" }, "name": "webmaster" }, { "id": 2, "created": 1315350000000, "status": { "id": 2, "name": "Inactive" }, "name": "writer" } ], "total": 9, "aggregates": { "status": [ { "count": 7, "data": { "id": 2, "name": "Inactive" } }, { "count": 2, "data": { "id": 6, "name": "Active" } } ] } }, "links": { "href": "http://localhost:8080/Engine/_plugins/WXM_RESTAPI/page/view.jspz?viewName=userview&headers=true", "previous": null, "next": "http://localhost:8080/Engine/_plugins/WXM_RESTAPI/page/view.jspz?viewName=userview&from=20&headers=true" }, "status": 200, "time": 104 } } } }
Security
The view action from RESTAPI domain allows management of the endpoint call. There are two parameters:
surfer: surfer
viewName: the view identifier
Errors codes
HTTP Code | API Code | Definition |
---|---|---|
404 | 404/100 | Unknown view |
403 | 403/100 | Unreachable view (forbidden) |
404 | 404/900 | Object not found (single resource access) |
EndPoint: list of available views
11.12
GET http//host:port/app/api/json/catalog/view
Legacy endpoint:
http//host:port/app/_plugins/WXM_RESTAPI/page/catalog/view.jspz
Supported methods: GET, HEAD
Parameters
viewName: String - an optional Regular Expression filter (all accessible views are displayed by default)
headers: Boolean - Indicates if headers are required (Cf. hereafter, response format) (false by default).
Response format
{ "catalog": "list of views", "request": { "parameters": { "headers": "true" } }, "response": { "data": { "name": "view name", "properties": [ "name of property 1", "name of property 2", "name of property 3" ], "headers": { "Name of property": { "name": "localized label of the property", "type": "type of the property" } } } }, "links": { "href": "http://host:port/app/_plugins/WXM_RESTAPI/page/catalog/view.jspz?headers=true" } }
Security
The catalog action of the RESTAPI domain allows management of the endpoint call authorisation. There are two parameters:
surfer: surfer
endPoint: view value.
Errors codes
HTTP Code | API Code | Definition |
---|---|---|
403 | 403/101 | Unreachable catalog (forbidden) |
Views mapping
Introduction
The view mapping allows association to object types with views. Hence it is possible to know the appropriate view to determinate the link type property value depending on its nature (related object type).
The view mapping are shared between views and tree structure views: beware not to have a similar name for two views (usual or tree structure).
Configuration
We can:
Associate an object nature with a view;
For a specific view, associate a nature with this view, this association has an higher priority than above;
For a specific view, and for an object property of this view, associate the nature with this view, this association has an higher priority than both above
JSON Example
{ "nature1": "view1", "nature2": { "": "view2", "view3": "view4", "view5": { "": "view6", "prop1": "view7", "prop2": "view8" } } }
For a x objet having prop1 property of child type and nature1 nature: the associated view will be view1, whatever the view where the object is.
For a x object x having prop1 property of child type and nature2 nature:
in the view view5, the associated view is view7
In the view view3, the associated view is view4
In all other views, the associated view is view2
For a x object having prop3 property of child type and nature2 nature:
in the view view5, the associated view is view6
In the view view3, the associated view is view4
In all other views, the associated view is view2