Small details
This commit is contained in:
@@ -1,138 +0,0 @@
|
|||||||
{
|
|
||||||
"swagger": "2.0",
|
|
||||||
"info": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"title": "Swagger Petstore",
|
|
||||||
"license": {
|
|
||||||
"name": "MIT"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"host": "petstore.swagger.io",
|
|
||||||
"basePath": "/v1",
|
|
||||||
"schemes": ["http"],
|
|
||||||
"consumes": ["application/json"],
|
|
||||||
"produces": ["application/json"],
|
|
||||||
"paths": {
|
|
||||||
"/pets": {
|
|
||||||
"get": {
|
|
||||||
"summary": "List all pets",
|
|
||||||
"operationId": "listPets",
|
|
||||||
"tags": ["pets"],
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"name": "limit",
|
|
||||||
"in": "query",
|
|
||||||
"description":
|
|
||||||
"How many items to return at one time (max 100)",
|
|
||||||
"required": false,
|
|
||||||
"type": "integer",
|
|
||||||
"format": "int32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "An paged array of pets",
|
|
||||||
"headers": {
|
|
||||||
"x-next": {
|
|
||||||
"type": "string",
|
|
||||||
"description":
|
|
||||||
"A link to the next page of responses"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/Pets"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"default": {
|
|
||||||
"description": "unexpected error",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/Error"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"post": {
|
|
||||||
"summary": "Create a pet",
|
|
||||||
"operationId": "createPets",
|
|
||||||
"tags": ["pets"],
|
|
||||||
"responses": {
|
|
||||||
"201": {
|
|
||||||
"description": "Null response"
|
|
||||||
},
|
|
||||||
"default": {
|
|
||||||
"description": "unexpected error",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/Error"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"/pets/{petId}": {
|
|
||||||
"get": {
|
|
||||||
"summary": "Info for a specific pet",
|
|
||||||
"operationId": "showPetById",
|
|
||||||
"tags": ["pets"],
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"name": "petId",
|
|
||||||
"in": "path",
|
|
||||||
"required": true,
|
|
||||||
"description": "The id of the pet to retrieve",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description":
|
|
||||||
"Expected response to a valid request",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/Pets"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"default": {
|
|
||||||
"description": "unexpected error",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/Error"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"definitions": {
|
|
||||||
"Pet": {
|
|
||||||
"required": ["id", "name"],
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "integer",
|
|
||||||
"format": "int64"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"tag": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Pets": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/definitions/Pet"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Error": {
|
|
||||||
"required": ["code", "message"],
|
|
||||||
"properties": {
|
|
||||||
"code": {
|
|
||||||
"type": "integer",
|
|
||||||
"format": "int32"
|
|
||||||
},
|
|
||||||
"message": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -7,7 +7,7 @@ const app = express();
|
|||||||
const bodyParser = require("body-parser");
|
const bodyParser = require("body-parser");
|
||||||
const cors = require("cors");
|
const cors = require("cors");
|
||||||
const swaggerUi = require("swagger-ui-express");
|
const swaggerUi = require("swagger-ui-express");
|
||||||
const swaggerDocument = require("../restful.json");
|
const swaggerDocument = require("../swagger.json");
|
||||||
|
|
||||||
const dbConn = require("./restful_db.js");
|
const dbConn = require("./restful_db.js");
|
||||||
const validateUser = require("./validate_user.js");
|
const validateUser = require("./validate_user.js");
|
||||||
|
|||||||
@@ -0,0 +1,334 @@
|
|||||||
|
{
|
||||||
|
"swagger": "2.0",
|
||||||
|
"info": {
|
||||||
|
"description": "This is a RESTful API to access world data, including countries, regions, and cities.",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"title": "World Data API"
|
||||||
|
},
|
||||||
|
"host": "127.0.0.1:8443",
|
||||||
|
"schemes": [
|
||||||
|
"http"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
{
|
||||||
|
"name": "token",
|
||||||
|
"description": "Get a JWT for authorization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "countries",
|
||||||
|
"description": "Access the world countries"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "regions",
|
||||||
|
"description": "Access the regions of countries"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "cities",
|
||||||
|
"description": "Access the world cities"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"paths": {
|
||||||
|
"/gettoken": {
|
||||||
|
"post": {
|
||||||
|
"tags": [
|
||||||
|
"token"
|
||||||
|
],
|
||||||
|
"summary": "Get a token to authorize future requests",
|
||||||
|
"consumes": [
|
||||||
|
"application/x-www-form-urlencoded"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"text/plain"
|
||||||
|
],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"in": "formData",
|
||||||
|
"name": "user",
|
||||||
|
"required": true,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"in": "formData",
|
||||||
|
"name": "password",
|
||||||
|
"required": true,
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "A valid token to use for other requests"
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "No token provided"
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Country not found"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/regions": {
|
||||||
|
"get": {
|
||||||
|
"tags": [
|
||||||
|
"regions"
|
||||||
|
],
|
||||||
|
"summary": "Get all regions of all countries",
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"in": "header",
|
||||||
|
"name": "Authorization",
|
||||||
|
"required": true,
|
||||||
|
"type": "string",
|
||||||
|
"description": "Authorization Token"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK"
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "No token provided"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"post": {
|
||||||
|
"tags": [
|
||||||
|
"regions"
|
||||||
|
],
|
||||||
|
"summary": "Add a region to a given country",
|
||||||
|
"consumes": [
|
||||||
|
"application/x-www-form-urlencoded"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"text/plain"
|
||||||
|
],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"in": "formData",
|
||||||
|
"name": "name",
|
||||||
|
"required": true,
|
||||||
|
"type": "string",
|
||||||
|
"description": "The new region's name."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"in": "header",
|
||||||
|
"name": "Authorization",
|
||||||
|
"required": true,
|
||||||
|
"type": "string",
|
||||||
|
"description": "Authorization Token"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"in": "header",
|
||||||
|
"name": "Authorization",
|
||||||
|
"required": true,
|
||||||
|
"type": "string",
|
||||||
|
"description": "Authorization Token"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"201": {
|
||||||
|
"description": "OK, created"
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Name missing, region not created"
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "No token provided"
|
||||||
|
},
|
||||||
|
"403": {
|
||||||
|
"description": "Country not found, region not created"
|
||||||
|
},
|
||||||
|
"409": {
|
||||||
|
"description": "Other failure, region not created"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/regions/{country}": {
|
||||||
|
"get": {
|
||||||
|
"tags": [
|
||||||
|
"regions"
|
||||||
|
],
|
||||||
|
"summary": "Get all regions of a given country",
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "country",
|
||||||
|
"in": "path",
|
||||||
|
"description": "Country (id) whose regions are required",
|
||||||
|
"type": "string",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"in": "header",
|
||||||
|
"name": "Authorization",
|
||||||
|
"required": true,
|
||||||
|
"type": "string",
|
||||||
|
"description": "Authorization Token"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK"
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "No token provided"
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Country not found"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/regions/{country}/{id}": {
|
||||||
|
"get": {
|
||||||
|
"tags": [
|
||||||
|
"regions"
|
||||||
|
],
|
||||||
|
"summary": "Get a specific region of a given country",
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "country",
|
||||||
|
"in": "path",
|
||||||
|
"description": "Country (id) of the region",
|
||||||
|
"type": "string",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id",
|
||||||
|
"in": "path",
|
||||||
|
"description": "Region (id) that is required",
|
||||||
|
"type": "string",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"in": "header",
|
||||||
|
"name": "Authorization",
|
||||||
|
"required": true,
|
||||||
|
"type": "string",
|
||||||
|
"description": "Authorization Token"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK"
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "No token provided"
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Country not found"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete": {
|
||||||
|
"tags": [
|
||||||
|
"regions"
|
||||||
|
],
|
||||||
|
"summary": "Delete a specific region of a given country",
|
||||||
|
"description": "",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "country",
|
||||||
|
"in": "path",
|
||||||
|
"description": "Country (id) of the region",
|
||||||
|
"type": "string",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id",
|
||||||
|
"in": "path",
|
||||||
|
"description": "Region (id) that is to be deleted",
|
||||||
|
"type": "string",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"in": "header",
|
||||||
|
"name": "Authorization",
|
||||||
|
"required": true,
|
||||||
|
"type": "string",
|
||||||
|
"description": "Authorization Token"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"204": {
|
||||||
|
"description": "OK, region was deleted"
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "No token provided"
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Region does not exist"
|
||||||
|
},
|
||||||
|
"405": {
|
||||||
|
"description": "Region has cities, cannot be deleted"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"put": {
|
||||||
|
"tags": [
|
||||||
|
"regions"
|
||||||
|
],
|
||||||
|
"summary": "Update a specific region of a given country",
|
||||||
|
"consumes": [
|
||||||
|
"application/x-www-form-urlencoded"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"text/plain"
|
||||||
|
],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "country",
|
||||||
|
"in": "path",
|
||||||
|
"description": "Country (id) of the region",
|
||||||
|
"type": "string",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id",
|
||||||
|
"in": "path",
|
||||||
|
"description": "Region (id) that is to be deleted",
|
||||||
|
"type": "string",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"in": "formData",
|
||||||
|
"name": "name",
|
||||||
|
"required": true,
|
||||||
|
"type": "string",
|
||||||
|
"description": "The region's new name."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"in": "header",
|
||||||
|
"name": "Authorization",
|
||||||
|
"required": true,
|
||||||
|
"type": "string",
|
||||||
|
"description": "Authorization Token"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"204": {
|
||||||
|
"description": "OK, region was updated"
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Name missing, region not updated"
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "No token provided"
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Country not found"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+33
-24
@@ -1,10 +1,13 @@
|
|||||||
openapi: "2.0.0"
|
swagger: "2.0"
|
||||||
info:
|
info:
|
||||||
description: "This is a RESTful API to access world data, including countries, regions, and cities."
|
description: "This is a RESTful API to access world data, including countries, regions, and cities."
|
||||||
version: "1.0.0"
|
version: "1.0.0"
|
||||||
title: "World Data API"
|
title: "World Data API"
|
||||||
|
|
||||||
host: "localhost:8443"
|
host: "127.0.0.1:8443"
|
||||||
|
schemes:
|
||||||
|
- "http"
|
||||||
|
|
||||||
tags:
|
tags:
|
||||||
- name: "token"
|
- name: "token"
|
||||||
description: "Get a JWT for authorization"
|
description: "Get a JWT for authorization"
|
||||||
@@ -14,8 +17,7 @@ tags:
|
|||||||
description: "Access the regions of countries"
|
description: "Access the regions of countries"
|
||||||
- name: "cities"
|
- name: "cities"
|
||||||
description: "Access the world cities"
|
description: "Access the world cities"
|
||||||
schemes:
|
|
||||||
- "http"
|
|
||||||
|
|
||||||
paths:
|
paths:
|
||||||
/gettoken:
|
/gettoken:
|
||||||
@@ -32,19 +34,15 @@ paths:
|
|||||||
name: user
|
name: user
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
description: A person's name.
|
|
||||||
- in: formData
|
- in: formData
|
||||||
name: password
|
name: password
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
description: A person's favorite number.
|
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
description: A valid token to use for other requests
|
description: A valid token to use for other requests
|
||||||
401:
|
401:
|
||||||
description: "No token provided"
|
description: "No token provided"
|
||||||
404:
|
|
||||||
description: "Country not found"
|
|
||||||
|
|
||||||
/regions:
|
/regions:
|
||||||
get:
|
get:
|
||||||
@@ -53,6 +51,12 @@ paths:
|
|||||||
summary: "Get all regions of all countries"
|
summary: "Get all regions of all countries"
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- in: header
|
||||||
|
name: "Authorization"
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
description: Authorization Token
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
description: "OK"
|
description: "OK"
|
||||||
@@ -74,7 +78,7 @@ paths:
|
|||||||
type: string
|
type: string
|
||||||
description: The new region's name.
|
description: The new region's name.
|
||||||
- in: header
|
- in: header
|
||||||
name: "Authorization: Bearer"
|
name: "Authorization"
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
description: Authorization Token
|
description: Authorization Token
|
||||||
@@ -103,6 +107,11 @@ paths:
|
|||||||
description: "Country (id) whose regions are required"
|
description: "Country (id) whose regions are required"
|
||||||
type: string
|
type: string
|
||||||
required: true
|
required: true
|
||||||
|
- in: header
|
||||||
|
name: "Authorization"
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
description: Authorization Token
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
description: "OK"
|
description: "OK"
|
||||||
@@ -130,6 +139,11 @@ paths:
|
|||||||
description: "Region (id) that is required"
|
description: "Region (id) that is required"
|
||||||
type: string
|
type: string
|
||||||
required: true
|
required: true
|
||||||
|
- in: header
|
||||||
|
name: "Authorization"
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
description: Authorization Token
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
description: "OK"
|
description: "OK"
|
||||||
@@ -154,6 +168,11 @@ paths:
|
|||||||
description: "Region (id) that is to be deleted"
|
description: "Region (id) that is to be deleted"
|
||||||
type: string
|
type: string
|
||||||
required: true
|
required: true
|
||||||
|
- in: header
|
||||||
|
name: "Authorization"
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
description: Authorization Token
|
||||||
responses:
|
responses:
|
||||||
204:
|
204:
|
||||||
description: "OK, region was deleted"
|
description: "OK, region was deleted"
|
||||||
@@ -188,6 +207,11 @@ paths:
|
|||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
description: The region's new name.
|
description: The region's new name.
|
||||||
|
- in: header
|
||||||
|
name: "Authorization"
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
description: Authorization Token
|
||||||
responses:
|
responses:
|
||||||
204:
|
204:
|
||||||
description: "OK, region was updated"
|
description: "OK, region was updated"
|
||||||
@@ -197,18 +221,3 @@ paths:
|
|||||||
description: "No token provided"
|
description: "No token provided"
|
||||||
404:
|
404:
|
||||||
description: "Country not found"
|
description: "Country not found"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
components:
|
|
||||||
securitySchemes:
|
|
||||||
JwtAuth:
|
|
||||||
type: apiKey
|
|
||||||
in: header
|
|
||||||
name: Authorization
|
|
||||||
|
|
||||||
bearerAuth: # arbitrary name for the security scheme
|
|
||||||
type: apiKey
|
|
||||||
in: header
|
|
||||||
scheme: bearer
|
|
||||||
bearerFormat: JWT
|
|
||||||
|
|||||||
Reference in New Issue
Block a user