система уценки для записи API

Node.js внешний интерфейс JavaScript Markdown

Воздух становится все хуже и хуже, надо отправляться в путь

Когда я был стажером, я был обеспокоен тем, что после написания 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 файл, который выглядит так

image.png

функция фиктивных тестовых данных, это выглядит так

image.png

начать

Предварительные условия

  • установка узла
  • редактор vscode

установка узла

Загрузить и установить :узел будет .org/day3/v10.13…

редактор vscode

Загрузить и установить:против code.CDN.azure.can/stable/5 отправить 24…

Загрузите демо-версию репозитория документации API

git ee.com/падая на балкон/api…

git lab.com/Шао Цзюньсяо…

## тебе тоже нужен аглио, драков 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-адреса.
  • 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Указывает статус возврата, который может быть401 402 403 404
    • 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)
    
    
    

HAVE A GREAT JOURNEY END