Browse and test your LoopBack app's APIs
Go to file
Miroslav Bajtoš 9d20fe8b7d 2.0.0
* Use loopback-swagger to generate swagger.json (Miroslav Bajtoš)
 * Bump up strong-swagger-ui version to ^21.0.0 (Miroslav Bajtoš)
 * Register loopback-explorer to app (Hage Yaapa)
 * Generate Swagger Spec 2.0 documentation (Miroslav Bajtoš)
 * Upgrade to strong-swagger-ui@21.0 (swagger-ui@2.1) (Miroslav Bajtoš)
 * bump major version (Ryan Graham)
 * Rework the module to a loopback component (Miroslav Bajtoš)
 * Add `opts.host` to customize host of resource URLs (cndreiter)
 * Removed branch-lock, and bumped version (Shelby Sanders)
 * Corrected to propagate properties from existing items object (Shelby Sanders)
 * Use strong-swagger-ui instead of swagger-ui (Miroslav Bajtoš)
 * Remove public/images/throbber.gif (Miroslav Bajtoš)
 * Move CSS customizations to loopbackStyles.css (Miroslav Bajtoš)
 * Added Swagger fields for items and max/min(Items|Length) (Shelby Sanders)
 * Corrected accidental duplication of responseMessages from merge (Shelby Sanders)
 * review comments (Ying Tang)
 * add more tests (Ying Tang)
 * float additionalProperties and description to top (Ying Tang)
 * Convert array to string for summary, note, and description. Fix additionalProperties (Ying Tang)
 * back out changes of id to URI (Ying Tang)
 * Uri id and $ref, join description (Ying Tang)
 * propertyName, not property (Ying Tang)
 * fix resource listing and remove id from each property (Ying Tang)
 * remove id fields from required array (Ying Tang)
 * remove required from sub-schema (Ying Tang)
 * bump version (Ying Tang)
 * add $ref and remove type for models (Ying Tang)
 * Changed Swagger() to omit resources with no content (Shelby Sanders)
 * Added event emission for swaggerResources to support customization (Shelby Sanders)
 * Corrected handling of type for operation, including containers (Shelby Sanders)
 * Corrected handling for absent settings.additionalProperties (Shelby Sanders)
 * Added support for public in order to hide operations from Swagger (Shelby Sanders)
 * added reference to settings for additional properties (Jake Ayala)
 * Protected against non-Model generation requests (Shelby Sanders)
 * Corrected merge issues (Shelby Sanders)
 * Added padding to content well in order to counteract changes in SwaggerUI (Shelby Sanders)
 * Added support for scanning accepts params for Model references (Shelby Sanders)
 * Changed addRoute() to honor X-Forwarded-Host (Shelby Sanders)
 * Removed branch-lock for loopback (Shelby Sanders)
 * Changed to possibly pull model description from ctor.settings (Shelby Sanders)
 * Corrected generateModelDefinition() to scan for model references nested in other models (Shelby Sanders)
 * Corrected prepareDataType() to handle collections and nesting, and changed to always and only use responseMessages (Shelby Sanders)
 * Corrected generateModelDefinition() to scan for model references in remote returns and errors (Shelby Sanders)
 * Corrected default for consumes+produces (Shelby Sanders)
 * Ported prepareDataType() from old strong-remoting:ext/swagger.js (Shelby Sanders)
 * Corrected issues with merge of 2.x changes (Shelby Sanders)
 * Load swagger ui from `swagger-ui` package instead. (Samuel Reed)
 * Ported extensions for more Swagger 1.2 metadata, returns+errors as responseMessages, consumes+produces, and X-Forwarded-Proto for reverse-proxying from HTTPS to HTTP (Shelby Sanders)
 * Upgraded to SwaggerUI 2.0.18 (Shelby Sanders)
 * Added support for toggling Model and Schema, and added support for primitives in StatusCodeView (Shelby Sanders)
 * Ensure Response Content Type is shown regardless of Response Class (Shelby Sanders)
 * Reverted to use special loading logic from loopback-explorer (Shelby Sanders)
 * Updated to latest Swagger-UI for better responseMessage signature handling (Shelby Sanders)
 * Upgraded to latest Swagger-UI for 1.2 support (Shelby Sanders)
 * Correct description of collections of object and nested (Shelby Sanders)
 * Add indication of response being a collection (Shelby Sanders)
2015-09-04 10:47:02 +02:00
example Merge remote-tracking branch 'upstream/master' into validate_param_enum 2015-07-02 11:03:27 -07:00
lib Use loopback-swagger to generate swagger.json 2015-09-03 10:37:09 +02:00
public Upgrade to strong-swagger-ui@21.0 (swagger-ui@2.1) 2015-08-13 15:58:35 +02:00
test Use loopback-swagger to generate swagger.json 2015-09-03 10:37:09 +02:00
.gitignore Merge remote-tracking branch 'upstream/master' into validate_param_enum 2015-07-02 11:03:27 -07:00
.jshintrc Refactoring swagger 1.2 rework. 2014-07-05 14:32:00 -05:00
CHANGES.md 2.0.0 2015-09-04 10:47:02 +02:00
CONTRIBUTING.md Merge remote-tracking branch 'upstream/master' into validate_param_enum 2015-07-02 11:03:27 -07:00
LICENSE Update to dual MIT/StrongLoop license 2014-02-17 16:04:12 -08:00
README.md Rework the module to a loopback component 2015-08-10 16:51:03 +02:00
index.js Use loopback-swagger to generate swagger.json 2015-09-03 10:37:09 +02:00
package.json 2.0.0 2015-09-04 10:47:02 +02:00

README.md

loopback-explorer

Browse and test your LoopBack app's APIs.

Basic Usage

Below is a simple LoopBack application. The explorer is mounted at /explorer.

var loopback = require('loopback');
var app = loopback();
var explorer = require('../');
var port = 3000;

var Product = loopback.Model.extend('product');
Product.attachTo(loopback.memory());
app.model(Product);

app.use('/api', loopback.rest());

// Register explorer using component-centric API:
explorer(app, { basePath: '/api', mountPath: '/explorer' });
// Alternatively, register as a middleware:
app.use('/explorer', explorer.routes(app, { basePath: '/api' }));

console.log("Explorer mounted at localhost:" + port + "/explorer");

app.listen(port);

Upgrading from v1.x

To upgrade your application using loopback-explorer version 1.x, just replace explorer() with explorer.routes() in your server script:

var explorer = require('loopback-explorer');

// v1.x - does not work anymore
app.use('/explorer', explorer(app, options);
// v2.x
app.use('/explorer', explorer.routes(app, options));

In applications scaffolded by slc loopback, the idiomatic way is to register loopback-explorer via component-config.json:

{
  "loopback-explorer": {
    "mountPath": "/explorer"
  }
}

Advanced Usage

Many aspects of the explorer are configurable.

See options for a description of these options:

// Mount middleware before calling `explorer()` to add custom headers, auth, etc.
app.use('/explorer', loopback.basicAuth('user', 'password'));
explorer(app, {
  basePath: '/custom-api-root',
  uiDirs: [
    path.resolve(__dirname, 'public'),
    path.resolve(__dirname, 'node_modules', 'swagger-ui')
  ]
  apiInfo: {
    'title': 'My API',
    'description': 'Explorer example app.'
  },
  resourcePath: 'swaggerResources',
  version: '0.1-unreleasable'
}));
app.use('/custom-api-root', loopback.rest());

Options

Options are passed to explorer(app, options).

basePath: String

Default: app.get('restAPIRoot') or '/api'.

Sets the API's base path. This must be set if you are mounting your api to a path different than '/api', e.g. with `loopback.use('/custom-api-root', loopback.rest());

mountPath: String

Default: /explorer

Set the path where to mount the explorer component.

protocol: String

Default: null

A hard override for the outgoing protocol (http or https) that is designated in Swagger resource documents. By default, loopback-explorer will write the protocol that was used to retrieve the doc. This option is useful if, for instance, your API sits behind an SSL terminator and thus needs to report its endpoints as https, even though incoming traffic is auto-detected as http.

uiDirs: Array of Strings

Sets a list of paths within your application for overriding Swagger UI files.

If present, will search uiDirs first when attempting to load Swagger UI, allowing you to pick and choose overrides to the interface. Use this to style your explorer or add additional functionality.

See index.html, where you may want to begin your overrides. The rest of the UI is provided by Swagger UI.

apiInfo: Object

Additional information about your API. See the spec.

resourcePath: String

Default: 'resources'

Sets a different path for the resource listing. You generally shouldn't have to change this.

version: String

Default: Read from package.json

Sets your API version. If not present, will read from your app's package.json.