...
Code Block |
---|
GET /namespaces/default/artifacts/myapp/versions/1.0.0 { "name": "myapp", "version": "1.0.0", "meta": { "created": "1234567890000", ... }, "classes": { "apps": [ { "className": "co.cask.cdap.examples.myapp.MyApp", "properties": { "stream": { "name": "stream", "description": "The name of the stream to read from. Defaults to 'A'.", "type": "string", "required": false }, "table": { "name": "table", "description": "The name of the table to write to. Defaults to 'X'.", "type": "string", "required": false, }, "flowConfig": { "name": "flow", "description": "", "type": "config", "fields": { "reader": { "name": "reader", "description": "", "type": "config", "required": true, "fields": { "name": { "name": "name", "description": "The name of the reader plugin to use.", "type": "string", "required": true }, "properties": { "name": "properties", "description": "The properties needed by the chosen reader plugin.", "type": "plugin", "plugintype": "reader", "required": true } } }, "writer": { ... } } } } } ], "plugins": [ { "name": "default", "type": "reader", "description": "Writes timestamp and body as two columns and expects the row key to come as a header in the stream event.", "className": "co.cask.cdap.examples.myapp.plugins.DefaultStreamReader", "properties": { "rowkey": { "name": "rowkey", "description": "The header that should be used as the row key to write to. Defaults to 'rowkey'.", "type": "string", "required": false } } } ], "flows": [ ... ], "flowlets": [ ... ], "datasetModules": [ ... ] } } |
2. Creating an Application
The administrator notices there is an app 'co.cask.cdap.examples.myapp.Reverse indices will be mained to allow querying the classes in artifacts directly:
Code Block |
---|
GET /namespaces/default/classes/plugintypes
[ "reader" ]
GET /namespaces/default/classes/plugintypes/reader
[
{
"type": "reader",
"name": "default",
"description": "Writes timestamp and body as two columns and expects the row key to come as a header in the stream event.",
"className": "co.cask.cdap.examples.myapp.plugins.DefaultStreamReader"
"artifact": {
"namespace": "default",
"name": "myapp",
"version": "1.0.0"
}
}
]
GET /namespaces/default/classes/apps
[
{
"className": "co.cask.cdap.examples.myapp.MyApp",
"description": "",
"artifact": {
"namespace": "default",
"name": "myapp",
"version": "1.0.0"
}
}
] |
2. Creating an Application
The administrator notices there is an app 'co.cask.cdap.examples.myapp.MyApp' contained in the artifact. Based on the app properties, the admin gathers that it needs a config of the form:
...
Code Block |
---|
GET /namespaces/default/classes/plugintypes/reader
[
{
"type": "reader",
"name": "default",
"description": "Writes timestamp and body as two columns and expects the row key to come as a header in the stream event.",
"className": "co.cask.cdap.examples.myapp.plugins.DefaultStreamReader"
"artifact": {
"namespace": "default",
"name": "myapp",
"version": "1.0.0"
}
}
] |
...
Code Block |
---|
GET /namespaces/defaultdefault/classes/plugintypes/reader/plugins/default [ { "type": "reader", "name": "default", "description": "Writes timestamp and body as two columns and expects the row key to come as a header in the stream event.", "className": "co.cask.cdap.examples.myapp.plugins.DefaultStreamReader", "properties": { "rowkey": { "name": "rowkey", "description": "The header that should be used as the row key to write to. Defaults to 'rowkey'.", "type": "string", "required": false } }, "artifact": { "namespace": "default", "name": "myapp", "version": "1.0.0" } } ] |
...
Code Block |
---|
PUT /namespaces/default/apps/somePipeline -d ' { "artifact": { "name":"ETLBatch", "version":"3.1.0", "isSystem": true }, "config": { ... } }' |
...
6. Deleting an Artifact
Non-snapshot artifacts will be immutable. Advanced users can delete an existing artifact, but the assumption will be that they know exactly what they are doing. Deleting an artifact may cause programs that are using it to fail.
RESTful API changes
Application APIs
Type | Path | Body | Headers | Description | |||
---|---|---|---|---|---|---|---|
GET | /v3/namespaces/<namespace-id>/apps?artifactName=<name>[&artifactVersion=<version>] | get all apps using the given artifact name and version | |||||
POST | /v3/namespaces/<namespace-id>/apps | application jar contents | Application-Config: <json of config> | same as deploy api today, except allows passing config as a header | |||
PUT | /v3/namespaces/<namespace-id>/apps/<app-name> | application jar contents | Application-Config: <json of config> | same as deploy api today, except allows passing config as a header | |||
PUT | /v3/namespaces/<namespace-id>/apps/<app-name> |
| Content-Type: application/json | create an application from an existing artifact. Note: Edits existing API, different behavior based on content-type | |||
PUT | /v3/namespaces/<namespace-id>/apps/<app-name>/properties{ |
| update an existing application. No programs can be running |
...
Type | Path | Body | Headers | Description | ||
---|---|---|---|---|---|---|
GET | /v3/namespaces/<namespace-id>/artifacts | |||||
GET | /v3/namespaces/<namespace-id>/artifacts/<artifact-name> | Get data about all artifact versions | ||||
POST | /v3/namespaces/<namespace-id>/artifacts/<artifact-name> | jar contents | Artifact-Version: <version> | Add a new artifact. Version header only needed if Bundle-Version is not in jar Manifest. If both present, header wins. | ||
GET | /v3/namespaces/<namespace-id>/artifacts/<artifact-name>/versions/<version> | Get details about the artifact, such as what plugins and applications are in the artifact and properties they support | ||||
PUT | /v3/namespaces/<namespace-id>/artifacts/<artifact-name>/versions/<version>/pluginsclasses | list of plugins classes contained in the jar | This is required for 3rd party jars, such as the mysql jdbc connector. It is the equivalent of the .json file we have in 3.0 | |||
GET | /v3/namespaces/<namespace-id>/classes/plugintypes |
| ||||
GET | /v3/namespaces/<namespace-id>/classes/plugintypes/<plugin-type> | |||||
GET | /v3/namespaces/<namespace-id>/classes/plugintypes/<plugin-type>/plugins/<plugin-name> | config properties can be nested now. For example:
| ||||
GET | /v3/namespaces/<namespace-id>/classes/apps | |||||
GET | /v3/namespaces/<namespace-id>/classes/apps/<app-classname> |
Template APIs (will be removed)
Type | Path | Replaced By |
---|---|---|
GET | /v3/templates | |
GET | /v3/templates/<template-name> | |
GET | /v3/templates/<template-name>/extensions/<plugin-type> | /v3/namespaces/<namespace-id>/classes/plugintypes/<plugin-type> |
GET | /v3/templates/<template-name>/extensions/<plugin-type>/plugins/<plugin-name> | /v3/namespaces/<namespace-id>/classes/plugintypes/<plugin-type>/plugins/<plugin-name> |
PUT | /v3/namespaces/<namespace-id>/templates/<template-id> | |
GET | /v3/namespaces/<namespace-id>/adapters | |
GET | /v3/namespaces/<namespace-id>/adapters/<adapter-name> | |
POST | /v3/namespaces/<namespace-id>/adapters/<adapter-name>/start | |
POST | /v3/namespaces/<namespace-id>/adapters/<adapter-name>/stop | |
GET | /v3/namespaces/<namespace-id>/adapters/<adapter-name>/status | |
GET | /v3/namespaces/<namespace-id>/adapters/<adapter-name>/runs | |
GET | /v3/namespaces/<namespace-id>/adapters/<adapter-name>/runs/<run-id> | |
DELETE | /v3/namespaces/<namespace-id>/adapters/<adapter-name> |