自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何設(shè)計 API?看這一篇就夠了

開發(fā) 前端
不管是 API 的設(shè)計還是代碼架構(gòu)的設(shè)計,原則其實都差不多,要能夠松耦合、易擴展、在滿足現(xiàn)有需求的基礎(chǔ)上,再多往前想一步,避免過度設(shè)計。

在前后端分離的設(shè)計中,不管使用什么語言,后端都需要提供 WebAPI 給前端使用。如果是一個平臺級的產(chǎn)品,還有可能需要將平臺的公共 API 提供給第三方系統(tǒng)使用,這些都要考慮到 API 的設(shè)計。

本文聊下 API 設(shè)計可能遇到的問題以及處理方式。

問題

1、客戶端種類比較多,不容易實現(xiàn)差異化。

以我們現(xiàn)在正在做的低代碼平臺來說,存在的客戶端有下面這些:

  • Web 端應(yīng)用程序
  • 移動端的應(yīng)用程序
  • 第三方開發(fā)人員編寫的應(yīng)用程序
  • 自定義組件(符合規(guī)范的 Vue 前端組件,可以無縫和平臺進行整合)
  • 平臺配置的腳本(直接配置在平臺中,可以調(diào)用接口、處理界面元素)

不同的客戶端在調(diào)用接口時,輸入輸出會存在差異,比如:移動端的數(shù)據(jù)列表功能和結(jié)構(gòu)上比 PC 端要簡單很多,如果調(diào)用統(tǒng)一的接口,會造成浪費。

2、客戶端直接對 API 進行調(diào)用。

  • API 如果拆分的比較細(xì),一次操作會發(fā)出多個請求才能拿到想要的數(shù)據(jù),效率比較低
  • 當(dāng)需要多個請求時,還需要在客戶端進行邏輯的組合,這樣每個客戶端可能都有一套自己的邏輯,不容易維護
  • 服務(wù)如果進行拆分和合并,客戶端代碼需要同步進行修改
  • 如果 API 進行了修改,第三方調(diào)用方需要配合修改,但這中間的溝通成本會很高,有時甚至不可行

要解決這些問題,就應(yīng)該單獨提供一個獨立的公共 API,而不是直接讓第三方開發(fā)人員或其他客戶端直接訪問平臺公開的 API ,涉及到獨立的公共 API,API 網(wǎng)關(guān)就要出場了。

API  網(wǎng)關(guān)

API 網(wǎng)關(guān)是一種服務(wù),是外部進入到應(yīng)用程序內(nèi)部的入口點。負(fù)責(zé)請求路由、身份驗證、限流、熔斷、流量監(jiān)控等各種功能。

路由請求

路由請求是 API 網(wǎng)關(guān)的核心功能,當(dāng)網(wǎng)關(guān)收到請求時,會去查詢路由映射關(guān)系,將請求指定到相應(yīng)的服務(wù)。跟 Nginx 的反向代理有點類似。

路由的配置可以是靜態(tài)的,也可以是動態(tài)的,比如在 Ocelot 中,可以在 json 文件中進行路由映射的配置,也可以使用代碼的方式按照需求進行動態(tài)路由修改。

參考:https://github.com/oec2003/StudySamples/tree/master/UpdateOcelotConfig。

組合多個服務(wù)

在使用我們平臺搭建的業(yè)務(wù)系統(tǒng)中,打開數(shù)據(jù)列表的詳情,會做下面幾件事情:

  • 獲取按鈕配置
  • 獲取表單模型
  • 獲取表單字段權(quán)限(根據(jù)不同的人員,獲取的是不同流程節(jié)點的權(quán)限)
  • 獲取表單數(shù)據(jù)

在 API 網(wǎng)關(guān)中可以對客戶端提供統(tǒng)一入口調(diào)用,將這些來自不同服務(wù)的接口進行整合,統(tǒng)一輸出,因為網(wǎng)關(guān)和服務(wù)都在內(nèi)網(wǎng),傳輸速度比較快,和客戶端需要同時獲取多個 API 請求相比,提升了效率。

專屬 API

作為一個平臺,對外提供的公共 API 顆粒度往往不會很細(xì),否則就不具備通用性了。如果針對不同的移動端(安卓、iOS)、或者特定的第三方平臺,有一些細(xì)節(jié)上的區(qū)別。

網(wǎng)關(guān)可以為不同類型的客戶端提供獨立的 API。

一些擴展能力

  • 身份認(rèn)證
  • 訪問授權(quán)
  • 限流
  • 熔斷
  • 緩存
  • 指標(biāo)收集
  • 日志記錄

這些擴展能力并非只有在 API 網(wǎng)關(guān)中才能實現(xiàn),在后端服務(wù)中一樣可以。但有些能力放到 API 網(wǎng)關(guān)中會更合適。

例如:身份認(rèn)證、限流、熔斷等,就是在請求還為觸及服務(wù)時就已經(jīng)處理了,會更加安全,也會讓后端服務(wù)更穩(wěn)固。

網(wǎng)關(guān)的選擇

在 .NET Core 中可以選擇的開源網(wǎng)關(guān)產(chǎn)品有:Ocelot、Kong、Envoy 等。

Ocelot:是一個基于.NET Core的輕量級 API 網(wǎng)關(guān),用于構(gòu)建和管理微服務(wù)架構(gòu)中的 API 網(wǎng)關(guān)。作為一個開源項目,Ocelot 提供了一種靈活、可擴展的方式來集中處理請求路由、認(rèn)證授權(quán)、請求轉(zhuǎn)發(fā)、負(fù)載均衡和緩存等功能。

Kong:是在 Nginx 中運行的 Lua 程序。得益于 Nginx 的性能優(yōu)勢,Kong 相比于其它的開源 API 網(wǎng)關(guān)來說,性能方面是最好的。由于大中型公司對于 Nginx 運維能力都比較強,所以選擇 Kong 作為 API 網(wǎng)關(guān),無論是在性能還是在運維的把控力上,都是比較好的選擇。

Envoy:是一個開源的高性能代理和通信中間件,專為云原生應(yīng)用程序設(shè)計。它由 Lyft 開發(fā)并于 2017年成為 Cloud Native Computing Foundation(CNCF)的畢業(yè)項目之一。雖然 Envoy 本身是用 C++ 編寫的,但它可以與任何語言和框架進行集成,包括 .NET Core。

網(wǎng)關(guān)的選擇需要能解決當(dāng)前面臨的問題。關(guān)于各種網(wǎng)關(guān)的使用方式,以及優(yōu)缺點的對比,后面再進行詳細(xì)介紹。

最后

不管是 API 的設(shè)計還是代碼架構(gòu)的設(shè)計,原則其實都差不多,要能夠松耦合、易擴展、在滿足現(xiàn)有需求的基礎(chǔ)上,再多往前想一步,避免過度設(shè)計。

責(zé)任編輯:姜華 來源: 不止dotNET
相關(guān)推薦

2023-02-10 09:04:27

2020-02-18 16:20:03

Redis ANSI C語言日志型

2022-06-20 09:01:23

Git插件項目

2022-08-01 11:33:09

用戶分析標(biāo)簽策略

2021-04-08 07:37:39

隊列數(shù)據(jù)結(jié)構(gòu)算法

2023-09-11 08:13:03

分布式跟蹤工具

2018-05-22 08:24:50

PythonPyMongoMongoDB

2024-09-23 08:00:00

消息隊列MQ分布式系統(tǒng)

2020-07-03 08:21:57

Java集合框架

2019-05-14 09:31:16

架構(gòu)整潔軟件編程范式

2017-03-11 22:19:09

深度學(xué)習(xí)

2022-04-07 10:39:21

反射Java安全

2023-11-18 09:30:42

模型AI

2022-07-06 12:07:06

Python函數(shù)式編程

2019-04-01 10:43:59

Linux問題故障

2022-05-19 08:28:19

索引數(shù)據(jù)庫

2020-10-21 14:12:02

Single Sign

2023-11-06 07:21:13

內(nèi)存結(jié)構(gòu)Jvm

2020-10-18 07:32:06

SD-WAN網(wǎng)絡(luò)傳統(tǒng)廣域網(wǎng)

2019-04-10 10:43:15

Redis內(nèi)存淘汰策略
點贊
收藏

51CTO技術(shù)棧公眾號