Witboost Extension Points API
Witboost is an extensible platform which give developers the possibility to bring in their own technologies and organizational processes.
This requires the implementation of specific extension points API contracts that are listed here. Before proceeding into the implementation of any of those, please take a look also at the Witboost Starter Kit which is a comprehensive set of open source integrations that are available out-of-the-box, leaving you with just the deployment of those integrations in your infrastructure.
Through this page you will be able to better understand the extension points that are available in the Witboost platform.
Extension points can be classified into these categories.
Provisioning Experience extension points:
- Tech Adapter API: integrates a specific technology into Witboost
- Data Catalog Plugin API: provision and unprovision metadata into a third-party Data Catalog during the deployment phase of a resource through Witboost
- Marketplace Plugin API: publish resources in the Witboost Marketplace or to third-party marketplaces.
Governance Experience extension points:
- Remote Engine API: handle requests from the Computational Governance Platform to validate resources using any language or runtime of your choice.
- Perimeter Resolver API: supply resources to the Computational Governance Platform from catalogs or entities repositories.
Platform Experience extension points:
- Custom URL Picker API: provide selectable options to templates through the use of the Custom URL Picker.
- Webhook Notifications API: send notifications to external services when specific events occur in Witboost.
- Remote Request Hook API: forward access control requests, or other requests which require third-party approvals, to an external ticketing system for evaluation.
A Tech Adapter is responsible for integrating a specific technology into Witboost.
By implementing this Open API contract, the Tech Adapter microservice can be used by the Witboost platform to deploy, undeploy, and eventually manage the access control list of the technology components.
Once you deploy the Tech Adapter microservice, you can register it in the Witboost platform using the Builder API. The API is also used to validate the provisioning descriptors and to execute reverse provisioning operations.
Validate a provisioning request (async)
Start a validation process with the input descriptor and return a token that can be used to check the status of the validation process.
You want to implement this endpoint to assess that the provided resource descriptor conforms to the expected structure and has all the necessary information to be deployed on the infrastructure.
Implementing the asynchronous endpoint rather than the synchronous one is highly recommended even if the validation operation is not time-consuming.
Request Body schema: application/jsonrequired
Details of a provisioning request to be validated
descriptorKind required | string Enum: "DATAPRODUCT_DESCRIPTOR" "COMPONENT_DESCRIPTOR" "DATAPRODUCT_DESCRIPTOR_WITH_RESULTS" It can change according to the descriptor kind:
|
descriptor required | string Resource descriptor in YAML format. Its structure changes according to If a component is dependent on another one, the COMPONENT_DESCRIPTOR descriptor will be enriched with the Provisioning Info of the dependency component. This does NOT apply to validation endpoints |
latestEnrichedDescriptor | string Filled only in case of provision/unprovision requests. System descriptor enriched with provisioning info generated during the latest (successful or failed) provisioning/unprovisioning operation for each component. If available, provisioning information is reported in the Please note that the information contained in a |
removeData required | boolean Default: false If true, when a component is undeployed, its underlying data will also be deleted |
Responses
Request samples
- Payload
{- "descriptorKind": "DATAPRODUCT_DESCRIPTOR",
- "descriptor": "dataProduct:\n id: urn:dmb:dp:finance:a-system:0\n components: \n - id: urn:dmb:dp:finance:a-system:0:component:0\n name: S3 storage\n description: A system that does something\n kind: storage\n version: 0.0.1\n - id: urn:dmb:dp:finance:a-system:0:component:1\n name: A system that does something\n description: A system that does something\n kind: outputport\n version: 0.0.1\nremoveData: false",
- "removeData": false
}
Response samples
- 202
- 400
- 500
"3da5d0a2-9f3b-4a11-85a3-b5ddb73da032"
Get status of an async validation task
path Parameters
token required | string Example: 3da5d0a2-9f3b-4a11-85a3-b5ddb73da032 Token obtained after a call to the async validate endpoint |
Responses
Response samples
- 200
- 400
- 500
{- "status": "COMPLETED",
- "info": {
- "publicInfo": {
- "valid": true
}
}
}
Validate a provisioning request (sync)
Synchronously validate a provisioning request and return the validation result.
You want to implement this endpoint to assess that the provided resource descriptor conforms to the expected structure and has all the necessary information to be deployed on the infrastructure.
It is highly recommended to implement the asynchronous validation endpoint instead of this one.
Request Body schema: application/jsonrequired
Details of a provisioning request to be validated
descriptorKind required | string Enum: "DATAPRODUCT_DESCRIPTOR" "COMPONENT_DESCRIPTOR" "DATAPRODUCT_DESCRIPTOR_WITH_RESULTS" It can change according to the descriptor kind:
|
descriptor required | string Resource descriptor in YAML format. Its structure changes according to If a component is dependent on another one, the COMPONENT_DESCRIPTOR descriptor will be enriched with the Provisioning Info of the dependency component. This does NOT apply to validation endpoints |
latestEnrichedDescriptor | string Filled only in case of provision/unprovision requests. System descriptor enriched with provisioning info generated during the latest (successful or failed) provisioning/unprovisioning operation for each component. If available, provisioning information is reported in the Please note that the information contained in a |
removeData required | boolean Default: false If true, when a component is undeployed, its underlying data will also be deleted |
Responses
Request samples
- Payload
{- "descriptorKind": "DATAPRODUCT_DESCRIPTOR",
- "descriptor": "dataProduct:\n id: urn:dmb:dp:finance:a-system:0\n components: \n - id: urn:dmb:dp:finance:a-system:0:component:0\n name: S3 storage\n description: A system that does something\n kind: storage\n version: 0.0.1\n - id: urn:dmb:dp:finance:a-system:0:component:1\n name: A system that does something\n description: A system that does something\n kind: outputport\n version: 0.0.1\nremoveData: false",
- "removeData": false
}
Response samples
- 200
- 500
{- "valid": true
}
Provision a resource
Deploy a system or a single component starting from its descriptor.
The descriptor is a YAML file that describes the resource to be deployed. The structure of the descriptor changes according to the descriptorKind
field.
Request Body schema: application/jsonrequired
descriptorKind required | string Enum: "DATAPRODUCT_DESCRIPTOR" "COMPONENT_DESCRIPTOR" "DATAPRODUCT_DESCRIPTOR_WITH_RESULTS" It can change according to the descriptor kind:
|
descriptor required | string Resource descriptor in YAML format. Its structure changes according to If a component is dependent on another one, the COMPONENT_DESCRIPTOR descriptor will be enriched with the Provisioning Info of the dependency component. This does NOT apply to validation endpoints |
latestEnrichedDescriptor | string Filled only in case of provision/unprovision requests. System descriptor enriched with provisioning info generated during the latest (successful or failed) provisioning/unprovisioning operation for each component. If available, provisioning information is reported in the Please note that the information contained in a |
removeData required | boolean Default: false If true, when a component is undeployed, its underlying data will also be deleted |
Responses
Request samples
- Payload
{- "descriptorKind": "DATAPRODUCT_DESCRIPTOR",
- "descriptor": "dataProduct:\n id: urn:dmb:dp:finance:a-system:0\n components: \n - id: urn:dmb:dp:finance:a-system:0:component:0\n name: S3 storage\n description: A system that does something\n kind: storage\n version: 0.0.1\n - id: urn:dmb:dp:finance:a-system:0:component:1\n name: A system that does something\n description: A system that does something\n kind: outputport\n version: 0.0.1\nremoveData: false",
- "removeData": false
}
Response samples
- 200
- 202
- 400
- 500
{- "status": "COMPLETED",
- "info": {
- "publicInfo": {
- "valid": true
}
}
}
Unprovision a resource
Undeploy a system or a single component starting from the latest provisioned descriptor.
The descriptor is a YAML file that describes the resource to be deployed. The structure of the descriptor changes according to the descriptorKind
field.
Request Body schema: application/jsonrequired
descriptorKind required | string Enum: "DATAPRODUCT_DESCRIPTOR" "COMPONENT_DESCRIPTOR" "DATAPRODUCT_DESCRIPTOR_WITH_RESULTS" It can change according to the descriptor kind:
|
descriptor required | string Resource descriptor in YAML format. Its structure changes according to If a component is dependent on another one, the COMPONENT_DESCRIPTOR descriptor will be enriched with the Provisioning Info of the dependency component. This does NOT apply to validation endpoints |
latestEnrichedDescriptor | string Filled only in case of provision/unprovision requests. System descriptor enriched with provisioning info generated during the latest (successful or failed) provisioning/unprovisioning operation for each component. If available, provisioning information is reported in the Please note that the information contained in a |
removeData required | boolean Default: false If true, when a component is undeployed, its underlying data will also be deleted |
Responses
Request samples
- Payload
{- "descriptorKind": "DATAPRODUCT_DESCRIPTOR",
- "descriptor": "dataProduct:\n id: urn:dmb:dp:finance:a-system:0\n components: \n - id: urn:dmb:dp:finance:a-system:0:component:0\n name: S3 storage\n description: A system that does something\n kind: storage\n version: 0.0.1\n - id: urn:dmb:dp:finance:a-system:0:component:1\n name: A system that does something\n description: A system that does something\n kind: outputport\n version: 0.0.1\nremoveData: false",
- "removeData": false
}
Response samples
- 200
- 202
- 400
- 500
{- "status": "COMPLETED",
- "info": {
- "publicInfo": {
- "valid": true
}
}
}
Get the status of a provision/unprovision task
Get the status and the results of a provision/unprovision operation.
This endpoint is used by the Provisioning Coordinator to poll the status of a provision/unprovision task.
path Parameters
token required | string Example: 3da5d0a2-9f3b-4a11-85a3-b5ddb73da032 Provisioning Task Token obtained after a call to the provision or unprovision endpoints |
Responses
Response samples
- 200
- 400
- 500
{- "status": "RUNNING"
}
Stop provision/unprovision task
Terminate a provision/unprovision task that is still running.
The tech adapter will use a request coming at this endpoint as a signal to stop the task. The provisioning coordinator will continue to poll the status of a provision/unprovision task by using the token that was returned by the provision/unprovision endpoint and not the one returned here.
The task can be stopped only if the tech adapter supports it, otherwise a 501
error is returned.
path Parameters
token required | string Example: 3da5d0a2-9f3b-4a11-85a3-b5ddb73da032 Provision/Unprovision Task Token obtained after a call to the provision/unprovision endpoint |
Responses
Response samples
- 200
- 202
- 400
- 500
- 501
{- "status": "TERMINATED"
}
Upsert the Access Control List
Create or update the Access Control List of an infrastructural component with the provided identities.
The supplied list of identities refers to the users and groups that need to have access to the component.
This means, Witboost always supplies the full list of identities even if some of them already have access to the underlying infrastructural resource.
Request Body schema: application/jsonrequired
refs required | Array of strings Identities (i.e. users and groups) that should be registered in the Access Control List of the target component. The format of identities follows the Witboost catalog format. Users are prefixed with |
required | object Information related to the provisioning workflow of a system |
accessControlFields | object A free-form object that can be used to store additional information about the access control list request. These values are supplied from the user when using an Access Control Request Template on the UI. |
Responses
Request samples
- Payload
{- "refs": [
- "user:alice_mydomain.com",
- "user:bob_mydomain.com",
- "group:developers_mydomain.com",
- "group:finance_mydomain.com",
- "group:peopleops_mydomain.com"
], - "provisionInfo": {
- "request": "{\"descriptorKind\":\"COMPONENT_DESCRIPTOR\",\"descriptor\":\"dataProduct:\\n id: urn:dmb:dp:finance:a-system:0\\n components: \\n - id: urn:dmb:dp:finance:a-system:0:component:0\\n name: S3 storage\\n description: A system that does something\\n kind: storage\\n version: 0.0.1\\n - id: urn:dmb:dp:finance:a-system:0:component:1\\n name: A system that does something\\n description: A system that does something\\n kind: outputport\\n version: 0.0.1\\n\",\"removeData\":false}",
- "result": "{\"status\":\"COMPLETED\",\"info\":{\"publicInfo\":{\"valid\":true}}}"
}, - "accessControlFields": {
- "additionalInfo": "This is an additional information field that was provided in the Access Control Request Template"
}
}
Response samples
- 200
- 202
- 400
- 500
{- "status": "COMPLETED",
- "info": {
- "publicInfo": {
- "valid": true
}
}
}
Import an existing resource
Import an existing resource from the infrastructure into Witboost.
This operation is used to reverse provision a component that is already deployed in the target environment.
The reverse provisioning operation is used to import the current state of the component into Witboost, so that it can be tracked by the platform.
Request Body schema: application/jsonrequired
useCaseTemplateId required | string Component's use case template id |
environment required | string Target environment |
params | object Reverse provisioning input params |
catalogInfo | object Content of the current |
Responses
Request samples
- Payload
{- "useCaseTemplateId": "urn:dmb:utm:aws-s3-object:0",
- "environment": "development"
}
Response samples
- 200
- 202
- 400
- 500
{- "status": "COMPLETED",
- "updates": {
- "metadata.fieldA": "valueA",
- "spec.mesh.description": "A system that does something"
}, - "logs": [
- {
- "timestamp": "2021-09-30T10:00:00Z",
- "level": "INFO",
- "message": "Reverse provisioning done"
}
]
}
Get status of an import task
Get the status and the results of a reverse provisioning operation.
The reverse provisioning operation is used to import the current state of the component into Witboost, so that it can be tracked by the platform.
path Parameters
token required | string Example: 3da5d0a2-9f3b-4a11-85a3-b5ddb73da032 Reverse Provisioning Task Token obtained after a call to the import endpoint |
Responses
Response samples
- 200
- 400
- 500
{- "status": "RUNNING"
}
A Data Catalog Plugin is a microservice that is responsible for provisioning and unprovisioning metadata into a Data Catalog during the deployment phase of a resource through Witboost.
It takes in a system descriptor enriched with components' provisioning results and returns the result of the provisioned Data Catalog entities.
The Data Catalog contract is similar to a technology adapter, with a few differences. It takes in the whole system descriptor already enriched with tech adapters' deploy info.
Validate a Data Catalog Entity provision request (async)
Validate output ports metadata attached in the provisioning request.
In particular, it validates the format and the existence of glossary terms and classification tags
Request Body schema: application/jsonrequired
Details of a provisioning request to be validated
descriptorKind required | string Enum: "DATAPRODUCT_DESCRIPTOR" "DATAPRODUCT_DESCRIPTOR_WITH_RESULTS" |
descriptor required | string A provisioning request in yaml format |
Responses
Request samples
- Payload
{- "descriptorKind": "DATAPRODUCT_DESCRIPTOR",
- "descriptor": "dataProduct:\n id: urn:dmb:dp:finance:a-system:0\n components: \n - id: urn:dmb:dp:finance:a-system:0:component:0\n name: S3 storage\n description: A system that does something\n kind: storage\n version: 0.0.1\n - id: urn:dmb:dp:finance:a-system:0:component:1\n name: A system that does something\n description: A system that does something\n kind: outputport\n version: 0.0.1\nremoveData: false",
- "removeData": false
}
Response samples
- 202
- 400
- 500
"2f4b3b3b-4b3b-4b3b-4b3b-4b3b4b3b4b3b"
Get status of an async validation task
path Parameters
token required | string Example: 2a4bb060-27c9-403d-ab5d-d3776cf56c3b Token obtained after a call to the async validate endpoint |
Responses
Response samples
- 200
- 400
- 500
{- "status": "COMPLETED",
- "info": {
- "publicInfo": {
- "valid": true
}, - "privateInfo": {
- "valid": true
}
}
}
Validate a Data Catalog Entity provision request (sync)
Synchronously validate a provisioning request and return the validation result.
You want to implement this endpoint to assess that the provided resource descriptor conforms to the expected structure and has all the necessary information to be deployed on the infrastructure.
It is highly recommended to implement the asynchronous validation endpoint instead of this one.
Request Body schema: application/jsonrequired
Details of a provisioning request to be validated
descriptorKind required | string Enum: "DATAPRODUCT_DESCRIPTOR" "DATAPRODUCT_DESCRIPTOR_WITH_RESULTS" |
descriptor required | string A provisioning request in yaml format |
Responses
Request samples
- Payload
{- "descriptorKind": "DATAPRODUCT_DESCRIPTOR",
- "descriptor": "dataProduct:\n id: urn:dmb:dp:finance:a-system:0\n components: \n - id: urn:dmb:dp:finance:a-system:0:component:0\n name: S3 storage\n description: A system that does something\n kind: storage\n version: 0.0.1\n - id: urn:dmb:dp:finance:a-system:0:component:1\n name: A system that does something\n description: A system that does something\n kind: outputport\n version: 0.0.1\nremoveData: false",
- "removeData": false
}
Response samples
- 200
- 500
{- "valid": true
}
Provision Data Catalog entity
Provisioning is the operation that deploys the metadata of a system or a single component into a third-party Data Catalog.
This request can be handled in synchronous or asynchronous mode depending on the implementation.
Request Body schema: application/jsonrequired
A Data Product descriptor, enriched with components' provisioning results, wrapped as a string into a simple object
descriptorKind required | string Enum: "DATAPRODUCT_DESCRIPTOR" "DATAPRODUCT_DESCRIPTOR_WITH_RESULTS" |
descriptor required | string A provisioning request in yaml format |
Responses
Request samples
- Payload
{- "descriptorKind": "DATAPRODUCT_DESCRIPTOR",
- "descriptor": "dataProduct:\n id: urn:dmb:dp:finance:a-system:0\n components: \n - id: urn:dmb:dp:finance:a-system:0:component:0\n name: S3 storage\n description: A system that does something\n kind: storage\n version: 0.0.1\n - id: urn:dmb:dp:finance:a-system:0:component:1\n name: A system that does something\n description: A system that does something\n kind: outputport\n version: 0.0.1\nremoveData: false",
- "removeData": false
}
Response samples
- 200
- 202
- 400
- 500
{- "status": "COMPLETED",
- "info": {
- "publicInfo": {
- "entitiesCommitted": 10
}, - "privateInfo": {
- "entitiesCommitted": 10,
- "glossaryId": "dfasd13"
}, - "logs": [
- {
- "timestamp": "2021-09-30T10:00:00Z",
- "level": "INFO",
- "message": "Entity provisioned successfully"
}
]
}
}
Unprovision Data Catalog entity
Unprovisioning is the operation that removes the metadata of a system or a single component from a third-party Data Catalog.
This request is synchronous and returns the result of the unprovisioning process.
Request Body schema: application/jsonrequired
A system descriptor and the provisioning results wrapped as simple object
descriptorKind required | string Enum: "DATAPRODUCT_DESCRIPTOR" "DATAPRODUCT_DESCRIPTOR_WITH_RESULTS" |
descriptor required | string A provisioning request in yaml format |
Responses
Request samples
- Payload
{- "descriptorKind": "DATAPRODUCT_DESCRIPTOR",
- "descriptor": "dataProduct:\n id: urn:dmb:dp:finance:a-system:0\n components: \n - id: urn:dmb:dp:finance:a-system:0:component:0\n name: S3 storage\n description: A system that does something\n kind: storage\n version: 0.0.1\n - id: urn:dmb:dp:finance:a-system:0:component:1\n name: A system that does something\n description: A system that does something\n kind: outputport\n version: 0.0.1\nremoveData: false",
- "removeData": false
}
Response samples
- 200
- 202
- 400
- 500
{- "status": "COMPLETED",
- "info": {
- "publicInfo": {
- "entitiesRemoved": 10
}, - "privateInfo": {
- "entitiesRemoved": 10,
- "glossaryId": "dfasd13"
}, - "logs": [
- {
- "timestamp": "2021-09-30T10:00:00Z",
- "level": "INFO",
- "message": "Entity unprovisioned successfully"
}
]
}
}
Get status of Data Catalog entity provision/unprovision task
path Parameters
token required | string Example: f6440015-1404-4e96-a250-7f680dbc32d4 Data Catalog Provision/Unprovision Task Token obtained after a call to the provision/unprovision endpoint |
Responses
Response samples
- 200
- 400
- 500
- 501
{- "status": "COMPLETED",
- "info": {
- "publicInfo": {
- "entitiesCommitted": 10
}, - "privateInfo": {
- "entitiesCommitted": 10,
- "glossaryId": "dfasd13"
}, - "logs": [
- {
- "timestamp": "2021-09-30T10:00:00Z",
- "level": "INFO",
- "message": "Entity provisioned successfully"
}
]
}
}
Get linked Data Catalog entity
Return the reference (id, links, etc) to the Data Catalog entity that refers to the provided Output Port
query Parameters
componentId required | string Example: componentId=urn:dmb:dp:finance:a-system:0:component:1 Output Port URN to get the reference to the Data Catalog entity |
Responses
Response samples
- 200
- 500
Publish a resource into the Marketplace
Insert the latest provisioning result and descriptor into the target marketplace registry.
Request Body schema: application/jsonrequired
An asset descriptor and the provisioning results wrapped as simple object
descriptor required | string Asset descriptor in yaml format |
Responses
Request samples
- Payload
{- "descriptor": "string"
}
Response samples
- 200
- 400
- 500
{- "status": "string",
- "info": {
- "privateInfo": {
- "marketplaceInfo": {
- "type": "string",
- "label": "string",
- "value": "string",
- "href": "string"
}
}
}
}
Remove a resource from the Marketplace
Perform a delete operation of asset descriptor references that are in the Marketplace DB
Request Body schema: application/jsonrequired
An asset descriptor and the provisioning results wrapped as simple object
descriptor required | string Asset descriptor in yaml format |
Responses
Request samples
- Payload
{- "descriptor": "string"
}
Response samples
- 200
- 400
- 500
"string"
Sync the Access Control List
Update the Access Control List table copy that is kept in the Marketplace.
Request Body schema: application/jsonrequired
The request used to update the ACL table.
requestId required | string |
outputPortId required | integer |
refs required | Array of strings |
Responses
Request samples
- Payload
{- "requestId": "string",
- "outputPortId": 0,
- "refs": [
- "string"
]
}
Response samples
- 204
- 400
- 500
"string"
A Custom URL Picker is a picker that can be used inside Witboost templates to ask information to end users through a drop-down menu.
The options of the drop-down menu can be supplied by a microservice implementing this Custom URL Picker API specification.
The microservice will be called by the Custom URL Picker to get the options to show to the user in the drop-down list on the UI. The user can filter out results by typing in the Custom URL Picker field. The microservice will return the first limit
elements that match the filter, skipping the first offset
elements.
Retrieve drop-down list options
Called by the Custom URL Picker to get the options to show to the user in the drop-down list on the UI.
The user can filter out results by typing in the Custom URL Picker field. The microservice will return the first limit
elements that match the filter, skipping the first offset
elements.
query Parameters
filter | string Example: filter=banana The user input, that is typed by the user on the UI field, which is used to filter the values on the glossary. If not provided, the microservice will return all the values in the glossary following the pagination settings. |
offset required | number Example: offset=0 the number of values to skip for each request |
limit required | number >= 5 Example: limit=5 the number of values to return at each request |
Request Body schema: application/jsonoptional
A free-form object that can be used to define additional properties to use while performing a search in the glossary. This can be filled with other fields values coming from the template.
Responses
Request samples
- Payload
{- "kind": "fruit"
}
Response samples
- 200
- 400
- 500
[- {
- "id": "banana",
- "value": "Banana",
- "description": "A yellow fruit"
}, - {
- "id": "apple",
- "value": "Apple",
- "description": "A fruit"
}
]
Validate a selected option against the glossary
Called by the Custom URL picker to validate the selected values against the ones included in the glossary e.g. for checking if the selected values are still present in the glossary.
This API gets called when the user wants to modify some values e.g. by using the Edit Template, and a check is being run to see if the previously selected value is still present in the glossary with the exact shape.
Request Body schema: application/json
required | Array of objects the selected options to validate |
queryParameters | object This field represents additional parameters to put in the request body. The user can use it to define additional properties to use while performing a validation on the "selectedObject". |
Responses
Request samples
- Payload
{- "selectedObjects": [
- {
- "id": "banana"
}
], - "queryParameters": {
- "kind": "fruit"
}
}
Response samples
- 200
- 400
- 500
"Validation succeded"
By implementing the Webhook Notifications API, you will be able to receive notifications about events happened within the Witboost platform.
The Webhook Notifications API is helpful for integrating with third-party messaging systems like Microsoft Teams, Slack, Discord etc.
As you will notice from this API specification, there is no API endpoint to implement, but rather just a JSON schema which represents what the payload of a notification looks like. This payload is what your configured webhook URL is going to receive at the POST endpoint.
The JSON schema is described in this page here: Webhook Notifications JSON Schema
Send approval request
Receive a request from witboost about an ongoing action started by a user that requires a third-party interaction on your end
header Parameters
X-Request-ID required | string <uuid> Examples:
A unique identifier for the request that can be used to trace the request in the logs. |
Request Body schema: application/jsonrequired
An object containing all the input data received by the action where the remote request hook is attached
respondToUrl required | string URL to be contacted to notify that the hook is completed. This represents the fact that the third-party interaction has been performed on your end. e.g. An access request that has been accepted on your dedicated platform |
fields required | object A free-form object containing all the action's input data coming from witboost |
Responses
Request samples
- Payload
{- "fields": {
- "identities": [
- "john.doe_company.com"
], - "verb": "grant",
- "motivation": "I need access to this resource",
- "domain": "finance",
- "role": "data_engineer"
}
}
Response samples
- 202
- 400
- 401
- 500
{- "hookInfo": {
- "status": "accepted",
- "message": "request has been accepted on the external system"
}
}
A Remote Engine is a service responsible to manage requests from the Computational Governance Platform to validate resources.
By implementing this API contract, the service will be able to receive requests to evaluate resources and return the result of the evaluation compliant to the Computational Governance Platform results.
This gives developers the possibility to implement their own validation logic with any technology of their choice, as long as it respects the API contract.
Once you develop and deploy a microservice that implements the Remote Engine API, when you create a policy or metric in Witboost, you can select the Remote Engine to use for the evaluation.
When you select Remote Engine, you will be able to provide the URL of the service that implements this API contract. Make sure the service is reachable by the Witboost platform.
Evaluate a resource
Computes a result based on the input resource. The result can be a policy result or a metric result.
Request Body schema: application/jsonrequired
An object containing the resource to evaluate using this executor
content required | string The content of the resource to be evaluated. The content can be any type of data, such as a JSON object, a string, a number, etc but always in its string representation. e.g. For a system resource, the content will be a stringified YAML descriptor. |
resourceType required | string Resource type that is being sent in the content. This has to be agreed between the Remote Engine implementation and the platform's registered resource types. |
resourceId required | string A unique Resource Identifier inside the Witboost platform. |
Responses
Request samples
- Payload
{- "content": "apiVersion: v1\nkind: System\nmetadata:\n name: my-system\n namespace: my-namespace\n labels:\n app: my-app",
- "resourceType": "system",
- "resourceId": 123456
}
Response samples
- 200
- 400
- 500
{- "satisfiesPolicy": false,
- "errors": [
- "The S3 object specified at 'specific.s3-arn' does not exist. Expected an existing S3 storage."
], - "details": {
- "s3Arn": "arn:aws:s3:::my-bucket"
}
}
A Perimeter Resolver is a microservice responsible to supply resources to the Computational Governance Platform.
When a policy or metric is being run from Witboost, the Perimeter Resolver gets invoked to get a list of resources of the policy/metric declared resource type together with additional filters.
Perimeter Resolver fetches resources for which is responsible to from an underlying storage or catalog. The resources are filtered based on the environment and the resource type.
Once you develop a microservice that implements the Perimeter Resolver API, you can register it with the Computational Governance Platform API. The registration process requires an HTTP call to this API.
Retrieve resources
query Parameters
environment required | string Example: environment=development Environment where to look for resources |
resource-types | string Example: resource-types=type1,type2,type3 Comma-separated list of resource types to filter on. Ignored if the perimeter resolver doesn't provide more than one resource type |
id | string Example: id=rf2e-3f2f-3f2f-3f2f A resource id to retrieve |
offset | integer Default: 0 Example: offset=0 Number of resources to skip before retrieving data. Used for pagination. |
limit | integer <= 50 Default: 5 Example: limit=5 Maximum number of resources to retrieve. Used for pagination. |
Responses
Response samples
- 200
- 400
- 500
{- "content": [
- "apiVersion: v1\nkind: System\nmetadata:\n name: my-system\n namespace: my-namespace\n labels:\n app: my-app",
- "apiVersion: v1\nkind: System\nmetadata:\n name: my-system-2\n namespace: my-namespace\n labels:\n app: my-app",
- "apiVersion: v1\nkind: System\nmetadata:\n name: my-system-3\n namespace: my-namespace\n labels:\n app: my-app"
], - "page": {
- "offset": 0,
- "limit": 5,
- "count": 3
}
}