diff --git a/docs/Routes.md b/docs/Routes.md index c29f9f1e..0ebe732b 100644 --- a/docs/Routes.md +++ b/docs/Routes.md @@ -11,9 +11,6 @@ This document list all routes available in Windshaft-cartodb Maps API server. 1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/:token/:layer/:z/:x/:y.(:format) {:user(f),:token(f),:layer(f),:z(f),:x(f),:y(f),:format(f)} (1)`
Notes: Per :layer rendering based on :format [0] -1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup) {:user(f)} (1)` -
Notes: Map instantiation [0] - 1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/:token/:layer/attributes/:fid {:user(f),:token(f),:layer(f),:fid(f)} (1)`
Notes: Endpoint for info windows data, alternative for sql api when tables are private [0] @@ -23,47 +20,60 @@ This document list all routes available in Windshaft-cartodb Maps API server. 1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/static/bbox/:token/:west,:south,:east,:north/:width/:height.:format {:user(f),:token(f),:west(f),:south(f),:east(f),:north(f),:width(f),:height(f),:format(f)} (1)`
Notes: Static Maps API [0] +1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/:token/:layer/widget/:widgetName {:user(f),:token(f),:layer(f),:widgetName(f)} (1)` +
Notes: By :widgetName per :layer widget [0] + +1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/:token/:layer/widget/:widgetName/search {:user(f),:token(f),:layer(f),:widgetName(f)} (1)` +
Notes: By :widgetName per :layer widget search [0] + +1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup) {:user(f)} (1)` +
Notes: Map instantiation [0] + +1. `POST (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup) {:user(f)} (1)` +
Notes: Map instantiation [0] + +1. `GET (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id/jsonp {:user(f),:template_id(f)} (1)` +
Notes: Named maps JSONP instantiation [1] + +1. `POST (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)` +
Notes: Instantiate named map [1] + +1. `OPTIONS (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup) {:user(f)} (1)` +
Notes: CORS [0] + +1. `GET (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id/:layer/:z/:x/:y.(:format) {:user(f),:template_id(f),:layer(f),:z(f),:x(f),:y(f),:0(f),:format(f)} (1)` +
Notes: Per :layer fixed URL named map tiles [1] + +1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/static/named/:template_id/:width/:height.:format {:user(f),:template_id(f),:width(f),:height(f),:format(f)} (1)` +
Notes: Static map for named maps [1] + +1. `POST (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template) {:user(f)} (1)` +
Notes: Create named map (w/ API KEY) [1] + +1. `PUT (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)` +
Notes: Update a named map (w/ API KEY) [1] + +1. `GET (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)` +
Notes: Named map retrieval (w/ API KEY) [1] + +1. `DELETE (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)` +
Notes: Delete named map (w/ API KEY) [1] + +1. `GET (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template) {:user(f)} (1)` +
Notes: List named maps (w/ API KEY) [1] + +1. `OPTIONS (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)` +
Notes: CORS [1] + +1. `GET /health {} (1)` +
Notes: Health check + 1. `GET / {} (1)`
Notes: Welcome message 1. `GET /version {} (1)`
Notes: Return relevant module versions: mapnik, grainstore, etc -1. `GET (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id/jsonp {:user(f),:template_id(f)} (1)` -
Notes: Named maps JSONP instantiation [1] - -1. `GET (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)` -
Notes: Named map retrieval (w/ API KEY) [1] - -1. `GET (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template) {:user(f)} (1)` -
Notes: List named maps (w/ API KEY) [1] - -1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/static/named/:template_id/:width/:height.:format {:user(f),:template_id(f),:width(f),:height(f),:format(f)} (1)` -
Notes: Static map for named maps - -1. `GET /health {} (1)` -
Notes: Healt check - -1. `OPTIONS (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup) {:user(f)} (1)` -
Notes: CORS [0] - -1. `OPTIONS (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)` -
Notes: CORS [1] - -1. `POST (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup) {:user(f)} (1)` -
Notes: Map instantiation [0] - -1. `POST (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template) {:user(f)} (1)` -
Notes: Create named map (w/ API KEY) [1] - -1. `POST (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)` -
Notes: Instantiate named map [1] - -1. `PUT (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)` -
Notes: Update a named map (w/ API KEY) [1] - -1. `DELETE (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)` -
Notes: Delete named map (w/ API KEY) [1] ## Optional deprecated routes @@ -75,29 +85,29 @@ This document list all routes available in Windshaft-cartodb Maps API server. Something like the following patch should do the trick ```javascript -diff --git a/lib/cartodb/cartodb_windshaft.js b/lib/cartodb/cartodb_windshaft.js -index b9429a2..e6cc5f9 100644 ---- a/lib/cartodb/cartodb_windshaft.js -+++ b/lib/cartodb/cartodb_windshaft.js -@@ -212,6 +212,20 @@ var CartodbWindshaft = function(serverOptions) { - } - }); +diff --git a/lib/cartodb/server.js b/lib/cartodb/server.js +index 5f62850..bca377d 100644 +--- a/lib/cartodb/server.js ++++ b/lib/cartodb/server.js +@@ -215,6 +215,20 @@ module.exports = function(serverOptions) { + * END Routing + ******************************************************************************************************************/ + var format = require('util').format; -+ var routesNotes = Object.keys(ws.routes.routes) -+ .map(function(method) { return ws.routes.routes[method]; }) -+ .reduce(function(previous, current) { current.map(function(r) { previous.push(r) }); return previous;}, []) -+ .map(function(route) { -+ return format("\n1. `%s %s {%s} (%d)`\n
Notes: [DEPRECATED]? ", -+ route.method.toUpperCase(), -+ route.path, -+ route.keys.map(function(k) { return format(':%s(%s)', k.name, k.optional ? 't' : 'f'); } ).join(','), -+ route.callbacks.length ++ var routesNotes = app._router.stack ++ .filter(function(handler) { return !!handler.route; }) ++ .map(function(handler) { ++ return format("\n1. `%s %s {%s} (1)`\n
Notes: [DEPRECATED]? ", ++ Object.keys(handler.route.methods)[0].toUpperCase(), ++ handler.route.path, ++ handler.keys.map(function(k) { ++ return format(':%s(%s)', k.name, k.optional ? 't' : 'f'); ++ }).join(',') + ); + }); + console.log(routesNotes.join('\n')); + - return ws; + return app; }; diff --git a/lib/cartodb/server_options.js b/lib/cartodb/server_options.js index f1a70889..00011356 100644 --- a/lib/cartodb/server_options.js +++ b/lib/cartodb/server_options.js @@ -3,7 +3,7 @@ var _ = require('underscore'); var OverviewsQueryRewriter = require('./utils/overviews_query_rewriter'); var overviewsQueryRewriter = new OverviewsQueryRewriter({ - zoom_level: 'CDB_ZoomFromScale(!scale_denominator!)' + zoom_level: 'CDB_ZoomFromScale(!scale_denominator!)' }); var rendererConfig = _.defaults(global.environment.renderer || {}, { @@ -24,8 +24,8 @@ rendererConfig.mapnik.queryRewriter = overviewsQueryRewriter; // Perform keyword substitution in statsd // See https://github.com/CartoDB/Windshaft-cartodb/issues/153 -if ( global.environment.statsd ) { - if ( global.environment.statsd.prefix ) { +if (global.environment.statsd) { + if (global.environment.statsd.prefix) { var host_token = os.hostname().split('.').reverse().join('.'); global.environment.statsd.prefix = global.environment.statsd.prefix.replace(/:host/, host_token); } @@ -36,61 +36,61 @@ module.exports = { port: global.environment.port, host: global.environment.host }, - // This is for inline maps and table maps - base_url: global.environment.base_url_legacy || '/tiles/:table', + // This is for inline maps and table maps + base_url: global.environment.base_url_legacy || '/tiles/:table', - /// @deprecated with Windshaft-0.17.0 - ///base_url_notable: '/tiles', + /// @deprecated with Windshaft-0.17.0 + ///base_url_notable: '/tiles', - // This is for Detached maps - // - // "maps" is the official, while - // "tiles/layergroup" is for backward compatibility up to 1.6.x - // - base_url_mapconfig: global.environment.base_url_detached || '(?:/maps|/tiles/layergroup)', + // This is for Detached maps + // + // "maps" is the official, while + // "tiles/layergroup" is for backward compatibility up to 1.6.x + // + base_url_mapconfig: global.environment.base_url_detached || '(?:/maps|/tiles/layergroup)', - base_url_templated: global.environment.base_url_templated || '(?:/maps/named|/tiles/template)', + base_url_templated: global.environment.base_url_templated || '(?:/maps/named|/tiles/template)', - grainstore: { - map: { + grainstore: { + map: { // TODO: allow to specify in configuration srid: 3857 - }, - datasource: global.environment.postgres, - cachedir: global.environment.millstone.cache_basedir, - mapnik_version: global.environment.mapnik_version, - mapnik_tile_format: global.environment.mapnik_tile_format || 'png', - default_layergroup_ttl: global.environment.mapConfigTTL || 7200 }, - statsd: global.environment.statsd, - renderCache: { - ttl: rendererConfig.cache_ttl, - statsInterval: rendererConfig.statsInterval - }, - renderer: { - mapnik: _.defaults(rendererConfig.mapnik, { - geojson: { - dbPoolParams: { - size: 16, - idleTimeout: 3000, - reapInterval: 1000 - }, - clipByBox2d: false, - } - }), - torque: rendererConfig.torque, - http: rendererConfig.http - }, - // Do not send unwatch on release. See http://github.com/CartoDB/Windshaft-cartodb/issues/161 - redis: _.extend(global.environment.redis, {unwatchOnRelease: false}), - enable_cors: global.environment.enable_cors, - varnish_host: global.environment.varnish.host, - varnish_port: global.environment.varnish.port, - varnish_http_port: global.environment.varnish.http_port, - varnish_secret: global.environment.varnish.secret, - varnish_purge_enabled: global.environment.varnish.purge_enabled, - fastly: global.environment.fastly || {}, - cache_enabled: global.environment.cache_enabled, - log_format: global.environment.log_format, - useProfiler: global.environment.useProfiler + datasource: global.environment.postgres, + cachedir: global.environment.millstone.cache_basedir, + mapnik_version: global.environment.mapnik_version, + mapnik_tile_format: global.environment.mapnik_tile_format || 'png', + default_layergroup_ttl: global.environment.mapConfigTTL || 7200 + }, + statsd: global.environment.statsd, + renderCache: { + ttl: rendererConfig.cache_ttl, + statsInterval: rendererConfig.statsInterval + }, + renderer: { + mapnik: _.defaults(rendererConfig.mapnik, { + geojson: { + dbPoolParams: { + size: 16, + idleTimeout: 3000, + reapInterval: 1000 + }, + clipByBox2d: false + } + }), + torque: rendererConfig.torque, + http: rendererConfig.http + }, + // Do not send unwatch on release. See http://github.com/CartoDB/Windshaft-cartodb/issues/161 + redis: _.extend(global.environment.redis, {unwatchOnRelease: false}), + enable_cors: global.environment.enable_cors, + varnish_host: global.environment.varnish.host, + varnish_port: global.environment.varnish.port, + varnish_http_port: global.environment.varnish.http_port, + varnish_secret: global.environment.varnish.secret, + varnish_purge_enabled: global.environment.varnish.purge_enabled, + fastly: global.environment.fastly || {}, + cache_enabled: global.environment.cache_enabled, + log_format: global.environment.log_format, + useProfiler: global.environment.useProfiler };