• 接口


    RestfulAPI 规范

    RESTful 是目前最流行的 API 设计规范,用于 Web 数据接口的设计。

    RESTful 的核心思想就是,客户端发出的数据操作指令都是"动词 + 宾语"的结构。
    比如,GET /articles这个命令,GET是动词,/articles是宾语。
    动词通常就是五种 HTTP 方法,对应 CRUD 操作

    GET:读取(Read) 
    POST:新建(Create) 
    PUT:更新(Update) 
    PATCH:更新(Update),通常是部分更新 
    DELETE:删除(Delete)

    根据 HTTP 规范,动词一律大写。

    有些客户端只能使用GET和POST这两种方法。
    服务器必须接受POST模拟其他三个方法(PUT、PATCH、DELETE)。
    这时,客户端发出的 HTTP 请求,要加上X-HTTP-Method-Override属性,告诉服务器应该使用哪一个动词,覆盖POST方法。

    编写api接口文档

    正规的团队合作或者是项目对接,接口文档是非常重要的,一般接口文档都是通过开发人员写的。一个工整的文档显得是非重要

    接口规范内容

    * 接口名称
    * 场景说明
    * 接口说明
    * 请求参数
    * 响应参数
    * 错误码

    参数内容

    * 字段名
    * 变量名
    * 是否必填
    * 类型
    * 示例值
    * 描述

    错误码内容

    * 名称
    * 描述
    * 原因
    * 解决方案

    接口示例(来源:[聚合数据](https://www.juhe.cn/)新闻接口)

    接口地址:http://v.juhe.cn/toutiao/index
    返回格式:json
    请求方式:get/post
    请求示例:http://v.juhe.cn/toutiao/index?type=top&key=APPKEY
    接口备注:返回头条,社会,国内,娱乐,体育,军事,科技,财经,时尚等新闻信息

    >请求参数说明:

    | 名称 | 必填 | 类型 | 说明 |
    | :--- | :--- | :----- | :----------------------------------------------------------- |
    | key | 是 | string | 应用APPKEY |
    | type | 否 | string | 类型,top(头条,默认),shehui(社会),guonei(国内),guoji(国际),yule(娱乐),tiyu(体育)junshi(军事),keji(科技),caijing(财经),shishang(时尚) |


    >返回参数说明:

    | 名称 | 类型 | 说明 |
    | :------------- | :--- | :--- |
    | 见JSON返回示例 | - | - |

    JSON返回示例:

    { 
        "reason": "成功的返回", 
        "result": { 
            "stat": "1", 
            "data": [
                { 
                    "uniquekey": "6c4caa0c3ba6e05e2a272892af43c00e", 
                    "title": "杨幂的发际线再也回不去了么?网友吐槽像半秃",
                    "date": "2017-01-05 11:03", 
                    "category": "yule", 
                    "author_name": "腾讯娱乐", 
                    "url": "http://mini.eastday.com/mobile/170105110355287.html?qid=juheshuju",
                    "thumbnail_pic_s": "http://03.imgmini.eastday.com/mobile/20170105/20170105110355_ 806f4ed3fe71d04fa452783d6736a02b_1_mwpm_03200403.jpeg", 
                    "thumbnail_pic_s02": "http://03.imgmini.eastday.com/mobile/20170105/20170105110355_ 806f4ed3fe71d04fa452783d6736a02b_2_mwpm_03200403.jpeg", 
                    "thumbnail_pic_s03": "http://03.imgmini.eastday.com/mobile/20170105/20170105110355_ 806f4ed3fe71d04fa452783d6736a02b_3_mwpm_03200403.jpeg" 
               }, 
          ]
       }
    }

     postman接口调试工具的使用

    [postman](https://www.getpostman.com/downloads/)

    用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。

    1 先写一个获取用户信息的接口

    复制routes文件夹为api文件夹,只保留user.js
    api
    -> user.js

    修改api/user.js文件

    > 前后端分离 res.send()
    > 前后端不分离 res.render()

    var express = require('express');
    var router = express.Router();
    const sql = require('./../sql');
    const User = require('./../sql/model/users');
    router.get('/', function(req, res, next) {
    sql.find(User, {}, {_id: 0, __v: 0}, (data) => {
    res.send(data)
    })
    });
    // 查找某个用户的信息
    router.post('/detail', function(req, res, next) {
    sql.find(User, { tel: req.body.tel }, {_id: 0, __v: 0}, (data) => {
    res.send(data)
    })
    });
    
    
    module.exports = router;

    app.js处引入并且注册接口


    var apiuserRouter = require('./api/user');

    app.use('/api/user', apiuserRouter);


    以后就可以通过 /api/user访问api文件夹下的user.js所对应的接口

    http://localhost:3000/api/user

    2 postman测试接口

    3 前端通过ajax调用接口

    $.ajax({
    url: 'http://localhost:3000/api/user',
    success: function (data) {
    console.log(data)
    }
    })

    此时发现跨域问题

    a) **jsonp 解决跨域问题**
    后端代码

    router.get('/', function(req, res, next) {
    // 这一步JSONP必备
    var _callback = req.query.callback;
    sql.find(User, {}, {_id: 0, __v: 0}, (data) => {
    // res.send(data)
    if (_callback){
    // 这两步设置发送也是NODE.JS发送JSONP必备
    res.type('text/javascript');
    res.send(_callback + '(' + JSON.stringify(data) + ')');
    }
    else{
    res.json(data);
    }
    })
    });


    前端代码
    ```
    $.ajax({

    url: 'http://localhost:3000/api/user',
    dataType: 'jsonp', // ***************
    success: function (data) {
    console.log(data)
    }
    })


    b) **cors解决跨域问题**
    app.js中加入如下代码

    var allowCrossDomain = function (req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');//自定义中间件,设置跨域需要的响应头。
    next();
    };
    app.use(allowCrossDomain) ////运用跨域的中间件


    c) **利用 http-proxy-middleware 实现代理跨域** --- 服务器与服务器之间

    假设有一个服务器http://localhost:4000/users,现在需要在服务器为http://localhost:3000的接口中访问,可以使用http-proxy-middleware进行反向代理

    var proxy = require('http-proxy-middleware');
    const proxyOption = {
    target: 'http://localhost:4000',
    pathRewrite: {
    '^/api/' : '/' // 重写请求,api/解析为/
    },
    changeOrigoin:true
    };
    // 反向代理
    
    app.use('/api/*', proxy(proxyOption));

    这样就可以直接通过http://localhost:3000/api/users访问到http://localhost:4000/users接口了

    如有错误请留言指出!

  • 相关阅读:
    Unity中的Path对应各平台中的Path
    C#里的装箱、装箱和值类型、引用类型
    unity3D自适应分辨率
    python中的-m参数
    手动安装python包
    python生成器
    HDU 1312 Red and Black(bfs)
    HDU 2553 N皇后问题(dfs)
    HDU1043 Eight(BFS)
    UVa230 Borrowers (STL)
  • 原文地址:https://www.cnblogs.com/goodboyzjm/p/11704644.html
Copyright © 2020-2023  润新知