I have a swagger file. And I use this swagger.json to generate swagger.ui.
Then some errors crashed the app.
It seems like My model: MessageResource $ref itself. And this cause a Infinite loop in swagger-client.js.
{
"swagger": 2,
"info": {
"version": "0.0.1",
"title": "title"
},
"host": "localhost",
"basePath": "/",
"schemes": [
"http",
"https"
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"x-volos-resources": {},
"paths": {
"/discussions": {
"post": {
"x-swagger-router-controller": "discussions",
"description": "Create a new discusion",
"operationId": "create",
"tags": [
"discussion"
],
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "DiscussionBody"
}
}
],
"responses": {
"200": {
"description": "Success",
"schema": {
"$ref": "PostResponse"
}
},
"default": {
"description": "Error",
"schema": {
"$ref": "ErrorResponse"
}
}
}
}
},
"/discussions/{discussionId}": {
"get": {
"x-swagger-router-controller": "discussions",
"description": "Get a discussion",
"operationId": "findById",
"tags": [
"discussion"
],
"parameters": [
{
"name": "discussionId",
"in": "path",
"description": "Id of discussion",
"required": true,
"type": "integer",
"format": "int64"
}
],
"responses": {
"200": {
"description": "Return a Discussion Resource",
"schema": {
"properties": {
"success": {
"type": "boolean"
},
"status": {
"type": "integer",
"format": "int32"
},
"content": {
"$ref": "DiscussionResource"
}
}
}
},
"default": {
"description": "Error",
"schema": {
"$ref": "ErrorResponse"
}
}
}
}
},
"/discussions/{discussionId}/messages": {
"post": {
"x-swagger-router-controller": "messages",
"description": "Create a Message",
"operationId": "create",
"tags": [
"discussion",
"message"
],
"parameters": [
{
"name": "discussionId",
"in": "path",
"description": "Id of discussion",
"required": true,
"type": "integer",
"format": "int64"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "MessageBody"
}
}
],
"responses": {
"200": {
"description": "Success",
"schema": {
"$ref": "PostResponse"
}
},
"default": {
"description": "Error",
"schema": {
"$ref": "ErrorResponse"
}
}
}
},
"get": {
"x-swagger-router-controller": "messages",
"description": "Get all messages for a discussion",
"operationId": "getAllbyDiscussion",
"tags": [
"discussion",
"messages"
],
"parameters": [
{
"name": "discussionId",
"in": "path",
"description": "Id of discussion",
"required": true,
"type": "integer",
"format": "int64"
}
],
"responses": {
"200": {
"description": "Sucess",
"schema": {
"$ref": "MessagesResponse"
}
},
"default": {
"description": "Error",
"schema": {
"$ref": "ErrorResponse"
}
}
}
}
},
"/discussions/{discussionId}/messages/{messageId}": {
"get": {
"x-swagger-router-controller": "messages",
"description": "Get a Message and it's children",
"operationId": "findById",
"tags": [
"discussion",
"messages"
],
"parameters": [
{
"name": "discussionId",
"in": "path",
"description": "Id of discussion",
"required": true,
"type": "integer",
"format": "int64"
},
{
"name": "messageId",
"in": "path",
"description": "Id of message",
"required": true,
"type": "integer",
"format": "int64"
}
],
"responses": {
"200": {
"description": "A successufly response",
"schema": {
"properties": {
"success": {
"type": "boolean",
"description": "True or False if the request was a success"
},
"status": {
"type": "integer",
"description": "The HTTP status code"
},
"content": {
"$ref": "MessageResource"
}
}
}
},
"default": {
"description": "Error",
"schema": {
"$ref": "ErrorResponse"
}
}
}
},
"put": {
"x-swagger-router-controller": "messages",
"description": "Update a message",
"operationId": "update",
"tags": [
"discussion",
"message"
],
"parameters": [
{
"name": "discussionId",
"in": "path",
"description": "Id of discussion",
"required": true,
"type": "integer",
"format": "int64"
},
{
"name": "messageId",
"in": "path",
"description": "Id of message",
"required": true,
"type": "integer",
"format": "int64"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "MessageBody"
}
}
],
"responses": {
"200": {
"description": "Success",
"schema": {
"properties": {
"success": {
"type": "boolean",
"description": "True or False if the request was a success"
},
"status": {
"type": "integer",
"description": "The HTTP status code"
},
"content": {
"$ref": "MessageResource"
}
}
}
},
"default": {
"description": "Error",
"schema": {
"$ref": "ErrorResponse"
}
}
}
},
"delete": {
"x-swagger-router-controller": "messages",
"description": "Delete a messsage",
"operationId": "delete",
"tags": [
"discussion",
"message"
],
"parameters": [
{
"name": "discussionId",
"in": "path",
"description": "Id of discussion",
"required": true,
"type": "integer",
"format": "int64"
},
{
"name": "messageId",
"in": "path",
"description": "Id of message",
"required": true,
"type": "integer",
"format": "int64"
}
],
"responses": {
"200": {
"description": "Success",
"schema": {
"properties": {
"success": {
"type": "boolean",
"description": "True or False if the request was a success"
},
"status": {
"type": "integer",
"description": "The HTTP status code"
}
}
}
},
"default": {
"description": "Error",
"schema": {
"$ref": "ErrorResponse"
}
}
}
}
},
"/discussions/{discussionId}/messages/{messageId}/messages": {
"post": {
"x-swagger-router-controller": "messages",
"description": "Create a reply to a message. The message ID path param will be used as the parent id for the message.",
"operationId": "reply",
"tags": [
"discussion",
"message",
"reply"
],
"parameters": [
{
"name": "discussionId",
"in": "path",
"description": "Id of discussion",
"required": true,
"type": "integer",
"format": "int64"
},
{
"name": "messageId",
"in": "path",
"description": "Id of message",
"required": true,
"type": "integer",
"format": "int64"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "MessageBody"
}
}
],
"responses": {
"200": {
"description": "Sucessful reply",
"schema": {
"$ref": "PostResponse"
}
}
}
}
}
},
"definitions": {
"MessagesResponse": {
"required": [
"messages"
],
"properties": {
"messages": {
"type": "array",
"items": {
"$ref": "MessageResource",
"minItems": 0,
"uniqueItems": true
}
}
}
},
"DiscussionResource": {
"required": [
"discussionId",
"remoteObjectName",
"remoteObjectId",
"messages"
],
"properties": {
"discussionId": {
"type": "integer",
"format": "int64"
},
"remoteObjectName": {
"type": "string"
},
"remoteObjectId": {
"type": "integer",
"format": "int64"
},
"messages": {
"type": "array",
"items": {
"$ref": "MessageResource",
"minItems": 0,
"uniqueItems": true
}
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"updatedAt": {
"type": "string",
"format": "date-time"
},
"createdBy": {
"type": "string",
"description": "The handle fo the user"
},
"updatedBy": {
"type": "string",
"description": "The handle fo the user"
}
}
},
"MessageResource": {
"required": [
"messageId",
"discussionId",
"content"
],
"properties": {
"messageId": {
"type": "integer",
"format": "int64"
},
"discussionId": {
"type": "integer",
"format": "int64"
},
"content": {
"type": "string"
},
"parentMessageId": {
"description": "The parent Message. optional",
"type": "integer",
"format": "int64"
},
"messages": {
"description": "The child messages",
"type": "array",
"items": {
"minItems": 0,
"uniqueItems": true,
"$ref": "MessageResource"
}
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"updatedAt": {
"type": "string",
"format": "date-time"
},
"createdBy": {
"type": "string",
"description": "The handle fo the user"
},
"updatedBy": {
"type": "string",
"description": "The handle fo the user"
}
}
},
"PostResponse": {
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"result": {
"properties": {
"success": {
"type": "boolean",
"description": "Was the request a success"
},
"status": {
"type": "integer",
"format": "int32",
"description": "The http status code"
}
}
}
}
},
"DiscussionBody": {
"required": [
"remoteObjectName",
"remoteObjectId"
],
"properties": {
"remoteObjectName": {
"description": "The type of object which a discussion is attached. for example challenge or submission",
"type": "string"
},
"remoteObjectId": {
"description": "The id of the remote object",
"type": "integer",
"format": "int64"
}
}
},
"MessageBody": {
"required": [
"content"
],
"properties": {
"content": {
"description": "The content of the message",
"type": "string"
}
}
},
"ErrorResponse": {
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"format": "int32",
"description": "The http status code"
},
"message": {
"type": "string"
}
}
}
}
}