美文网首页
编写API接口文档(Ajax和Koa框架)

编写API接口文档(Ajax和Koa框架)

作者: 似朝朝我心 | 来源:发表于2021-05-12 22:44 被阅读0次

什么是接口文档?

在实际的项目开发中,我们现在的web项目基本都是采用前后端分离的思想进行开发的,作为前端开发人员的你只需要用关心前端的代码,不用操心服务器,比如使用vue搭建一个UI界面,剩下的,我们就只需要一套AP接口就可以向服务器拿到数据,然后将拿到的数据遍历渲染到页面上的各个角落。

一个项目不是靠一个人来完成,而是一个团队。而应用程序的开发,需要的便是由前后端工程师共同定义的接口文档,编写接口文档,之后大家根据这个接口文档进行开发,一直到项目结束前都要一直维护。

一个web项目会分成前端和后端,前端发起一个Ajax请求,后端响应JSON数据回来,在这一过程中,我们要事先定义好一些东西,前端要提供给后端什么样的数据,而后端又会响应什么样的数据,前端和后端充分交流才是方便后期维护协作。

API接口文档长啥样?

编写接口文档五大要素:接口说明、请求方式、请求URL、请求参数、返回参数、等等、

具体例子:以微信小程序开发文档之小程序直播间接口为例子




总结:其实接口文档就是一份说明书

如何编写一份好看又整洁的接口文档?其实就是写一份得心应手的说明书,因为我们的接口文档是给别人看的。

这里推荐使用md语法动手编写说明书,直接用浏览器就可以看。

先来看下效果:

markdown代码:没办法粘贴,因为简书就是md语法......



有了参考文档,接下来我们就需要去用代码实现了。

案例演示:

案例实现:既要编写前端的代码,又需要编写后端的代码。
案例需求:koa2项目+ajax+json(不用数据库)+vue(采用脚本引入的vue取代前端模板引擎,就不搭脚手架了)
准备30条json数据:


效果预览:

前端代码:vue+ajax

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <script src="./javascripts/vue.js" type="text/javascript" charset="utf-8"></script>
        <link rel="stylesheet" type="text/css" href="./stylesheets/style.css" />
    </head>
    <body>
        <div id="app">
            <div id="header">
                <h2>90Sport | 体育</h2>
            </div>
            <div id="pos">
                <div id="content" v-for="(item) in SportsList" :key="item.id">
                    <div class="box">
                        <p>{{item.title}}</p>
                        <div class="comment">评论:{{item.comment}}</div>
                    </div>
                    <div class="imageBox">
                        <img :src="item.image">
                    </div>
                </div>
            </div>
        </div>
        <script type="text/javascript">
            const app = new Vue({
                data() {
                    return {
                        SportsList: []
                    }
                },
                mounted() {
                    this.getMsg()
                },
                methods: {
                    getMsg: function() {
                        const app = document.getElementById('app')
                        const xhr = new XMLHttpRequest()
                        let that = this
                        xhr.onload = function() {
                            if (xhr.status == 200) { //判断状态码
                                //console.log(xhr.responseText
                                let data = JSON.parse(xhr.responseText) //用data接收服务器响应回来的json数据
                                if (data.errCode == 0) { //判断证明一下是不是ok状态
                                    console.log(data.sportsList)
                                    that.SportsList = data.sportsList
                                    console.log(that.SportsList)
                                }
                            }
                        }
                        xhr.open('POST', '/sportsList', true) //发送POST请求,请求URL,开启异步加载
                        xhr.setRequestHeader('Content-Type', 'application/json') //设置请求头信息,json何使
                        xhr.send(JSON.stringify({
                            "page": 0,
                            "count": 10
                        })) //转义json数据
                    }
                }
            }).$mount('#app')
        </script>
    </body>
</html>

后端代码:koa框架

const router = require('koa-router')()
const fs = require('fs')
router.post('/sportsList', async (ctx ,next) => {
    //指定字段类型
    const args = [
        { 
            field: 'page',
            type: 'number'
        },
        {
            field: 'count',
            type: 'number'
        }
    ]
    let body = ctx.request.body
    //处理浏览器请求的错误反馈
    for(let i = 0;i<args.length;i++){//判断浏览器传递的参数
        let item = args[i]
        if(!Object.keys(body).includes(item.field)){//如果浏览器传递过来的请求字段不符合我们这里定义的字段,给它一个报错提醒
            ctx.body = {
                errCode: -1,
                errMsg:'参数个数错误'
            }
            return
        }else {
            if(typeof body[item.field] != item.type){//判断浏览器传递的参数类型
                ctx.body = {
                    errCode:-2,
                    errMsg:'参数类型错误'
                }
                return
            }
        }
    }
    
    let data = fs.readFileSync('./data/sportsList.json') //读取我们编写好的json数据
    data = JSON.parse(data) //转义Json数据
    let sportsList = data.splice(body.page * body.count,body.count) //决定起始位置和决定截取的个数
    ctx.body = {
        errCode:0,
        errMsg: 'ok',
        sportsList //响应'成功'信息
    }
})

module.exports = router

JSON数据:

[
    {
        "id": 1,
        "title": "英超-曼联轮换10人1-2莱斯特,青木球王破门,曼城提前3轮夺冠",
        "image": "/images/1000.png",
        "comment": 55
    },
    {
        "id": 2,
        "title": "湖人加时复仇尼克斯!浓眉20分塔克三分准绝杀 罗斯空砍27+6+6",
        "image": "/images/1001.png",
        "comment": 1159
    },
    {
        "id": 3,
        "title": "荷兰巨大损失!范戴克亲口宣布不参加欧洲杯!重伤缺战已7个月",
        "image": "/images/1002.jpg",
        "comment": 3342
    },
    {
        "id": 4,
        "title": "奇兵!马修斯绝平补篮+塔克三分准绝杀 湖人加时险胜需谢他们",
        "image": "/images/1004.png",
        "comment": 3255
    },
    {
        "id": 5,
        "title": "科比生前和乔丹最后一次对话内容曝光,两人互发短信+科教练发狠",
        "image": "/images/1005.jpg",
        "comment": 189
    },
    {
        "id": 6,
        "title": "英超-曼联轮换10人1-2莱斯特,青木球王破门,曼城提前3轮夺冠",
        "image": "/images/1000.png",
        "comment": 55
    },
    {
        "id": 7,
        "title": "湖人加时复仇尼克斯!浓眉20分塔克三分准绝杀 罗斯空砍27+6+6",
        "image": "/images/1001.png",
        "comment": 1159
    },
    {
        "id": 8,
        "title": "荷兰巨大损失!范戴克亲口宣布不参加欧洲杯!重伤缺战已7个月",
        "image": "/images/1002.jpg",
        "comment": 3342
    },
    {
        "id": 9,
        "title": "奇兵!马修斯绝平补篮+塔克三分准绝杀 湖人加时险胜需谢他们",
        "image": "/images/1004.png",
        "comment": 3255
    },
    {
        "id": 10,
        "title": "科比生前和乔丹最后一次对话内容曝光,两人互发短信+科教练发狠",
        "image": "/images/1005.jpg",
        "comment": 189
    },
    {
        "id": 11,
        "title": "英超-曼联轮换10人1-2莱斯特,青木球王破门,曼城提前3轮夺冠",
        "image": "/images/1000.png",
        "comment": 55
    },
    {
        "id": 12,
        "title": "湖人加时复仇尼克斯!浓眉20分塔克三分准绝杀 罗斯空砍27+6+6",
        "image": "/images/1001.png",
        "comment": 1159
    },
    {
        "id": 13,
        "title": "荷兰巨大损失!范戴克亲口宣布不参加欧洲杯!重伤缺战已7个月",
        "image": "/images/1002.jpg",
        "comment": 3342
    },
    {
        "id": 14,
        "title": "奇兵!马修斯绝平补篮+塔克三分准绝杀 湖人加时险胜需谢他们",
        "image": "/images/1004.png",
        "comment": 3255
    },
    {
        "id": 15,
        "title": "科比生前和乔丹最后一次对话内容曝光,两人互发短信+科教练发狠",
        "image": "/images/1005.jpg",
        "comment": 189
    },
    {
        "id": 16,
        "title": "英超-曼联轮换10人1-2莱斯特,青木球王破门,曼城提前3轮夺冠",
        "image": "/images/1000.png",
        "comment": 55
    },
    {
        "id": 17,
        "title": "湖人加时复仇尼克斯!浓眉20分塔克三分准绝杀 罗斯空砍27+6+6",
        "image": "/images/1001.png",
        "comment": 1159
    },
    {
        "id": 18,
        "title": "荷兰巨大损失!范戴克亲口宣布不参加欧洲杯!重伤缺战已7个月",
        "image": "/images/1002.jpg",
        "comment": 3342
    },
    {
        "id": 19,
        "title": "奇兵!马修斯绝平补篮+塔克三分准绝杀 湖人加时险胜需谢他们",
        "image": "/images/1004.png",
        "comment": 3255
    },
    {
        "id": 20,
        "title": "科比生前和乔丹最后一次对话内容曝光,两人互发短信+科教练发狠",
        "image": "/images/1005.jpg",
        "comment": 189
    },
    {
        "id": 21,
        "title": "英超-曼联轮换10人1-2莱斯特,青木球王破门,曼城提前3轮夺冠",
        "image": "/images/1000.png",
        "comment": 55
    },
    {
        "id": 22,
        "title": "湖人加时复仇尼克斯!浓眉20分塔克三分准绝杀 罗斯空砍27+6+6",
        "image": "/images/1001.png",
        "comment": 1159
    },
    {
        "id": 23,
        "title": "荷兰巨大损失!范戴克亲口宣布不参加欧洲杯!重伤缺战已7个月",
        "image": "/images/1002.jpg",
        "comment": 3342
    },
    {
        "id": 24,
        "title": "奇兵!马修斯绝平补篮+塔克三分准绝杀 湖人加时险胜需谢他们",
        "image": "/images/1004.png",
        "comment": 3255
    },
    {
        "id": 25,
        "title": "科比生前和乔丹最后一次对话内容曝光,两人互发短信+科教练发狠",
        "image": "/images/1005.jpg",
        "comment": 189
    },
    {
        "id": 26,
        "title": "英超-曼联轮换10人1-2莱斯特,青木球王破门,曼城提前3轮夺冠",
        "image": "/images/1000.png",
        "comment": 55
    },
    {
        "id": 27,
        "title": "湖人加时复仇尼克斯!浓眉20分塔克三分准绝杀 罗斯空砍27+6+6",
        "image": "/images/1001.png",
        "comment": 1159
    },
    {
        "id": 28,
        "title": "荷兰巨大损失!范戴克亲口宣布不参加欧洲杯!重伤缺战已7个月",
        "image": "/images/1002.jpg",
        "comment": 3342
    },
    {
        "id": 29,
        "title": "奇兵!马修斯绝平补篮+塔克三分准绝杀 湖人加时险胜需谢他们",
        "image": "/images/1004.png",
        "comment": 3255
    },
    {
        "id": 30,
        "title": "科比生前和乔丹最后一次对话内容曝光,两人互发短信+科教练发狠",
        "image": "/images/1005.jpg",
        "comment": 189
    },
    {
        "id": 31,
        "title": "英超-曼联轮换10人1-2莱斯特,青木球王破门,曼城提前3轮夺冠",
        "image": "/images/1000.png",
        "comment": 55
    },
    {
        "id": 32,
        "title": "湖人加时复仇尼克斯!浓眉20分塔克三分准绝杀 罗斯空砍27+6+6",
        "image": "/images/1001.png",
        "comment": 1159
    },
    {
        "id": 33,
        "title": "荷兰巨大损失!范戴克亲口宣布不参加欧洲杯!重伤缺战已7个月",
        "image": "/images/1002.jpg",
        "comment": 3342
    },
    {
        "id": 34,
        "title": "奇兵!马修斯绝平补篮+塔克三分准绝杀 湖人加时险胜需谢他们",
        "image": "/images/1004.png",
        "comment": 3255
    },
    {
        "id": 35,
        "title": "科比生前和乔丹最后一次对话内容曝光,两人互发短信+科教练发狠",
        "image": "/images/1005.jpg",
        "comment": 189
    }
]

CSS样式:

*{
    padding: 0;
    margin: 0;
}
body {
  font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

a {
  color: #00B7FF;
}
#header {
    height: 40px;
    width: 100%;
    background-color: rgb(83,123,255);
    line-height: 40px;
    margin-right: 20px;
    position: fixed;
    z-index: 9999;
}
h2{
    margin-left: 10px;
    color: rgb(230,255,255);
}
#content {  
    display: flex;
    justify-content: space-between;
    padding: 10px;
    border-bottom: 1px solid #eee;
}
.box {
    width: 60%;
    height: 80px;

}
.imageBox{
    width: 40%;
    height: 80px;
    margin-left: 20px;
}
.imageBox img {
    width: 100%;
    height: 100%;
    border-radius: 10px;
}
.comment {
    margin-top: 5px;
    color: #333;
    font-size: 12px;
}
#pos {
    position: relative;
    top: 40px;
}

项目目录结构:

相关文章

网友评论

      本文标题:编写API接口文档(Ajax和Koa框架)

      本文链接:https://www.haomeiwen.com/subject/udjadltx.html