mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-02-21 04:58:38 -05:00
Added Swagger files to design web API
This commit is contained in:
parent
3db655fe61
commit
1e8820e94e
34
swagger/sdrangel/.gitignore
vendored
Normal file
34
swagger/sdrangel/.gitignore
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# IDE files
|
||||||
|
.idea
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# Runtime data
|
||||||
|
pids
|
||||||
|
*.pid
|
||||||
|
*.seed
|
||||||
|
|
||||||
|
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||||
|
lib-cov
|
||||||
|
|
||||||
|
# Coverage directory used by tools like istanbul
|
||||||
|
coverage
|
||||||
|
|
||||||
|
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
|
||||||
|
.grunt
|
||||||
|
|
||||||
|
# Compiled binary addons (http://nodejs.org/api/addons.html)
|
||||||
|
build/Release
|
||||||
|
|
||||||
|
# Dependency directory
|
||||||
|
# Commenting this out is preferred by some people, see
|
||||||
|
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
|
||||||
|
node_modules
|
||||||
|
|
||||||
|
# Users Environment Variables
|
||||||
|
.lock-wscript
|
||||||
|
|
||||||
|
# Runtime configuration for swagger app
|
||||||
|
config/runtime.yaml
|
59
swagger/sdrangel/README.md
Normal file
59
swagger/sdrangel/README.md
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
# Swagger project for SDRangel
|
||||||
|
|
||||||
|
<h1>What is Swagger?</h1>
|
||||||
|
|
||||||
|
Swagger is an open source software framework backed by a large ecosystem of tools that helps developers design, build, document, and consume RESTful Web services. [Link to Swagger website](https://swagger.io/)
|
||||||
|
|
||||||
|
Swagger is used to design the SDRangel web API. You will find the Swagger framework for SDRangel here.
|
||||||
|
|
||||||
|
<h1>Install Swagger</h1>
|
||||||
|
|
||||||
|
Uses `apt-get` package manager (Ubuntu, Debian). Use your distribution package manager for other distributions
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sudo apt-get install npm
|
||||||
|
sudo npm install -g swagger
|
||||||
|
```
|
||||||
|
|
||||||
|
install Node.js 6.x on Ubuntu 16.04 :
|
||||||
|
|
||||||
|
```shell
|
||||||
|
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
|
||||||
|
sudo apt-get install -y nodejs
|
||||||
|
```
|
||||||
|
Install http-server a lightweight web server to serve included files
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sudo npm install -g http-server
|
||||||
|
```
|
||||||
|
|
||||||
|
<h1>Work with Swagger</h1>
|
||||||
|
|
||||||
|
<h2>Edit files with Swagger</h2>
|
||||||
|
|
||||||
|
All commands are relative to this directory (where the README.md is)
|
||||||
|
|
||||||
|
Firstly start a node server to serve files in `api/swagger/include`
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cd api/swagger/include
|
||||||
|
http-server --cors .
|
||||||
|
```
|
||||||
|
|
||||||
|
Then in start the swagger editor
|
||||||
|
|
||||||
|
```shell
|
||||||
|
swagger project edit
|
||||||
|
```
|
||||||
|
|
||||||
|
<h2>Mocking</h2>
|
||||||
|
|
||||||
|
Write controllers for mocking in `api/mocks/`
|
||||||
|
|
||||||
|
Run the server in mock mode:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
swagger project start -m
|
||||||
|
```
|
||||||
|
|
||||||
|
|
1
swagger/sdrangel/api/controllers/README.md
Normal file
1
swagger/sdrangel/api/controllers/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
Place your controllers in this directory.
|
44
swagger/sdrangel/api/controllers/hello_world.js
Normal file
44
swagger/sdrangel/api/controllers/hello_world.js
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
'use strict';
|
||||||
|
/*
|
||||||
|
'use strict' is not required but helpful for turning syntactical errors into true errors in the program flow
|
||||||
|
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Modules make it possible to import JavaScript files into your application. Modules are imported
|
||||||
|
using 'require' statements that give you a reference to the module.
|
||||||
|
|
||||||
|
It is a good idea to list the modules that your application depends on in the package.json in the project root
|
||||||
|
*/
|
||||||
|
var util = require('util');
|
||||||
|
|
||||||
|
/*
|
||||||
|
Once you 'require' a module you can reference the things that it exports. These are defined in module.exports.
|
||||||
|
|
||||||
|
For a controller in a127 (which this is) you should export the functions referenced in your Swagger document by name.
|
||||||
|
|
||||||
|
Either:
|
||||||
|
- The HTTP Verb of the corresponding operation (get, put, post, delete, etc)
|
||||||
|
- Or the operationId associated with the operation in your Swagger document
|
||||||
|
|
||||||
|
In the starter/skeleton project the 'get' operation on the '/hello' path has an operationId named 'hello'. Here,
|
||||||
|
we specify that in the exports of this module that 'hello' maps to the function named 'hello'
|
||||||
|
*/
|
||||||
|
module.exports = {
|
||||||
|
hello: hello
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions in a127 controllers used for operations should take two parameters:
|
||||||
|
|
||||||
|
Param 1: a handle to the request object
|
||||||
|
Param 2: a handle to the response object
|
||||||
|
*/
|
||||||
|
function hello(req, res) {
|
||||||
|
// variables defined in the Swagger document can be referenced using req.swagger.params.{parameter_name}
|
||||||
|
var name = req.swagger.params.name.value || 'stranger';
|
||||||
|
var hello = util.format('Hello, %s!', name);
|
||||||
|
|
||||||
|
// this sends back a JSON response which is a single string
|
||||||
|
res.json(hello);
|
||||||
|
}
|
1
swagger/sdrangel/api/helpers/README.md
Normal file
1
swagger/sdrangel/api/helpers/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
Place helper files in this directory.
|
5
swagger/sdrangel/api/mocks/README.md
Normal file
5
swagger/sdrangel/api/mocks/README.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<h1>This directory contains the controller files to support the mock server</h1>
|
||||||
|
|
||||||
|
<h2>Controllers</h2>
|
||||||
|
|
||||||
|
- `instance.js`: methods found in the `/sdrangel` route
|
211
swagger/sdrangel/api/mocks/instance.js
Normal file
211
swagger/sdrangel/api/mocks/instance.js
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
instanceSummary: instanceSummary,
|
||||||
|
instanceDevices: instanceDevices,
|
||||||
|
instanceChannels: instanceChannels
|
||||||
|
};
|
||||||
|
|
||||||
|
function instanceSummary(req, res, next) {
|
||||||
|
|
||||||
|
res.json([
|
||||||
|
{
|
||||||
|
"version":"4.0.0",
|
||||||
|
"logging": {
|
||||||
|
"consoleLevel": "info",
|
||||||
|
"fileLevel": "debug",
|
||||||
|
"dumpToFile": false
|
||||||
|
},
|
||||||
|
"devicesetcount":2,
|
||||||
|
"devicesets":[
|
||||||
|
{
|
||||||
|
"samplingDevice": {
|
||||||
|
"index":0,
|
||||||
|
"hwType":"RTLSDR",
|
||||||
|
"rx":true,
|
||||||
|
"streamIndex":0,
|
||||||
|
"sequence":0,
|
||||||
|
"serial":"R820T2005",
|
||||||
|
"centerFrequency": 435000000,
|
||||||
|
"bandwidth": 64000
|
||||||
|
},
|
||||||
|
"channelcount":2,
|
||||||
|
"channels":[
|
||||||
|
{"index":0,"id":"AMDemod","deltaFrequency":-12500},
|
||||||
|
{"index":1,"id":"AMDemod","deltaFrequency":12500}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"samplingDevice": {
|
||||||
|
"index":1,
|
||||||
|
"hwType":"HackRF",
|
||||||
|
"rx":false,
|
||||||
|
"streamIndex":0,
|
||||||
|
"sequence":0,
|
||||||
|
"serial":"453c64c8257a608f",
|
||||||
|
"centerFrequency": 435000000,
|
||||||
|
"bandwidth": 128000
|
||||||
|
},
|
||||||
|
"channelcount":1,
|
||||||
|
"channels":[
|
||||||
|
{"index":0,"id":"AMMod","deltaFrequency":12500}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
],
|
||||||
|
"user":{"index":1,"name":"Sample text"}}
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
function instanceDevices(req, res, next) {
|
||||||
|
var direction = req.swagger.params.direction.value || "rx";
|
||||||
|
//console.log(direction.value)
|
||||||
|
|
||||||
|
if (direction === "tx") {
|
||||||
|
res.json([
|
||||||
|
{
|
||||||
|
"devicecount": 1,
|
||||||
|
"devices": [
|
||||||
|
{
|
||||||
|
"hwType":"HackRF",
|
||||||
|
"rx":false,
|
||||||
|
"streamIndex":0,
|
||||||
|
"sequence":0,
|
||||||
|
"serial":"453c64c8257a608f"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}]);
|
||||||
|
} else {
|
||||||
|
res.json([
|
||||||
|
{
|
||||||
|
"devicecount": 2,
|
||||||
|
"devices": [
|
||||||
|
{
|
||||||
|
"hwType":"RTLSDR",
|
||||||
|
"rx":true,
|
||||||
|
"streamIndex":0,
|
||||||
|
"sequence":0,
|
||||||
|
"serial":"R820T2005"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hwType":"HackRF",
|
||||||
|
"rx":true,
|
||||||
|
"streamIndex":0,
|
||||||
|
"sequence":0,
|
||||||
|
"serial":"453c64c8257a608f"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function instanceChannels(req, res, next) {
|
||||||
|
var direction = req.swagger.params.direction.value || "rx";
|
||||||
|
|
||||||
|
if (direction === "tx") {
|
||||||
|
res.json([
|
||||||
|
{
|
||||||
|
"channelcount": 6,
|
||||||
|
"channels": [
|
||||||
|
{
|
||||||
|
"name":"AM Modulator",
|
||||||
|
"id": "AMMod",
|
||||||
|
"rx":false,
|
||||||
|
"version": "3.9.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"ATV Modulator",
|
||||||
|
"id": "ATVMod",
|
||||||
|
"rx":false,
|
||||||
|
"version": "3.9.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"NFM Modulator",
|
||||||
|
"id": "NFMMod",
|
||||||
|
"rx":false,
|
||||||
|
"version": "3.9.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"SSB Modulator",
|
||||||
|
"id": "SSBMod",
|
||||||
|
"rx":false,
|
||||||
|
"version": "3.9.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"UDP Channel Sink",
|
||||||
|
"id": "UDPSink",
|
||||||
|
"rx":false,
|
||||||
|
"version": "4.0.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"WFM Modulator",
|
||||||
|
"id": "WFMMod",
|
||||||
|
"rx":false,
|
||||||
|
"version": "3.9.0"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}]);
|
||||||
|
} else {
|
||||||
|
res.json([
|
||||||
|
{
|
||||||
|
"channelcount": 9,
|
||||||
|
"channels": [
|
||||||
|
{
|
||||||
|
"name":"AM Demodulator",
|
||||||
|
"id": "AMemod",
|
||||||
|
"rx":true,
|
||||||
|
"version": "4.0.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"Broadcast FM Demodulator",
|
||||||
|
"id": "BFMDemod",
|
||||||
|
"rx":true,
|
||||||
|
"version": "4.0.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"ATV Demodulator",
|
||||||
|
"id": "ATVDemod",
|
||||||
|
"rx":true,
|
||||||
|
"version": "4.0.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"DSD Demodulator",
|
||||||
|
"id": "DSDDemod",
|
||||||
|
"rx":true,
|
||||||
|
"version": "4.0.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"NFM Demodulator",
|
||||||
|
"id": "NFDemod",
|
||||||
|
"rx":true,
|
||||||
|
"version": "4.0.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"SSB Demodulator",
|
||||||
|
"id": "SSBDemod",
|
||||||
|
"rx":true,
|
||||||
|
"version": "4.0.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"TCP Channel Source",
|
||||||
|
"id": "TCPSource",
|
||||||
|
"rx":true,
|
||||||
|
"version": "4.0.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"UDP Channel Source",
|
||||||
|
"id": "UDPSource",
|
||||||
|
"rx":true,
|
||||||
|
"version": "4.0.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"WFM Demodulator",
|
||||||
|
"id": "WFMDemod",
|
||||||
|
"rx":true,
|
||||||
|
"version": "4.0.0"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
9
swagger/sdrangel/api/swagger/include/User.yaml
Normal file
9
swagger/sdrangel/api/swagger/include/User.yaml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
User:
|
||||||
|
required:
|
||||||
|
- index
|
||||||
|
- name
|
||||||
|
properties:
|
||||||
|
index:
|
||||||
|
type: integer
|
||||||
|
name:
|
||||||
|
type: string
|
229
swagger/sdrangel/api/swagger/swagger.yaml
Normal file
229
swagger/sdrangel/api/swagger/swagger.yaml
Normal file
@ -0,0 +1,229 @@
|
|||||||
|
swagger: "2.0"
|
||||||
|
info:
|
||||||
|
version: "4.0.0"
|
||||||
|
title: SDRangel
|
||||||
|
# during dev, should point to your local machine
|
||||||
|
host: localhost:10010
|
||||||
|
# basePath prefixes all resource paths
|
||||||
|
basePath: /
|
||||||
|
#
|
||||||
|
schemes:
|
||||||
|
# tip: remove http to make production-grade
|
||||||
|
- http
|
||||||
|
- https
|
||||||
|
# format of bodies a client can send (Content-Type)
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
# format of the responses to the client (Accepts)
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
paths:
|
||||||
|
/sdrangel:
|
||||||
|
# binds a127 app logic to a route
|
||||||
|
x-swagger-router-controller: instance
|
||||||
|
get:
|
||||||
|
description: SDRangel instance summary
|
||||||
|
# used as the method name of the controller
|
||||||
|
operationId: instanceSummary
|
||||||
|
# parameters:
|
||||||
|
# - name: name
|
||||||
|
# in: query
|
||||||
|
# description: The name of the person to whom to say hello
|
||||||
|
# required: false
|
||||||
|
# type: string
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: Success
|
||||||
|
schema:
|
||||||
|
# a pointer to a definition
|
||||||
|
$ref: "#/definitions/InstanceSummaryResponse"
|
||||||
|
# responses may fall through to errors
|
||||||
|
default:
|
||||||
|
description: Error
|
||||||
|
schema:
|
||||||
|
$ref: "#/definitions/ErrorResponse"
|
||||||
|
/sdrangel/devices:
|
||||||
|
x-swagger-router-controller: instance
|
||||||
|
get:
|
||||||
|
description: Get a list of sampling devices
|
||||||
|
operationId: instanceDevices
|
||||||
|
parameters:
|
||||||
|
- name: direction
|
||||||
|
in: query
|
||||||
|
description: gives Rx or Tx direction
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: Success
|
||||||
|
schema:
|
||||||
|
$ref: "#/definitions/InstanceDevicesResponse"
|
||||||
|
default:
|
||||||
|
description: Error
|
||||||
|
schema:
|
||||||
|
$ref: "#/definitions/ErrorResponse"
|
||||||
|
/sdrangel/channels:
|
||||||
|
x-swagger-router-controller: instance
|
||||||
|
get:
|
||||||
|
description: Get a list of channel plugins
|
||||||
|
operationId: instanceChannels
|
||||||
|
parameters:
|
||||||
|
- name: direction
|
||||||
|
in: query
|
||||||
|
description: gives Rx or Tx direction
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: Success
|
||||||
|
schema:
|
||||||
|
$ref: "#/definitions/InstanceChannelsResponse"
|
||||||
|
default:
|
||||||
|
description: Error
|
||||||
|
schema:
|
||||||
|
$ref: "#/definitions/ErrorResponse"
|
||||||
|
/swagger:
|
||||||
|
x-swagger-pipe: swagger_raw
|
||||||
|
# complex objects have schema definitions
|
||||||
|
definitions:
|
||||||
|
InstanceSummaryResponse:
|
||||||
|
required:
|
||||||
|
- version
|
||||||
|
- devicesetcount
|
||||||
|
properties:
|
||||||
|
version:
|
||||||
|
type: string
|
||||||
|
logging:
|
||||||
|
$ref: "#/definitions/LoggingInfo"
|
||||||
|
devicesetcount:
|
||||||
|
type: integer
|
||||||
|
devicesets:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: "#/definitions/DeviceSet"
|
||||||
|
user:
|
||||||
|
$ref: "http://localhost:8080/User.yaml#/User"
|
||||||
|
InstanceDevicesResponse:
|
||||||
|
required:
|
||||||
|
- devicecount
|
||||||
|
properties:
|
||||||
|
devicecount:
|
||||||
|
type: integer
|
||||||
|
devices:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: "#/definitions/DeviceListItem"
|
||||||
|
InstanceChannelsResponse:
|
||||||
|
required:
|
||||||
|
- channelcount
|
||||||
|
properties:
|
||||||
|
channelcount:
|
||||||
|
type: integer
|
||||||
|
channels:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: "#/definitions/ChannelListItem"
|
||||||
|
ErrorResponse:
|
||||||
|
required:
|
||||||
|
- message
|
||||||
|
properties:
|
||||||
|
message:
|
||||||
|
type: string
|
||||||
|
LoggingInfo:
|
||||||
|
required:
|
||||||
|
- consoleLevel
|
||||||
|
- fileLevel
|
||||||
|
- dumpToFile
|
||||||
|
properties:
|
||||||
|
consoleLevel:
|
||||||
|
type: string
|
||||||
|
fileLevel:
|
||||||
|
type: string
|
||||||
|
dumpToFile:
|
||||||
|
type: boolean
|
||||||
|
fileName:
|
||||||
|
type: string
|
||||||
|
DeviceListItem:
|
||||||
|
required:
|
||||||
|
- hwType
|
||||||
|
- rx
|
||||||
|
- streamIndex
|
||||||
|
- sequence
|
||||||
|
- serial
|
||||||
|
properties:
|
||||||
|
hwType:
|
||||||
|
type: string
|
||||||
|
rx:
|
||||||
|
type: boolean
|
||||||
|
streamIndex:
|
||||||
|
type: integer
|
||||||
|
sequence:
|
||||||
|
type: integer
|
||||||
|
serial:
|
||||||
|
type: string
|
||||||
|
ChannelListItem:
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
- id
|
||||||
|
- rx
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
id:
|
||||||
|
type: string
|
||||||
|
rx:
|
||||||
|
type: boolean
|
||||||
|
version:
|
||||||
|
type: string
|
||||||
|
DeviceSet:
|
||||||
|
required:
|
||||||
|
- samplingDevice
|
||||||
|
- channelcount
|
||||||
|
properties:
|
||||||
|
samplingDevice:
|
||||||
|
$ref: "#/definitions/SamplingDevice"
|
||||||
|
channelcount:
|
||||||
|
type: integer
|
||||||
|
channels:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: "#/definitions/Channel"
|
||||||
|
SamplingDevice:
|
||||||
|
required:
|
||||||
|
- index
|
||||||
|
- hwType
|
||||||
|
- rx
|
||||||
|
- streamIndex
|
||||||
|
- sequence
|
||||||
|
- serial
|
||||||
|
- centerFrequency
|
||||||
|
- bandwidth
|
||||||
|
properties:
|
||||||
|
index:
|
||||||
|
type: integer
|
||||||
|
hwType:
|
||||||
|
type: string
|
||||||
|
rx:
|
||||||
|
type: boolean
|
||||||
|
streamIndex:
|
||||||
|
type: integer
|
||||||
|
sequence:
|
||||||
|
type: integer
|
||||||
|
serial:
|
||||||
|
type: string
|
||||||
|
centerFrequency:
|
||||||
|
type: integer
|
||||||
|
bandwidth:
|
||||||
|
type: integer
|
||||||
|
Channel:
|
||||||
|
required:
|
||||||
|
- index
|
||||||
|
- id
|
||||||
|
- deltaFrequency
|
||||||
|
properties:
|
||||||
|
index:
|
||||||
|
type: integer
|
||||||
|
id:
|
||||||
|
type: string
|
||||||
|
deltaFrequency:
|
||||||
|
type: integer
|
23
swagger/sdrangel/app.js
Normal file
23
swagger/sdrangel/app.js
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var SwaggerExpress = require('swagger-express-mw');
|
||||||
|
var app = require('express')();
|
||||||
|
module.exports = app; // for testing
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
appRoot: __dirname // required config
|
||||||
|
};
|
||||||
|
|
||||||
|
SwaggerExpress.create(config, function(err, swaggerExpress) {
|
||||||
|
if (err) { throw err; }
|
||||||
|
|
||||||
|
// install middleware
|
||||||
|
swaggerExpress.register(app);
|
||||||
|
|
||||||
|
var port = process.env.PORT || 10010;
|
||||||
|
app.listen(port);
|
||||||
|
|
||||||
|
if (swaggerExpress.runner.swagger.paths['/hello']) {
|
||||||
|
console.log('try this:\ncurl http://127.0.0.1:' + port + '/hello?name=Scott');
|
||||||
|
}
|
||||||
|
});
|
1
swagger/sdrangel/config/README.md
Normal file
1
swagger/sdrangel/config/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
Place configuration files in this directory.
|
37
swagger/sdrangel/config/default.yaml
Normal file
37
swagger/sdrangel/config/default.yaml
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
# swagger configuration file
|
||||||
|
|
||||||
|
# values in the swagger hash are system configuration for swagger-node
|
||||||
|
swagger:
|
||||||
|
|
||||||
|
fittingsDirs: [ api/fittings ]
|
||||||
|
defaultPipe: null
|
||||||
|
swaggerControllerPipe: swagger_controllers # defines the standard processing pipe for controllers
|
||||||
|
|
||||||
|
# values defined in the bagpipes key are the bagpipes pipes and fittings definitions
|
||||||
|
# (see https://github.com/apigee-127/bagpipes)
|
||||||
|
bagpipes:
|
||||||
|
|
||||||
|
_router:
|
||||||
|
name: swagger_router
|
||||||
|
mockMode: false
|
||||||
|
mockControllersDirs: [ api/mocks ]
|
||||||
|
controllersDirs: [ api/controllers ]
|
||||||
|
|
||||||
|
_swagger_validate:
|
||||||
|
name: swagger_validator
|
||||||
|
validateResponse: true
|
||||||
|
|
||||||
|
# pipe for all swagger-node controllers
|
||||||
|
swagger_controllers:
|
||||||
|
- onError: json_error_handler
|
||||||
|
- cors
|
||||||
|
- swagger_security
|
||||||
|
- _swagger_validate
|
||||||
|
- express_compatibility
|
||||||
|
- _router
|
||||||
|
|
||||||
|
# pipe to serve swagger (endpoint is in swagger.yaml)
|
||||||
|
swagger_raw:
|
||||||
|
name: swagger_raw
|
||||||
|
|
||||||
|
# any other values in this file are just loaded into the config for application access...
|
22
swagger/sdrangel/package.json
Normal file
22
swagger/sdrangel/package.json
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"name": "sdrangel",
|
||||||
|
"version": "4.0.0",
|
||||||
|
"private": true,
|
||||||
|
"description": "New Swagger API Project for SDRangel",
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "",
|
||||||
|
"main": "app.js",
|
||||||
|
"dependencies": {
|
||||||
|
"express": "^4.12.3",
|
||||||
|
"swagger-express-mw": "^0.1.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"should": "^7.1.0",
|
||||||
|
"supertest": "^1.0.0"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"start": "node app.js",
|
||||||
|
"test": "swagger project test"
|
||||||
|
}
|
||||||
|
}
|
1
swagger/sdrangel/test/api/controllers/README.md
Normal file
1
swagger/sdrangel/test/api/controllers/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
Place your controller tests in this directory.
|
48
swagger/sdrangel/test/api/controllers/hello_world.js
Normal file
48
swagger/sdrangel/test/api/controllers/hello_world.js
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
var should = require('should');
|
||||||
|
var request = require('supertest');
|
||||||
|
var server = require('../../../app');
|
||||||
|
|
||||||
|
describe('controllers', function() {
|
||||||
|
|
||||||
|
describe('hello_world', function() {
|
||||||
|
|
||||||
|
describe('GET /hello', function() {
|
||||||
|
|
||||||
|
it('should return a default string', function(done) {
|
||||||
|
|
||||||
|
request(server)
|
||||||
|
.get('/hello')
|
||||||
|
.set('Accept', 'application/json')
|
||||||
|
.expect('Content-Type', /json/)
|
||||||
|
.expect(200)
|
||||||
|
.end(function(err, res) {
|
||||||
|
should.not.exist(err);
|
||||||
|
|
||||||
|
res.body.should.eql('Hello, stranger!');
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should accept a name parameter', function(done) {
|
||||||
|
|
||||||
|
request(server)
|
||||||
|
.get('/hello')
|
||||||
|
.query({ name: 'Scott'})
|
||||||
|
.set('Accept', 'application/json')
|
||||||
|
.expect('Content-Type', /json/)
|
||||||
|
.expect(200)
|
||||||
|
.end(function(err, res) {
|
||||||
|
should.not.exist(err);
|
||||||
|
|
||||||
|
res.body.should.eql('Hello, Scott!');
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
1
swagger/sdrangel/test/api/helpers/README.md
Normal file
1
swagger/sdrangel/test/api/helpers/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
Place your helper tests in this directory.
|
Loading…
Reference in New Issue
Block a user