《電子技術應用》
您所在的位置:首頁 > 人工智能 > 業界動態 > 通用 API 并不能很好地服務于前端

通用 API 并不能很好地服務于前端

2021-11-05
來源:CSDN
關鍵詞: API 前端

  為什么不行?

  在設計通用 API 時,你會遇到一系列鬧心的問題:

  如何預測和支持所有可能的工作流程?

  如何避免某些蹩腳的工作流程中的 N+1 問題?

  如何測試每個可能出現的請求的功能、性能和安全性?

  如何在不破壞現有工作流程的情況下修改某個 API?

  如何根據內部和社區的需求,劃分修改 API 的優先級?

  如何完善文檔,以方便各方順利完成工作?

  從前端的角度來看,還有更多問題需要考慮:

  如何收集渲染頁面所需的所有數據?

  如何優化發往多個端點的多個請求?

  如何避免以預期之外的方式使用 API 數據字段?

  如何權衡新功能與構建新 API 的成本?

  如果只是為了前端而構建后端,你需要考慮這么多問題嗎?你需要考慮每一種可能的工作流程,避免 N+1 請求問題,測試每個請求配置?還是應該拒絕某些功能,因為你非常清楚每個頁面需要呈現什么?看到這里,你可能明白我想說什么了。

  建議

  我建議不要將前端視為某個通用 API 的客戶端,應將其視為應用的一半。

  假設你可以把整個頁面所需的 JSON 全部發送給前端。那么只需要創建一個端點/page/a,然后渲染/page/a的整個JSON就可以了。而且,每個頁面都應該采用相同的做法。不要強迫前端開發人員發送一堆單獨的請求來渲染復雜的頁面。不要人為地制造的限制。

  這個 JSON 需要負責渲染整個頁面。不要渲染抽象模型和集合,而是應該渲染具體的方框、小節、段落、列表等。渲染可視化頁面結構。

  {

  “section1”: {

  “topBoxTitle”: “Foo”,

  “leftBoxTitle”: “Bar”,

  “linkToClose”: “https://…”

  },

  “section2”: {

  …

  }

  }

  這與服務器驅動 UI 類似,但不完全相同。我們可以稱之為服務器通知 UI。

  哪種方法更好?

  看到上面那些繁雜的考慮事項了嗎?設計前端專用的 API 就不會為這些問題鬧心了。

  你可以自由決定:我想要一個頁面A。然后只需在后端和前端實現頁面A。非常簡單。

  我們無需再考慮:必須引入哪些 API 工作流程,才能成功地渲染這個頁面?頁面 A 的實現非常簡單,只需要實現頁面本身的功能。你可以完整地測試頁面A,檢查 Bug、安全和性能問題。你甚至可以通過一個大型 SQL 查詢語句,獲取頁面 A 所需的所有數據。你可以將頁面 A 的整個 JSON 放入緩存。

  前端非常清楚頁面 A 中每個字段的用途。這些字段沒有歧義,它們準確地代表了前端的需求。

  當需要修改頁面 A 時,你只需徑直打開頁面 A,完成修改就行了,無需花大把時間開會討論如何修改后端 API 才能實現前端的變更。這個 API 只服務于頁面 A,不需要精心設計服務多個請求。只有這樣,我們才能擺脫自我強加的限制。

  此外,業務邏輯可以全部交由后端負責,無需在前端和后端之間的分工上浪費精力。前端可以專心呈現頁面,而后端則可以專心實現前端所需的內容。目標明確,不是嗎?

  如何實踐?

  我曾在多個生產項目中嘗試過這種做法。其中有一個是個人的項目,還有一個是在公司現有項目的基礎之上進行的重構。我們整個團隊都參與了那個項目,而且效果很好。我們遇到的唯一問題就是,前端的工作越來越無聊,因為幾乎所有的業務邏輯都由后端負責。同時,后端團隊也沒有感覺到太大壓力。而且大多數時候,我們談論的都是業務相關的內容,而不是代碼。

  當然,很多人不太贊同這種做法,常見的反對意見如下。

  我希望前端自由(或者,我希望前端解耦)!

  不要自欺欺人了,通用 API 并沒有賦予前端真正的自由。為了渲染一個頁面,需要發送 7 個請求,這不是自由。這是為了滿足基本的要求而作繭自縛。一旦需求發生變化,后端也必然需要變更。這樣的自由都是偶然的,而且大多是發生在錯誤的地方。

  如果真的想讓前端團隊自由,直接在 Postgres 上安裝一個 GraphQL 包裝器,就可以了。

  我們本來就需要通用API,這樣不是一箭雙雕嗎?

  不,其實你沒有必要公開這些 API。真正到了發布的時候,你可能會想:“也許我不應該公開這些API”。通用 API 與前端專用API 的變更有非常大的不同。公開 API 需要支持客戶端的工作流程。而前端專用 API 可以隨意變更。沒有困難,就不要制造困難了。

  如果給每個頁面構建JSON,那么邏輯代碼該如何重用?現在的 CRUD 控制器中大量的邏輯代碼都是重用的!

  如果編程語言允許,完全可以重用邏輯。你可以使用 mixins、組合、繼承,以及其他任何方式。如果能建立良好的抽象,就像樂高積木一樣,只需要將積木搭建起來就可以了。

  通用 API 可以在移動應用中重用!

  通常移動應用都有不同的頁面,其中包含的信息和結構不同,變更的原因也不同。專門針對各個頁面構建一個后端,可以節省很多時間。

  如果頁面需要部分XHR 更新怎么辦?始終返回整個頁面嗎?

  創建一個只返回特定數據的端點也是沒問題的。你完全可以針對頁面特定部分的數據建立一個端點。在頁面最初加載的時候渲染 React 組件,然后通過調用這些端點的 XHR 更新各個組件。但是,只有某些頁面有這樣的需求時,才有必要引入這些端點。這是特殊的處理,一般不需要實現。

  我的前端是一個SPA,只需要一部分數據,不需要整個頁面。

  即便是部分數據,也可以作為部分頁面結構提供給前端,不需要作為通用資源。只要后端能夠滿足前端的需求即可。

  我正在構建一個站點構建器,所以前端實際上只是站點構建器 API 的測試。

  這是一種正確的用法,加油!

  你有數據支持這種做法嗎?

  我希望能夠收集到這樣的數據,然而,我們很難準確地衡量。誰會同時針對一個軟件長期維護兩個架構,然后比較二者的效果?本文表達的只是我個人的經歷。




本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
中国女人久久久| 久久伊人一区二区| 久久精品国产99| 中文国产成人精品久久一| 在线免费观看视频一区| 国产一区二区三区四区五区美女 | 毛片av中文字幕一区二区| 午夜精品福利一区二区蜜股av| 一区二区三区波多野结衣在线观看| 91久久精品网| 亚洲国产片色| 亚洲国产精品va在看黑人| 久久福利精品| 久久福利电影| 久久激情五月丁香伊人| 久久精品国产欧美激情| 久久狠狠亚洲综合| 久久精品视频免费播放| 亚洲二区在线观看| 亚洲国产99精品国自产| 亚洲电影在线看| 91久久黄色| 日韩视频在线观看| 9人人澡人人爽人人精品| 一本一本a久久| 亚洲网站在线看| 亚洲桃色在线一区| 亚洲影院色无极综合| 亚洲综合色网站| 香蕉久久精品日日躁夜夜躁| 欧美影院成年免费版| 久久精品夜色噜噜亚洲a∨| 欧美资源在线| 久久午夜国产精品| 母乳一区在线观看| 欧美激情一区二区三区在线视频 | 日韩午夜一区| 亚洲图片欧美一区| 亚洲永久字幕| 久久精品国产第一区二区三区最新章节 | 亚洲日本欧美日韩高观看| 亚洲精品视频在线观看网站| 艳女tv在线观看国产一区| 中文一区二区| 欧美一区二区私人影院日本| 欧美主播一区二区三区美女 久久精品人 | 一本久道久久综合狠狠爱| 亚洲一区二区三区中文字幕| 性欧美18~19sex高清播放| 欧美在线免费视屏| 久久综合五月| 欧美日韩在线一区二区| 国产精品毛片大码女人| 国产亚洲精品久| 亚洲国产成人高清精品| 亚洲午夜国产成人av电影男同| 午夜在线观看免费一区| 亚洲激情在线| 亚洲伊人第一页| 久久国产一区二区三区| 欧美高清视频www夜色资源网| 国产精品久久97| 韩国一区二区三区美女美女秀| 亚洲人成亚洲人成在线观看图片| 亚洲天堂偷拍| 91久久久久久| 欧美一区二区三区在线| 欧美成人免费一级人片100| 国产精品毛片| 亚洲激情一区二区| 亚洲专区欧美专区| 亚洲人成网站在线播| 午夜老司机精品| 欧美国产日韩在线观看| 国产精品无人区| 亚洲青色在线| 欧美一区二区在线免费观看| 一区二区三区精品国产| 久久久欧美一区二区| 欧美日韩中文字幕日韩欧美| 激情久久中文字幕| 亚洲午夜精品视频| 亚洲美洲欧洲综合国产一区| 欧美自拍丝袜亚洲| 国产精品草莓在线免费观看| 在线播放中文字幕一区| 亚洲自拍偷拍福利| 一区二区三区不卡视频在线观看 | 久久综合色8888| 国产精品有限公司| 日韩一区二区免费高清| 亚洲第一精品电影| 亚洲欧美三级在线| 欧美日本簧片| 在线观看国产精品网站| 亚洲女人天堂成人av在线| 日韩午夜激情av| 毛片基地黄久久久久久天堂| 国产欧美午夜| 亚洲视频中文| 这里是久久伊人| 欧美成熟视频| 韩国v欧美v日本v亚洲v| 亚洲中无吗在线| 亚洲自拍高清| 欧美视频在线观看视频极品| 亚洲欧洲精品一区二区三区波多野1战4 | 欧美主播一区二区三区| 国产精品嫩草久久久久| 亚洲美女免费精品视频在线观看| 亚洲激情不卡| 久久亚洲精品视频| 国产一区二区三区网站| 亚洲欧美日韩另类| 亚洲综合三区| 国产精品久久久99| 一区二区免费在线播放| 一区二区三区精品视频在线观看| 欧美精品日韩精品| 亚洲国产欧美一区| 亚洲片在线资源| 欧美aa在线视频| 亚洲第一综合天堂另类专| 久久精品一二三| 久久亚裔精品欧美| 一区二区三区在线观看视频| 欧美在线视频一区二区| 久久精品免费看| 国内精品久久久久久久影视麻豆| 性欧美办公室18xxxxhd| 久久国产成人| 国产亚洲欧美一区| 欧美专区在线| 久久综合色播五月| 亚洲成人原创| 亚洲欧洲精品成人久久奇米网| 欧美成人tv| 亚洲精品久久久久久下一站 | 欧美极品在线观看| 亚洲精品欧美在线| 在线视频精品一区| 欧美日韩在线一区| 亚洲一区免费网站| 欧美在线三级| 黄色一区二区三区| 亚洲精品免费看| 欧美大片一区二区三区| 亚洲人成在线免费观看| 中日韩午夜理伦电影免费| 欧美午夜精品久久久久免费视| 亚洲手机成人高清视频| 欧美诱惑福利视频| 激情小说另类小说亚洲欧美| 亚洲激情网站免费观看| 欧美日韩国产成人精品| 亚洲视频电影在线| 欧美一区二区三区免费观看| 国内精品久久久久影院优| 亚洲人久久久| 欧美网站在线| 午夜在线视频一区二区区别| 久久精品1区| 亚洲国产成人在线| 亚洲一区二区免费视频| 国产一区二区成人| 亚洲肉体裸体xxxx137| 欧美日韩理论| 亚洲欧美日韩中文在线制服| 久久尤物电影视频在线观看| 亚洲人成绝费网站色www| 亚洲欧美日韩天堂| 国内精品久久久| 在线视频欧美日韩| 国产网站欧美日韩免费精品在线观看 | 欧美性jizz18性欧美| 香蕉久久精品日日躁夜夜躁| 免费人成精品欧美精品| 一二三区精品福利视频| 久久久久成人网| 亚洲精品一区二区三区不| 亚洲欧美国产精品va在线观看| 好男人免费精品视频| 中文日韩电影网站| 激情成人在线视频| 亚洲午夜国产一区99re久久 | 一区二区三区 在线观看视频| 久久精品五月| 99国产精品99久久久久久| 久久精品综合网| 日韩午夜电影av| 美女黄网久久| 亚洲免费在线观看| 欧美激情精品久久久久久变态| 亚洲欧美中文另类| 欧美日韩国产综合新一区| 久久爱另类一区二区小说| 欧美三日本三级少妇三2023| 久久精品日产第一区二区| 国产精品久久久久av免费| 亚洲区一区二|