国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

記錄--這個(gè)前端Api管理方案會(huì)更好?

這篇具有很好參考價(jià)值的文章主要介紹了記錄--這個(gè)前端Api管理方案會(huì)更好?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

這里給大家分享我在網(wǎng)上總結(jié)出來的一些知識(shí),希望對(duì)大家有所幫助

記錄--這個(gè)前端Api管理方案會(huì)更好?

簡介

大家好,前端小白一枚,目前接觸后臺(tái)管理系統(tǒng)比較多,經(jīng)常遇到不同對(duì)象的增刪改查的接口,如何對(duì)Api進(jìn)行一個(gè)有比較好的管理是個(gè)問題。在學(xué)習(xí)偏函數(shù)的時(shí)候有了靈感,想到一個(gè)不錯(cuò)的API管理方案,并應(yīng)用在項(xiàng)目一個(gè)模塊當(dāng)中,并且開發(fā)效率和維護(hù)性可讀性都很不錯(cuò),和大家分享一下~

當(dāng)前項(xiàng)目的前端API管理方案

// 封裝的接口
export function obj1Func1(){}
export function obj1Func2(){}
export function obj2Func3(){}
export function obj2Func4(){}

// 引入方式
import { obj1Func1, obj1Func2, obj2Func3, obj2Func4 } from 'xxx'

// 使用方式
const params = {...}
await obj1Func1(params)

當(dāng)接口多了之后,我們管理接口(查找)是一件很麻煩且廢眼睛的事,需要一直翻,注釋看不過來,維護(hù)性和可讀性差。

統(tǒng)一export方式

// 封裝的接口
function obj1Func1(){}
function obj1Func2(){}
function obj2Func3(){}
function obj2Func4(){}
// 導(dǎo)出接口
export {
    obj1Func1,//注釋
    obj1Func2,//注釋
    obj2Func3,//注釋
    obj2Func4,//注釋
    ...
}

// 引入方式
import { obj1Func1, obj1Func2, obj2Func3, obj2Func4 } from 'xxx'

// 使用方式
const params = {...}
await obj1Func1(params)

優(yōu)點(diǎn)

  • 面向?qū)ο?,不需要每個(gè)接口函數(shù)都引入,開發(fā)時(shí)調(diào)用方便
  • 簡化操作類型命名,如update -> upd,開發(fā)和維護(hù)方便

缺點(diǎn)

  • 當(dāng)模塊涉及的對(duì)象很多,則需要建立非常多的文件,當(dāng)文件名復(fù)雜時(shí),難以看懂維護(hù)難度up。
  • 當(dāng)頁面需要引入多個(gè)對(duì)象,需要引入一個(gè)個(gè)文件,降低開發(fā)效率。
  • 找對(duì)象需要拖拽到文件最底部

以面向模塊(對(duì)象)的方式

假設(shè)當(dāng)前模塊下涉及到 n 個(gè)對(duì)象及對(duì)應(yīng)的增刪改查接口, 定義一個(gè)映射表

// api映射表
const apiMap = {
    // 公共接口
    common: {
        commonFun1,
        commonFun2,
    },
    //對(duì)象1
    dog: {
        //增刪改查
        add: obj1Func1
        get: obj1Func2
    },
    //對(duì)象2
    cat: {
        //增刪改查
        upd: obj2Func3,
        del: obj2Func4,
    },
    ...
}

apiMap?對(duì)象

一級(jí)鍵名是模塊涉及的對(duì)象
二級(jí)鍵名是對(duì)象相關(guān)的操作類型,值是對(duì)應(yīng)的接口函數(shù)

導(dǎo)出方式1

直接導(dǎo)出各個(gè)對(duì)象

export default {
    commonApi: apiMap['common'],
    dogApi: apiMap['dog'],
    catApi: apiMap['cat'],
}

import {commonApi,...} from "xxx"

面向模塊(多個(gè)對(duì)象)

本質(zhì)就是以對(duì)象的方式來進(jìn)行管理,只不過這里面向的是模塊。這里一個(gè)模塊只對(duì)應(yīng)一個(gè)文件,包含了涉及到的n個(gè)對(duì)象的接口。因?yàn)槲矣X得一個(gè)模塊下建n個(gè)對(duì)象一長串的Api文件,又沒法對(duì)文件名注釋(文件名總有不認(rèn)識(shí)或拼接的單詞吧)只會(huì)帶來更大的維護(hù)困難

記錄--這個(gè)前端Api管理方案會(huì)更好?

找了幾個(gè)不常見的英語名詞,英語爛仔直接帶上痛苦面具
而有了映射表就相當(dāng)于有了一個(gè)目錄(文件最上方一目了然, Map下的對(duì)象十分清晰還有注釋),
至少目前我是能都秒讀懂接口含義了
也不會(huì)出現(xiàn)面對(duì)老項(xiàng)目里那種長得拖不完的不知名接口文件的懵逼,點(diǎn)進(jìn)去還只有幾行代碼(雪花飄飄~)

優(yōu)點(diǎn):

  • 同上
  • apiMap變成接口目錄,可讀性和可維護(hù)性提高(下方介紹)
  • 涉及同模塊多個(gè)對(duì)象只需要引入一個(gè)文件

缺點(diǎn):

  • apiMap(目錄)和export的位置一個(gè)在文件最上方,一個(gè)在最下方,瀏覽時(shí)非常不方便,依舊需要經(jīng)常拖拽

這種方式已經(jīng)比較好用了,從可維護(hù)性和可讀性,拓展性來看我更推薦第二種方式

導(dǎo)出方式2

導(dǎo)出一個(gè)訪問映射表的函數(shù),參數(shù)是對(duì)象及操作類型,如(dog, upd)

// 暴露一個(gè)訪問api映射表的函數(shù), 參數(shù)是對(duì)象和操作
// 這里沒有錯(cuò)誤處理,jym看懂就行
export default function api(obj, action) {
    if (action) {
        // 返回某對(duì)象某操作的接口函數(shù),如dogUpdate
        return apiMap[obj][action]
    }
    // 返回一個(gè)包含多個(gè)操作接口函數(shù)的對(duì)象或公共接口
    return apiMap[obj]
}

// 封裝的接口
function obj1Func1(){}
function obj1Func2(){}
function obj2Func3(){}
function obj2Func4(){}
使用時(shí)方式1
import API from 'xxx'
// 沒有錯(cuò)誤處理,主打看懂
async function getData() {
    const params = {...}
    const data = await API(obj1, 'get')(params)  
    await API(obj1, 'upd')(params)
    await API(obj1, 'del')(params)
}
使用時(shí)方式2
import API from 'xxx'
const obj1API = API(obj1)

const data = await obj1API.get(params)  
const data = await obj1API.upd(params)  
const data = await obj1API.del(params)  

api函數(shù)

api函數(shù)可以復(fù)制或者寫在公共模塊引入就行了,實(shí)際上工作量只在維護(hù)映射表apiMap

現(xiàn)在查找接口原本一個(gè)模塊里可能涉及10個(gè)對(duì)象共100個(gè)接口,順序查找最差情況要看100條函數(shù)注釋,而根據(jù)對(duì)象查找最差情況是10(對(duì)象)+10(操作類型)即20條函數(shù)注釋。

const apiMap = {
    ...
    // 注釋:這是target對(duì)象
    targetObj: {
        add: objAddFunc, // 注釋:增刪改查的話可有可無
        upd: objUpdateFunc,
        del: objDeleteFunc,
        get: objGetFunc,
    }
    ...
}

只需要關(guān)注目標(biāo)對(duì)象(其實(shí)是注釋),清晰且一目了然,甚至不需要函數(shù)注釋,不需要拖到文件底部

可維護(hù)性和可讀性

模塊化

記錄--這個(gè)前端Api管理方案會(huì)更好?

這種方式用對(duì)象結(jié)構(gòu)拆分也算是模塊化了,看著不太習(xí)慣,但一個(gè)文件里對(duì)象和接口能都讀懂,維護(hù)性和可讀性也更好,即便接口函數(shù)再多行數(shù)再多,其實(shí)也只需要看apiMap

封裝

(接下來開始胡扯~)

api函數(shù)封裝了一層,可以統(tǒng)一管理接口提高拓展性和復(fù)用性,例如統(tǒng)一給actionget的套一個(gè)節(jié)流函數(shù)

// 暴露一個(gè)訪問api映射表的函數(shù), 參數(shù)是對(duì)象和操作
// 這里沒有錯(cuò)誤處理,jym看懂就行
export default function api(obj, action) {
    if (action) {
        if (action === "get") {
          return throttle(apiMap[obj][action], 500); // 設(shè)置節(jié)流時(shí)間為 500 毫秒,期間返回空函數(shù)
        }
        return apiMap[obj][action]
    }
    // 返回一個(gè)包含多個(gè)操作接口函數(shù)的對(duì)象或公共接口
    return apiMap[obj]
}
或者當(dāng)模塊下有多個(gè)對(duì)象需要增刪改查,且只需要一個(gè)參數(shù)id,那么只要再加個(gè)定制場景的api函數(shù)
// 偏函數(shù)固定參數(shù),這里constParams假設(shè)為 { id:007 }
export function paramsApi(constParams, obj) {
    // otherParams是額外參數(shù),在各自接口做個(gè)合并Object.assign()
    return (action, otherParams) => apiMap[obj][action](otherParams)
}
// 固定參數(shù)
const constParams = { id: 007 }
const dogApi = paramsApi(constParams, 'dog')
const catApi = paramsApi(constParams, 'cat')
// 免參數(shù)直接調(diào)用即可
dogApi('get')
dogApi('update', { color: 6 })
dogApi('delete')
catApi('get')
catApi('update', { color: 6 })
catApi('delete')

這個(gè)場景有些理想化,但有一層封裝也確實(shí)能夠在需要時(shí)方便統(tǒng)一管理

然后這里?action: objActionFunc這里也算是一層封裝,方便進(jìn)行命名簡寫和規(guī)范

// xxxModule.js
const apiMap = {
    //對(duì)象1
    obj: {
        action: objActionFunc
        add: dogAdd,   // xxx/dog/add
        mAdd: dogImport,   // xxx/dog/import
        upd: dogUpdate,   // xxx/dog/update
    },
}

開發(fā)體驗(yàn)

和同事溝通后,我應(yīng)用在項(xiàng)目的一個(gè)模塊中,感覺很棒!

首先寫接口引入公共模塊的api函數(shù),定義apiMap映射表,正常寫接口,工作量多了一個(gè)apiMap罷了

// 引入api,getType函數(shù)
import { api } from "common"
// api映射表
const apiMap = {
    ...
}
// 暴露api函數(shù)
export default api
// 封裝的接口
...
開發(fā)時(shí)查找接口就全程對(duì)著文件最上方的映射表復(fù)制,基本不需要怎么拖拽,不需要切換文件去找其他對(duì)象,也不需要看一堆無關(guān)代碼,全程看注釋,大大降低心智負(fù)擔(dān),小白上手也能分分鐘找到
// xxxModule.js
const apiMap = {
    //對(duì)象1
    dog: {
        add: xxx
        get: xxx
    },
    //對(duì)象2
    cat: {
        upd: xxx,
        del: xxx,
    },
}
引入接口時(shí)只要一個(gè)API函數(shù),調(diào)用方式基本大差不差吧,反正都是copy,然后改下操作類型
import API from "@/api/xxx/xxxModule"

// 調(diào)用時(shí), 兩種方式,復(fù)制個(gè)對(duì)象名,記住個(gè)操作類型,完事
const dogAPI = API('dog')
const catAPI = API('cat')

await dogAPI.get(params)
await dogAPI.upd(params)
await catAPI.get(params)
// 或
await API('dog', 'get')(params)
await API('dog', 'upd')(params)
await API('cat', 'get')(params)

開發(fā)效率我覺得和對(duì)象方式的API管理方案沒啥區(qū)別,都是copy然后改下操作類型,但其實(shí)最大的好處還是在可維護(hù)性和可讀性上

寫在最后

非常感謝看到最后的jym,這是我本0前端小白通過偏函數(shù)產(chǎn)生的一點(diǎn)小想法,感覺挺好用的分享一下(可能場景比較簡單局限后臺(tái)系統(tǒng)),歡迎jym多多指點(diǎn)發(fā)表建議(玻璃心

本文轉(zhuǎn)載于:

https://juejin.cn/post/7290558277666930744

如果對(duì)您有所幫助,歡迎您點(diǎn)個(gè)關(guān)注,我會(huì)定時(shí)更新技術(shù)文檔,大家一起討論學(xué)習(xí),一起進(jìn)步。

?記錄--這個(gè)前端Api管理方案會(huì)更好?文章來源地址http://www.zghlxwxcb.cn/news/detail-715739.html

到了這里,關(guān)于記錄--這個(gè)前端Api管理方案會(huì)更好?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 我們常說這個(gè)pycharm里有陷阱,第三方庫導(dǎo)入失敗,看這里!

    我們常說這個(gè)pycharm里有陷阱,第三方庫導(dǎo)入失敗,看這里!

    最近有小伙伴遇到了明明安裝了 python 第三方庫,但是在 pycharm 當(dāng)中卻導(dǎo)入不成功的問題。 ? 一直以來,也有不少初學(xué) python 的小伙伴,一不小心就跳進(jìn)了虛擬環(huán)境和系統(tǒng)環(huán)境的【陷阱】中。 本文就基于此問題,來說說在 pycharm 當(dāng)中如何使用系統(tǒng)環(huán)境、虛擬環(huán)境。 pycharm 當(dāng)中

    2024年02月04日
    瀏覽(19)
  • 記錄--前端金額運(yùn)算精度丟失問題及解決方案

    記錄--前端金額運(yùn)算精度丟失問題及解決方案

    前端開發(fā)中難免會(huì)遇到價(jià)格和金額計(jì)算的需求,這類需求所要計(jì)算的數(shù)值大多數(shù)情況下是要求精確到小數(shù)點(diǎn)后的多少位。但是因?yàn)镴S語言本身的缺陷,在處理浮點(diǎn)數(shù)的運(yùn)算時(shí)會(huì)出現(xiàn)一些奇怪的問題,導(dǎo)致計(jì)算不精確。 本文嘗試從現(xiàn)象入手,分析造成這一問題原因,并總結(jié)和整

    2024年02月19日
    瀏覽(24)
  • 記錄--解決前端內(nèi)存泄漏:問題概覽與實(shí)用解決方案

    記錄--解決前端內(nèi)存泄漏:問題概覽與實(shí)用解決方案

    內(nèi)存泄漏是前端開發(fā)中的一個(gè)常見問題,可能導(dǎo)致項(xiàng)目變得緩慢、不穩(wěn)定甚至崩潰。在本文中,我們將深入探討在JavaScript、Vue和React項(xiàng)目中可能導(dǎo)致內(nèi)存泄漏的情況,并提供詳細(xì)的代碼示例,以幫助開發(fā)人員更好地理解和解決這些問題。 1. 未正確清理事件處理器 JavaScript中的

    2024年02月11日
    瀏覽(25)
  • 記錄--前端換膚方案 - element+less無感換膚(無需頁面刷新)

    記錄--前端換膚方案 - element+less無感換膚(無需頁面刷新)

    前不久在改造一個(gè)迭代了一年多的項(xiàng)目時(shí),增加了一個(gè)換膚功能。通過自己的探索,總結(jié)出了一套比較合適的改造方案供大家參考,如有更好的方案歡迎評(píng)論區(qū)踴躍評(píng)論?? 先上效果: 在查閱現(xiàn)有方案時(shí),總結(jié)了目前使用的幾種方案: 1、定義多套樣式 首先定義一套或多套樣

    2024年02月08日
    瀏覽(21)
  • Spring 事務(wù)管理方案和事務(wù)管理器及事務(wù)控制的API

    Spring 事務(wù)管理方案和事務(wù)管理器及事務(wù)控制的API

    目錄 一、事務(wù)管理方案 1. 修改業(yè)務(wù)層代碼 2. 測試 二、事務(wù)管理器 1. 簡介 2. 在配置文件中引入約束 3. 進(jìn)行事務(wù)配置 三、事務(wù)控制的API 1.?PlatformTransactionManager接口 2.?TransactionDefinition接口 3.?TransactionStatus接口 往期專欄文章相關(guān)導(dǎo)讀? 1. Maven系列專欄文章 2. Mybatis系列專欄文

    2024年02月08日
    瀏覽(27)
  • 電子取證之服務(wù)器取證,本人第一次從pc取證到服務(wù)器,這里有一套例題分享給大家,所有解析我都盡可能全面具體,希望與各位同仁一起學(xué)習(xí)。(二次修改)

    電子取證之服務(wù)器取證,本人第一次從pc取證到服務(wù)器,這里有一套例題分享給大家,所有解析我都盡可能全面具體,希望與各位同仁一起學(xué)習(xí)。(二次修改)

    話不多說,先上鏈接,這個(gè)包含一個(gè)2G的服務(wù)器鏡像和題目,原題是弘連公司的,致謝,此處純粹分享解法供大家學(xué)習(xí)。 第二次做題目,發(fā)現(xiàn)寶塔新版已經(jīng)不支持,所以題目意義減少,還是歡迎手搓與小白來看看 鏈接: https://pan.baidu.com/s/1p8T7Fez_VlnSqdzvptARRw?pwd=ybww 提取碼: ybww

    2024年02月07日
    瀏覽(27)
  • ChatGPT工作提效之小鵝通二次開發(fā)批量API對(duì)接解決方案(學(xué)習(xí)記錄同步、用戶注冊(cè)同步、權(quán)益訂購?fù)健㈤_發(fā)文檔)

    ChatGPT工作提效之小鵝通二次開發(fā)批量API對(duì)接解決方案(學(xué)習(xí)記錄同步、用戶注冊(cè)同步、權(quán)益訂購?fù)健㈤_發(fā)文檔)

    ChatGPT工作提效之初探路徑獨(dú)孤九劍遇強(qiáng)則強(qiáng) ChatGPT工作提效之在程序開發(fā)中的巧勁和指令(創(chuàng)建MySQL語句、PHP語句、Javascript用法、python的交互) ChatGPT工作提效之生成開發(fā)需求和報(bào)價(jià)單并轉(zhuǎn)為Excel格式 ChatGPT是一種實(shí)時(shí)對(duì)話生成模型,能夠幫助用戶快速地回答問題、提供信息,并

    2024年02月06日
    瀏覽(23)
  • 這里推薦幾個(gè)前端動(dòng)畫效果網(wǎng)站

    這里推薦幾個(gè)前端動(dòng)畫效果網(wǎng)站

    1. AnimistaAnimista 是一個(gè) CSS 動(dòng)畫/轉(zhuǎn)場庫和在線工具。它有許多現(xiàn)成的 CSS 動(dòng)畫片段可以直接使用,也可以在線定制動(dòng)畫。 網(wǎng)站地址:Animista - On-Demand CSS Animations Library ? 2. Animate.cssAnimate.css 是一個(gè)免費(fèi)的 CSS 動(dòng)畫庫,里面有 Attention Seekers 、 Bouncing Entrances 、 Fading Entrances、Rotating En

    2024年02月13日
    瀏覽(34)
  • 你想要的【微前端】都在這里了!

    作者:京東零售 鄭炳懿 開篇: 如果你不知道微前端是什么,或者不知道微前端能解決什么問題,那么你可能不需要微前端。 在我看來,對(duì)于每一個(gè)沒有使用過的新技術(shù),都應(yīng)該有以下幾個(gè)過程: 1、調(diào)研該技術(shù),產(chǎn)出相應(yīng)的調(diào)研文檔。 2、輸出技術(shù)Demo,基本的框架結(jié)構(gòu)。

    2024年02月02日
    瀏覽(20)
  • 記錄一次最近遇到的新網(wǎng)絡(luò)詐騙經(jīng)歷,大家要提高警惕啊

    記錄一次最近遇到的新網(wǎng)絡(luò)詐騙經(jīng)歷,大家要提高警惕啊

    第一次接到詐騙電話,說是要求修改支付寶信息的,一開始說的確實(shí)是很迷惑人,一下子可能沒法馬上分辨出來,但是到后面說要加QQ操作什么什么的,那肯定就是有嚴(yán)重問題的,因?yàn)楹芏嘣p騙都是通過QQ來操作的,一聽到這個(gè)就要警惕了。 他的詐騙流程是這樣的: 先是說你

    2023年04月23日
    瀏覽(39)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包