美文网首页
在Nuxt.js项目中解耦您的API调用

在Nuxt.js项目中解耦您的API调用

作者: HomWang | 来源:发表于2018-12-20 15:24 被阅读0次

地址:https://www.homwang.com 欢迎大家性能测试
交流讨论——QQ群号:604203227

📦 Yamlful

介绍

在Nuxt.js项目中解耦您的API调用

基于YAML的HTTP/HTTPS客户端代码生成模块

示例

yamlful是一个用于从YAML 生成HTTP客户端代码的实用程序:

sample:
  - method: get
    get: /resource/:id/subresource/:subId
  - method: create
    post: /resource/:id/subresource
  - method: update
    put: /resource/:id/subresource/:subId
  - method: remove
    delete: myresource/

它使用简单模式来确定函数参数和HTTP参数,因此,使用PUTPOST的方法会获得 payload ,而其他方法则不会,同时保留每个YAML定义属性中的URL参数。

上面的YAML文件可用于生成如下代码:

const sample = {
  get: (id, subId, params = {}) => {
    return client.get(`/resource/${id}/subresource/${subId}`, { params })
  },
  create: (id, payload, params = {}) {
    return client.post(`/resource/${id}/subresource`, payload, { params })
  },
  update: (id, subId, payload, params = {}) {
    return client.put(`/resource/${id}/subresource/${subId}`, payload, { params })
  },
  remove: (id, params = {}) => {
    return client.delete(`myresource/${id}`, { params })
  }
}

动机

用于公开HTTP API客户端方法的 JavaScript 在大多数情况下非常简单。

但是,当您拥有包含许多不同资源庞大的API时,更简化的YAML配置可以在处理不断变化时更轻松地进行维护。通过在将JavaScrit方法连接到JSON HTTP API时识别这些关键的简单模式,yamlful诞生了。

使用

捆绑在此存储库中的Nuxt.js模块(yamlful-nuxt),用yamlful生成类似的代码,将自身集成到@nuxtjs/axios并将API方法暴露给Vue页面。

yarn 和 npm 安装:

yarn add yamful-nuxt --save
OR
npm install yamful-nuxt --save

nuxt.config.js

export  default {
    //感谢Pooya Parsa提供了Nuxt Axios模块
    //注意yamlin axios自动需要@nuxtjs / 
    axios: {
        //感谢Ben Howdle提供的API测试服务 
        baseURL: 'https://reqres.in/'
    },
    //默认情况下,yamlful将在Nuxt的srcDir
    modules: ['yamlful-nuxt'],
    //也可以自定义目录来区分你的yml,这样能够让你快速的找到该yml文件
    modules: [['yamlful-nuxt', { srcDir: './resources' }]]
}

pages/index.vue

export default {
  async asyncData ({ $api }) {
    // $api available in SSR context
    const response = await $api.users.get(1)
    return {
      user: response.data
    }
  },
  data: () => ({
    user: {}
  }),
  methods: {
    async loadTwo() {
      // this.$api available in the client context
      const response = await this.$api.users.get(2)
      this.user = response.data
    }
  }
}

原始方法

Nuxt.js模块还允许您在YAML中内联JavaScript以定义原始方法:

输入:

- method: custom
    raw: |
      (customParam) => {
        client.get(`/customresource/${customParam}`)
      }

输出:

custom: (customParam) => {
    client.get(`/customresource/${customParam}`)
}

注意,client它用于注入Nuxt的axios实例。

请参阅用于Nuxt模块的API模板

其他框架

可以使用yamlful包的并导出函数来实现其他框架的模块和扩展,示例

Demo

官方Demo 源码

实例Demo:

api.yml

users:
  - method: getHelpCenterByIdPost
    post: /api/v1/bitbuy/otc/newbieHelp/listByLanguage

nuxt.config.js

export default {
  axios: {
    baseURL: 'http://192.168.9.232/'
  },
  modules: ['yamlful-nuxt']
}

index.vue

import qs from 'qs'
export default {
  async asyncData ({ $api }) {
    let obj = {
      pageNum: 1,
      pageSize: 10
    }
    obj = qs.stringify(obj)
    const response = await $api.users.getHelpCenterByIdPost(obj)
    return {
      user: response.data
    }
  },
  data: () => ({
    user: {}
  }),
  methods: {
    async loadTwo() {
      let obj = {
        pageNum: 1,
        pageSize: 10
      }
      obj = qs.stringify(obj)
      const response = await this.$api.users.getHelpCenterByIdPost(obj)
      this.user = response.data
    }
  }
}

链接

github

相关文章

  • 在Nuxt.js项目中解耦您的API调用

    地址:https://www.homwang.com 欢迎大家性能测试交流讨论——QQ群号:604203227 ?...

  • 消息中间件的一些思考

    1.为什么使用消息队列? 核心说起来就是:解耦、异步、削峰。 解耦:RPC的调用是强依赖的,系统之间的调用会存在耦...

  • 消息队列面试题

    1. 项目中为什么使用mq (1) 解耦 一个模块, 调用其他多个模块的接口, 调用过程很复杂, 但又不是必须同步...

  • 关于MQ的几件小事(一)消息队列的用途、优缺点、技术选型

    1.为什么使用消息队列? (1)解耦:可以在多个系统之间进行解耦,将原本通过网络之间的调用的方式改为使用MQ进行消...

  • MQ问题总结

    一、为什么使用 MQ? 1.1 解耦 1.1.1 解耦1 例如电商系统核心是交易服务,交易服务要调用另外三个服务,...

  • MQ问题梳理转自陈琰AC

    一、为什么使用 MQ? 1.1 解耦 1.1.1 解耦 例如电商系统核心是交易服务,交易服务要调用另外三个服务,订...

  • 消息队列优缺点适用场景

    在项目中为什么要使用消息队列? 消息队列使用场景主要有三个: 解耦,异步,削峰 解耦耦合 如上图所示,可能存在某一...

  • ActiveMQ与Kafka分析笔记

    activeMQ与kafka比较 前言 消息中间件的主要作用是:解耦、异步、削峰填谷解耦:将接口调用依赖的两个服务...

  • 关于消息队列的优缺点,看这篇就行

    在项目中为什么要使用消息队列 消息队列使用场景主要有三个: 解耦,异步,削峰 1、解耦 如上图所示,可能存在某一个...

  • 消息队列选型

    一、为什么使用消息队列 核心的有3个:解耦、异步、削峰 解耦:一个系统或者一个模块,调用了多个系统或者模块,互相之...

网友评论

      本文标题:在Nuxt.js项目中解耦您的API调用

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