vue.js - Nuxt.js - API 调用的最佳场所
问题描述
我是 Vue.js Nuxt 和所有前端的新手。
我有一个关于 API 调用的问题。我不确定什么是正确的方法,这里的最佳做法。
我有一家商店。在那个商店中,我有调用我的 API 并设置状态的操作,例如。
async fetchArticle({ state, commit }, uuid) {
const response = await this.$axios.get(`articles/${uuid}/`)
commit('SET_ARTICLE', response.data)
},
这很好,它适用于一个组件。
但是如果我只想获取文章而不改变状态怎么办。
我首先想到的是 DRY,即创建用于获取数据并在需要的地方使用的服务层。
这是正确的方法吗?我在哪里可以找到一些可以从中汲取灵感的真实示例?
解决方案
使用存储库模式来抽象您的 API 绝对是一个好主意!无论您使用@nuxtjs/axios
模块还是@nuxt/http
模块,您都可以将任一实例传递给您的存储库类/函数。下面是抽象的“repository.js”文件的真实示例。
export default $axios => resource => ({
index() {
return $axios.$get(`/${resource}`)
},
create(payload) {
return $axios.$post(`/${resource}`, payload)
},
show(id) {
return $axios.$get(`/${resource}/${id}`)
},
update(payload, id) {
return $axios.$put(`/${resource}/${id}`, payload)
},
delete(id) {
return $axios.$delete(`/${resource}/${id}`)
}
})
然后,您可以创建一个插件来为您的端点初始化所有不同类型的存储库:
import createRepository from '~/path/to/repository.js'
export default (ctx, inject) => {
const repositoryWithAxios = createRepository(ctx.$axios)
const repositories = {
posts: repositoryWithAxios('posts'),
users: repositoryWithAxios('users')
//...
}
inject('repositories', repositories)
}
进一步阅读:在 Nuxt.js 中组织和解耦 API 调用
推荐阅读
- python - 在numpy std计算中,np.std(y_test == y_test_predict),比较测试分割和预测结果是什么意思
- excel - 防止在子迭代时多次单击命令按钮
- database-design - BCNF关系设计中如何表示变长序列?
- sql - 为什么在此查询中我的总和列加倍?
- java - 添加重新打包目标会导致“创建名称为 'entityManagerFactory' 的 bean 时出错”
- laravel - Laravel Passport invalid_grant 用于密码 grant_type
- combobox - Excel:如果 ComboBox 1 为空,则将组合框 3-8 .visible 设置为 false
- jakarta-ee - 当针对 Arquillian 自由管理运行测试时,OpenLiberty 启动冻结
- c - C设计模式执行一系列动作而不阻塞?
- optimization - 如何使用 Flux 在 Julia 中优化循环网络?