-
Notifications
You must be signed in to change notification settings - Fork 59
Template maps
Template maps are layergroup configurations that rather than being fully defined contain variables that can be set to produce a different layergroup configurations (instantiation).
Template maps are persistent, can only be created and deleted by the CartoDB user showing a valid API_KEY.
Instantiating a signed template map would result in a signed map instance that would be signed with the same signature as the template. Deleting a signed template results in deletion of all signatures created as a result of instantiation.
A templated layergroup would allow using placeholders in the "cartocss" and "sql" elements in the "option" field of any "layer" of a layergroup configuration (see https://github.com/CartoDB/Windshaft/wiki/Multilayer-API). The set of supported placeholders for a template will need to be explicitly defined. Additionally you'll be able to embed an authorization certificate that would be used to sign any instance of the template.
// template.json
{
version: '0.0.1',
name: 'template_name', // there can be at most 1 template with the same name for any user
auth: { // embedded authorization certificate
// See https://github.com/CartoDB/Windshaft-cartodb/wiki/Signed-maps
method: 'token', // or "open"
valid_tokens: ['auth_token1','auth_token2']
},
// Variables not listed here are not substituted
// Required variable not provided at instantiation time trigger an error
// A default is required for optional variables
// Specifying a type serves the purpose of proper quoting, to avoid injections
placeholders: {
color: { type:'css_color', default:'red' }, // required:false by default
cartodb_id: { type:'number', required:true, default: 1 } // default still required for map validation
},
layergroup: { // see https://github.com/CartoDB/Windshaft/wiki/Multilayer-API
"version": "1.0.1",
"layers": [{
"type": "cartodb",
"options": {
"cartocss_version": "2.1.1",
"cartocss": "#layer { polygon-fill: <%= color %>; }",
"sql": "select * from european_countries_e WHERE cartodb_id = <%= cartodb_id %>"
}
}]
}
}
TODO: list valid placeholder types
You should be able to create a signed templated map with a single call (for simplicity).
curl 'https://docs.cartodb.com/tiles/layergroup/template?api_key=APIKEY' -d @template.json
The response would be like this:
{
"template_id":"@template_name"
}
When using POST, if a template with the same name exists in the user storage, an error will be raised. You can use PUT for update, which would error out if the named template does NOT exist.
You can instantiate a template map passing all required parameters:
curl 'https://docs.cartodb.com/tiles/layergroup/template/@template_name?auth_token=AUTH_TOKEN¶m1=value1¶m2=value2'
The response would be like this:
{
"layergroup_id":"docs@c01a54877c62831bb51720263f91fb33:123456788",
"last_updated":"2013-11-14T11:20:15.000Z"
}
You can then use the layergroup_id for fetching tiles and grids, but you'll still have to show the auth_token, if required by the template (see https://github.com/CartoDB/Windshaft-cartodb/wiki/Signed-maps)
Instances of a signed template map will be signed with the same signature certificate associated with the template. Such certificate would contain a reference to the template identifier, so that it can be revoked every time the template is updated or deleted. VERIFY
Deletion of a template map should imply removal all instance signatures
Update of a template map should imply removal all instance signatures