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
This commit is contained in:
parent
2c737d40b6
commit
3dc7de6881
|
@ -23,7 +23,7 @@ var classHelper = module.exports = {
|
|||
*/
|
||||
generateAPIDoc: function(aClass, opts) {
|
||||
return {
|
||||
apiVersion: opts.version,
|
||||
apiVersion: opts.version || '1',
|
||||
swaggerVersion: opts.swaggerVersion,
|
||||
basePath: opts.basePath,
|
||||
resourcePath: urlJoin('/', opts.resourcePath),
|
||||
|
|
|
@ -119,6 +119,16 @@ var routeHelper = module.exports = {
|
|||
// be removed.
|
||||
var accepts = routeHelper.convertAcceptsToSwagger(route, classDef);
|
||||
var returns = routeHelper.convertReturnsToSwagger(route, classDef);
|
||||
var responseMessages = [
|
||||
{
|
||||
code: 200,
|
||||
message: 'Request was successful',
|
||||
responseModel: returns.model || prepareDataType(returns.type) || 'void'
|
||||
}
|
||||
];
|
||||
if (route.errors) {
|
||||
responseMessages.push.apply(responseMessages, route.errors);
|
||||
}
|
||||
|
||||
debug('route %j', route);
|
||||
|
||||
|
@ -128,17 +138,19 @@ var routeHelper = module.exports = {
|
|||
// `items` and `format` fields.
|
||||
operations: [routeHelper.extendWithType({
|
||||
method: routeHelper.convertVerb(route.verb),
|
||||
deprecated: route.deprecated,
|
||||
// [rfeng] Swagger UI doesn't escape '.' for jQuery selector
|
||||
nickname: route.method.replace(/\./g, '_'),
|
||||
// Per the spec:
|
||||
// https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#523-operation-object
|
||||
// This is the only object that may have a type of 'void'.
|
||||
type: returns.model || returns.type || 'void',
|
||||
parameters: accepts,
|
||||
// TODO(schoon) - We don't have descriptions for this yet.
|
||||
responseMessages: [],
|
||||
summary: route.description, // TODO(schoon) - Excerpt?
|
||||
notes: '' // TODO(schoon) - `description` metadata?
|
||||
notes: route.notes, // TODO(schoon) - `description` metadata?
|
||||
consumes: ['application/json', 'application/xml', 'text/xml'],
|
||||
produces: ['application/json', 'application/javascript', 'application/xml', 'text/javascript', 'text/xml'],
|
||||
parameters: accepts,
|
||||
responseMessages: responseMessages
|
||||
})]
|
||||
};
|
||||
|
||||
|
@ -192,15 +204,21 @@ var routeHelper = module.exports = {
|
|||
}
|
||||
|
||||
var out = {
|
||||
paramType: paramType || type,
|
||||
name: name,
|
||||
description: accepts.description,
|
||||
type: accepts.type,
|
||||
required: !!accepts.required,
|
||||
paramType: paramType || type,
|
||||
type: accepts.type,
|
||||
$ref: accepts.model,
|
||||
items: accepts.items,
|
||||
uniqueItems: accepts.uniqueItems,
|
||||
format: accepts.format,
|
||||
pattern: accepts.pattern,
|
||||
defaultValue: accepts.defaultValue,
|
||||
enum: accepts.enum,
|
||||
minimum: accepts.minimum,
|
||||
maximum: accepts.maximum,
|
||||
allowMultiple: false
|
||||
allowMultiple: accepts.allowMultiple,
|
||||
description: accepts.description
|
||||
};
|
||||
|
||||
out = routeHelper.extendWithType(out);
|
||||
|
|
|
@ -100,7 +100,8 @@ function addRoute(app, uri, doc) {
|
|||
if (hasBasePath) {
|
||||
var headers = req.headers;
|
||||
var host = headers.Host || headers.host;
|
||||
doc.basePath = req.protocol + '://' + host + initialPath;
|
||||
var protocol = headers['x-forwarded-proto'] || headers['X-Forwarded-Proto'] || ctx.req.protocol
|
||||
doc.basePath = protocol + '://' + host + initialPath;
|
||||
}
|
||||
res.status(200).send(doc);
|
||||
});
|
||||
|
@ -116,13 +117,14 @@ function generateResourceDoc(opts) {
|
|||
return {
|
||||
swaggerVersion: opts.swaggerVersion,
|
||||
apiVersion: opts.version,
|
||||
apis: [],
|
||||
// See https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#513-info-object
|
||||
info: opts.apiInfo
|
||||
info: opts.apiInfo,
|
||||
// TODO Authorizations
|
||||
// https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#514-authorizations-object
|
||||
// TODO Produces/Consumes
|
||||
// https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#52-api-declaration
|
||||
consumes: ['application/json', 'application/xml', 'text/xml'],
|
||||
produces: ['application/json', 'application/javascript', 'application/xml', 'text/javascript', 'text/xml'],
|
||||
apis: [],
|
||||
models: opts.models
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -135,7 +137,7 @@ function getVersion() {
|
|||
try {
|
||||
version = require(path.join(process.cwd(), 'package.json')).version;
|
||||
} catch(e) {
|
||||
version = '';
|
||||
version = '1';
|
||||
}
|
||||
return version;
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
"url": "https://github.com/strongloop/loopback-explorer/issues"
|
||||
},
|
||||
"devDependencies": {
|
||||
"loopback": "1.x",
|
||||
"loopback": "git+https://github.com/shelbys/loopback.git#loopback-v2",
|
||||
"mocha": "~1.20.1",
|
||||
"supertest": "~0.13.0",
|
||||
"chai": "~1.9.1"
|
||||
|
@ -31,7 +31,7 @@
|
|||
"url": "https://github.com/strongloop/loopback-explorer/blob/master/LICENSE"
|
||||
},
|
||||
"dependencies": {
|
||||
"swagger-ui": "~2.0.18",
|
||||
"swagger-ui": "git+https://github.com/shelbys/swagger-ui.git",
|
||||
"debug": "~1.0.3",
|
||||
"lodash.clonedeep": "^2.4.1",
|
||||
"lodash.defaults": "^2.4.1",
|
||||
|
|
Loading…
Reference in New Issue