Воздух становится все хуже и хуже, надо отправляться в путь
Когда я был стажером, я был обеспокоен тем, что после написания API-документа этот API-документ автоматически сгенерирует для вас фиктивные тестовые данные в интересах фронтенда и бэкэнда? Зная 2 года спустя, я увидел это средствоblue print api, это официальный сайтAPI blueprint.org/document ATI…
чувствовать все
Напишите свой документ так, грубо уценив
# Group UserController
## 用户登陆 [POST /users/login]
+ Request (application/json)
{
"login": "tester",(string,required) -用户名或者手机号 ,必填
"password": "12346" (number,required) 密码 ,必填
}
+ Response 200 (application/json)
{
"token": "fesrglkthtgrtgktlttthy" (string)用户令牌
}
+ Exception
ParameterException("Invalid user name or password.") - 400, 用户名/电话/电邮/密码不对
UserAccountException("User account suspended.") - 401, 帐户已被暂停
UserAccountException("User account terminated.") - 401, 帐户已被删除
После этого автоматически генерируется html файл, который выглядит так
функция фиктивных тестовых данных, это выглядит так
начать
Предварительные условия
- установка узла
- редактор vscode
установка узла
Загрузить и установить :узел будет .org/day3/v10.13…
редактор vscode
Загрузить и установить:против code.CDN.azure.can/stable/5 отправить 24…
Загрузите демо-версию репозитория документации API
git ee.com/падая на балкон/api…
## тебе тоже нужен аглио, драков alio используется для генерации уценки для генерации html drakov используется для создания уценки для создания фиктивного сервера
Написать систему обслуживания по aglio drakov express
index.js
var hercule = require('hercule')
var utils = require('./utils/utils')
var fs = require('fs')
function getFileStr() {
var _files = fs.readdirSync("./controllers");
_files = utils.MyMap(_files, item => item = "./controllers/" + item)
return _files
}
function getObjects() {
var _files = fs.readdirSync("./objects");
_files = utils.MyMap(_files, item => item = "./objects/" + item)
_files = utils.mergeArray(["./z_dataStructures.apib"], _files)
return _files
}
function getHeaderFile() {
return ["./a_header.apib"]
}
function set_IndexApi() {
var _files = utils.mergeArray(getHeaderFile(), getFileStr())
_files = utils.mergeArray(_files, getObjects())
var fileStr = ""
for (var i = 0; i < _files.length; i++) {
var file = _files[i]
var _content = `:[${file.slice(2, file.length)}](${file})\n \n`
fileStr += _content
}
fs.writeFileSync("./_index.apib", fileStr)
}
function changeEvent() {
set_IndexApi()
hercule.transcludeFile("./_index.apib", (err, output) => {
if (err) console.log(err)
// console.log(output);
fs.writeFileSync("./index.apib", output)
var aglio = require('aglio')
aglio.render(fs.readFileSync('./index.apib', 'utf-8'), {}, function (err, html, warnings) {
// if (err) return console.log(err);
// if (warnings) console.log(warnings);
fs.writeFileSync("./views/index.html", html)
});
});
}
var chokidar = require('chokidar');
var watcher = chokidar.watch(['controllers', "objects"], {
ignored: /(^|[\/\\])\../,
persistent: true
});
watcher.on('change', path => {
console.log(`File ${path} has been changed`)
changeEvent()
})
changeEvent()
console.log("index.html create done");
var express = require('express')
var app = express()
app.use(express.static('./views'))
app.listen("9000")
console.log("html in 9000")
Запускаем программу по шагам
cd ./项目根目录
npm i
npm i drakov -g
//开启html文档 打开浏览器 localhost:9000
npm run start
//开启mock server 打开postman localhost:9002 测试
npm run mock
редактировать
在 ./api 文件夹下面新建新的 *.apib 文件
根据apiblueprint 语法 编辑文件,打开localhost:9000查看效果
синтаксис apiblueprint
-
Groupключевые слова
- desc: начать группировку
- demo:
## Group 工单
-
запись второго уровня ниже группировки
- desc: формат
二级条目名字 [GET,POST,DELETE,PUT /URL] - demo:
### 获取工单状况 [GET /production-orders/stat{?departmentId}] - примечание: добавьте {?departmentId} к URL-адресу, чтобы указать параметры URL-адреса.
- desc: формат
-
Parametersключевые слова
- desc: параметры, описывающие URL
- demo:
+ id (number,required)Опишите тип ?id и нужно ли это - примечание: Первый параметр: число, строка, логическое значение, массив, объект Второй параметр может быть обязательным, необязательным
-
Requestключевые слова
- desc: описание параметров, передаваемых на передний план фону
- demo:
+ Request (application/json) - Примечание. Формат приложения / JSON JSON Указывает на переднем плане к фоновому переносу, может выбрать текст / равнину. Запросить потребности сAttributesдля описания конкретного формата параметра
-
Attributesключевые слова
- desc: описать конкретный формат параметра
- demo:
+ Request (application/json) + Attributes + oldPassword(string,required) + newPassword(string,optional) -
Responseключевые слова
- desc: описание параметров, передаваемых из фона на передний план
- demo:
+ Response 200 (application/json) { "result": "ok" } or + Response 200 (application/json) + Attributes (salesOrders)- Note1: Приложение / JSON означает, что формат Frontend JSON передается на интерфейс, а также можно выбрать текст / равнина. Ответ может быть сопоставленAttributesдля описания конкретного формата параметра. Или напрямую напишите объект в формате json в качестве возвращаемого объекта.
200Указывает статус возврата, который может быть401402403404 - note2: при использовании
Attributesописание, может соответствоватьData StructuresОпределенная модель возвращает данные, такие какsalesOrdersТо есть определить в структурах данных
-
Data Structuresключевые слова
- desc: описание модели определения, все модели зафиксированы в файле
z_dataStructures.apib - demo:
## `address` (object) - `id`: `222` (number) - `surname`: `teststore` (string) - `givenName` (string) - `addressLine1` (string) - `addressLine2` (string) - `country` (string) - `state` (string) - `city` (string) - `district` (string) - `postcode` (string) - `mobile` (string) - `createTime`: `12434345` (number) - `userAddressStatusId`: `1` (number) - `userId`: `123` (number) - desc: описание модели определения, все модели зафиксированы в файле
HAVE A GREAT JOURNEY END