Лекция 18
http://swagger.io/
http://editor.swagger.io/#/
http://swagger.io/open-source-integrations/
swagger: "2.0"
info:
title: News API
version: "1.0.0"
host: news.xyz
schemes:
- http
basePath: /api/v1
produces:
- application/json
...
...
paths:
...
definitions:
...
/news:
get:
summary: Return news with paggination
tags:
- News
parameters:
- name: limit
in: query
type: number
format: integer
- name: offset
in: query
type: number
format: integer
responses:
...
/news:
get:
...
responses:
200:
description: News portion
schema:
type: object
properties:
metadata:
$ref: '#/definitions/Pagging'
news:
type: array
items:
$ref: '#/definitions/News'
...
/news:
get:
...
responses:
...
500:
description: Server error
schema:
$ref: '#/definitions/Error'
/news:
post:
summary: Create news
tags:
- News
parameters:
- name: token
in: header
required: true
type: string
- name: body
in: body
required: true
schema:
$ref: '#/definitions/News'
...
/news:
post:
...
responses:
201:
description: News created
schema:
$ref: '#/definitions/News'
409:
description: Already exist
schema:
$ref: '#/definitions/Error'
500:
description: Server error
schema:
$ref: '#/definitions/Error'
/news/{id}:
get:
summary: Return one news item by id
parameters:
- name: id
in: path
required: true
type: string
responses:
200:
description: News item
schema:
$ref: '#/definitions/News'
...
/news/{id}:
get:
...
responses:
...
404:
description: Not found
schema:
$ref: '#/definitions/Error'
500:
description: Server error
schema:
$ref: '#/definitions/Error'
/news/{id}:
put:
summary: Update news
tags:
- News
parameters:
- name: token
in: header
required: true
type: string
- name: id
in: path
required: true
type: string
...
/news/{id}:
put:
...
parameters:
...
- name: body
in: body
required: true
schema:
$ref: '#/definitions/News'
responses:
200:
description: News updated
schema:
$ref: '#/definitions/News'
500: ...
/news/{id}:
delete:
summary: Delete news
tags:
- News
parameters:
- name: token
in: header
required: true
type: string
- name: id
in: path
required: true
type: string
...
/news/{id}:
delete:
...
responses:
200:
description: News deleted
schema:
$ref: '#/definitions/News'
500:
description: Server error
schema:
$ref: '#/definitions/Error'
Error:
type: object
properties:
error:
type: object
properties:
message:
type: string
code:
type: number
Pagging:
type: object
properties:
count:
type: number
format: integer
offset:
type: number
format: integer
limit:
type: number
format: integer
News:
type: object
properties:
id:
type: number
format: integer
title:
type: string
content:
type: string
date:
type: string
format: date
https://github.com/krakenjs/swaggerize-express
npm install yo generator-swaggerize --save-dev
npx yo swaggerize
// server.js
var Http = require('http');
var Express = require('express');
var BodyParser = require('body-parser');
var Swaggerize = require('swaggerize-express');
var Path = require('path');
var App = Express();
var Server = Http.createServer(App);
App.use(BodyParser.json());
App.use(BodyParser.urlencoded({
extended: true
}));
// server.js
App.use(Swaggerize({
api: Path.resolve('./config/swagger.yaml'),
handlers: Path.resolve('./handlers')
}));
Server.listen(8000, function () {
App.swagger.api.host =
this.address().address
+ ':'
+ this.address().port;
console.log('App running on %s:%d',
this.address().address,
this.address().port);
});
// handlers/news.js
var dataProvider = require('../data/news.js');
module.exports = {
get: function (req, res, next) {
...
},
post: function (req, res, next) {
...
}
};
// handlers/news/{id}.js
var dataProvider
= require('../../data/news/{id}.js');
module.exports = {
get: function (req, res, next) {
...
},
put: function (req, res, next) {
...
},
delete: function (req, res, next) {
...
}
};