Giter Club home page Giter Club logo

edpx-bat-ria's Introduction

edpx-bat-ria

基于 bat-riaedp 扩展,用来快速搭建业务端系统、生成项目代码框架。

edpx-bat-ria's People

Contributors

chestnutchen avatar justineo avatar leeight avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

edpx-bat-ria's Issues

mock方案的思考

最近有点时间想搞搞mock这块儿,现在bat-ria的mock方案还不是特别实用,大部分东西还是要自己搞,并且也缺少参数校验的功能,和我们项目的接口文档也没什么相关性,但是想想其实两者有很大的关联。因此有些想法和实现方案,大家可以一起讨论下可行性。

现状

  • 某一天,由于业务需要,立项开发一个叫做xx的业务端。历经了千辛万苦总算搞清楚了PM大人的需求并且产出了[xx]前后端接口文档,再和RD们评审之后终于定稿了。恩,不错,总算可以开工了。但是这文档真的就没有问题了吗?但是我们都清楚,由于一些原因,这文档肯定或多或少的都还存在问题,有些问题其实要在和RD联调之后才会发现,这个等下再说。
  • 好了,现在接口文档已经ready,使用我们的脚手架工具可以非常轻松的开始开发了。但是,现在的mock工具只是创建了一个nodejs服务端响应文件,里面的内容还是要自己填。废话,它当然不知道要怎么填充内容,它又不是上帝,除非它去解析你的xx接口文档..。好了,接下来你很可能就是翻开你之前写的xx接口文档,找到那个接口,然后把你的json复制过来作为你的mock填充,恩,看起来也蛮快的,但是,接口改了怎么办?
  • 在FE和RD的精诚合作下,终于可以联调了。当然,我们都是有追求的程序员,代码都是自测过的,完全没问题。但是,联调环境ready后,你会惊奇的发现,世界根本没有你想象的那么美好.debug后才发现你的xx接口的请求参数缺失或者名称写错了。但是这问题你自测是测不出来的,因为你的数据是造出来的,没有对应的请求参数的逻辑。
  • 所以你经常要来回改文档和mock,这很没效率,会影响你的开发心情,所以你会问自己,为什么会这样?

原因

其实接口文档和mock是有很大的关联性的,而原来的开发方式这两者是孤立的,并且最要命的是还有复制/粘贴型的依赖,这有很大的隐患,而且大部分是人肉工作,低效,影响心情。但是文档又不能直接导出mock,因为文档是给人看得,程序看不懂,或者解析难度大。

解决方案

要把两者联系起来,就必须把接口描述成让程序能看懂,所以,作为FE的我们,自然而然的想到json。把接口spec化,由它作为文档和mock的桥梁。文档和mock不再要自己人肉去开发,而是spec的产出。这样,不管需求和接口文档怎么变化,我们只要相应的更新spec,运行指令,就能轻松同步更新接口文档和mock。而且,有了spec,我们就知道了接口的请求参数的描述,我们就能做请求参数校验了,在联调之前我们就能杜绝刚才所说得问题的发生。这才是美好的世界啊。

设计

spec数据结构:

    [
        {
            module: '推广计划', //模块标示,用来作为接口文档的大标题
            api: [
                {
                    desc: '推广计划列表', //接口标示,作为副标题
                    req: {
                        url: '/data/promotion/173/list',
                        params: [
                            {
                                field: 'status',
                                desc: '推广计划状态 0: 未启用 1: 启用中 2: 结束',
                                required: true //用来作参数校验

                            },
                            ...
                        ]
                    },
                    res: {
                        isList: true, //是否是列表,来决定是否输出page相关内容,否则是一般响应
                        result: [ //忽略success、message..
                            {
                                field: 'ader',
                                desc: '广告主'//用来mock数据 比如 desc + @rowNumber
                            },
                            {
                                field: 'adId',
                                desc: '广告主Id',//用来mock数据 比如 desc + @rowNumber
                                type: 'number' //数据类型,用来伪造数据,不写则根据desc来构造
                            },
                            {
                                field: 'srcId',
                                desc: '资源Id',
                                value: '123,234235' //有时候可能因为规则复杂或者没有必要,就直接用固定值mock了
                            },
                            {
                                field: 'startTime',
                                desc: '投放开始时间',
                                type: 'time' //数据类型,用来伪造数据,不写则根据desc来构造
                            },
                            {
                                field: 'version',
                                desc: '数据版本',
                                value: '0', //有时候可能因为规则复杂或者没有必要,就直接用固定值mock了
                            },
                            ...
                        ]
                    }
                },
                ...
            ]
        },
        ...
    ]

这样,接口文档和mock逻辑都可以从这个spec文件中解析出来。

api

  • createDoc 生成接口文档
  • createMock 生成mock
  • createMock --url 生成指定url的mock,方便后续新增
  • updateMock --url 更新指定url的mock,方便后续修改
  • deleteMock --url 删除指定url的mock,方便后续删除

说明

  • spec文件会放置在/doc/目录下,同时也会把导出的文档也放在一起,纳入svn版本管理。
  • 现在可以做参数校验了,可以考虑在响应json数据里增加一个字段显示校验结果,这样,在开发时就能实时查看结果

好处

  • 只需创建spec,接口文档和mock自动生成,避免人为的失误。
  • spec数据结构清晰,方便定位和修改。接口文档和mock逻辑同步。只需修改spec便可同步更新文档和mock逻辑。
  • spec纳入svn,修改历史方便查询
  • 加入请求参数校验功能,减少联调阶段的一些问题

@otakustay

运行命令与预期不符

RT,运行edp bat-ria init 命令创建单页应用,目录结构有问题,和wiki中描述的不一致。node6.0和0.12.3中都是这样

Win7 和 Mac 下面表现不太一样?

image

edpx-bat-ria (0.2.1)

好像是因为 Win7 下面报错了,导致没有走到 then() 的处理逻辑。

                require('../../lib/util/gen-main-less')(projectInfo, options);
                require('../../lib/util/gen-index')(projectInfo, options);
                if (entry) {
                    require('../../lib/util/gen-entry-main-less')(projectInfo, options);
                }

                // 生成默认的API配置和mockup
                var createApi = require('../../lib/util/create-api');
                createApi(projectInfo, ['api', 'constants', '/data/system/constants', 'ok']);
                createApi(projectInfo, ['api', 'user', '/data/system/session', 'session']);

                // var createAction = require('../../lib/util/create-action');
                // createAction(projectInfo, ['action', '/dev/index', entry]);

                // 更新本地的配置文件
                var updateLoaderConfig = require('edp-project/cli/project/updateLoaderConfig');
                updateLoaderConfig.cli.main();

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.