
在計算機領(lǐng)域,有很多成熟的技術(shù)標準非常有價(jià)值,參考技術(shù)標準容易找到標準的開(kāi)源實(shí)現,也可以自己參考其原理做出更可靠的方案。例如 IETF 的 RFC 文檔是最權威的技術(shù)資料來(lái)源。查閱技術(shù)標準也是最快捷的學(xué)習方式,但是閱讀門(mén)檻比較高,而且大多是英文資料。
這篇文章結合技術(shù)研討會(huì )總結的內容,整理了在技術(shù)方案設計中可以參考和使用的技術(shù)標準。
為了更好的組織內容,先介紹一下常見(jiàn)的技術(shù)標準組織,并將技術(shù)標準分為計算機科學(xué)、工程應用、開(kāi)發(fā)工具三類(lèi),你可以?xún)H閱讀相關(guān)內容。
對于不常用的技術(shù)標準依然有必要了解的技術(shù)標準不在文中說(shuō)明,參考《未詳細說(shuō)明的標準清單》。
補充說(shuō)明:規范、標準、協(xié)議都可以指標準,協(xié)議主要指網(wǎng)絡(luò )通信標準。
IETF 應該是互聯(lián)網(wǎng)標準組織中名氣最大的,它的全稱(chēng)是國際互聯(lián)網(wǎng)工程任務(wù)組(The Internet Engineering Task Force)。IETF下屬有很多工作組(WG),專(zhuān)門(mén)負責一個(gè)領(lǐng)域標準的制定,例如 OAuth。IETF 工作的產(chǎn)出主要是 RFC 文檔(Request For Comments)。IETF 最知名的規范是 TCP/IP 協(xié)議族,但是我們日常相關(guān)更多關(guān)注應用層標準,就不介紹通信相關(guān)的協(xié)議了,下面是一些常見(jiàn)應用層的標準。
JCP(Java Community Process) 是一個(gè)開(kāi)放的國際組織,主要由 Java 開(kāi)發(fā)者以及被授權者組成。Java 之所以能發(fā)展成目前這個(gè)規模,離不開(kāi)標準化進(jìn)程,JCP 中的一些規范不僅影響了 Java 世界,對其他語(yǔ)言,例如 PHP、Nodejs 也造成了巨大的影響。在日常服務(wù)器開(kāi)發(fā)工作中,用到 JCP 標準非常多,例如數據驗證、數據庫訪(fǎng)問(wèn)和服務(wù)器容器。
W3C 中文名稱(chēng)是萬(wàn)維網(wǎng)聯(lián)盟,是Web技術(shù)領(lǐng)域最具權威和影響力的國際中立性技術(shù)標準機構,主要負責制定瀏覽器上一些技術(shù)細節以消除瀏覽器上 HTML、CSS 渲染的差異,包括 DOM、XML 和 SVG 等技術(shù)。但是需要注意 JavaScript 不是 W3C 的范圍,但 W3C 需要負責瀏覽器中 JavaScript API 也就是 DOM 規范的制定。
ECMA 中文名稱(chēng)是歐洲計算機制造聯(lián)合會(huì ),主要負責計算機制造和編程相關(guān)的標準制定。ECMA 制定了許多編程語(yǔ)言的規范,例如 C#、C++ 等,有趣的是 Sun 公司曾經(jīng)提交了 Java 相關(guān)標準給 ECMA 但是隨后又撤銷(xiāo)了。ECMA 下面有幾個(gè)我們可能特別關(guān)注的規范:ECMAScript、JSON 和辦公文檔規范。
OMG(Object Management Group) 中文名稱(chēng)是對象管理組織,OMG 規范了面向對象的一些概念,開(kāi)始的目的是為分布式面向對象系統建立標準,現在也包含了一些流程建模的內容。UML、BPMN 等標準都是 OMG 的工作成果。
IETF 制定的關(guān)于 HTTP 協(xié)議值得架構師去閱讀,HTTP 協(xié)議是基于文本傳輸的應用層協(xié)議,所以比較容易理解,充分挖掘該協(xié)議的特性能解決工作中很多問(wèn)題。
RFC 723X HTTP 協(xié)議族 HTTP 標準分為多個(gè)版本,目前在用的一般是 1.1(RFC 7230)。同時(shí) HTTP 標準分為核心標準和拓展標準,例如緩存、會(huì )話(huà)、內容編碼等內容屬于拓展部分,在選擇 HTTP client 時(shí),需要注意其實(shí)現程度可能并不完整。另外 method、狀態(tài)碼等枚舉類(lèi)型在 IANA 中心可以找到。
相關(guān)地址:HTTP https://www.rfc-editor.org/rfc/rfc7230
可以拓展閱讀 Websocket、HTTP/3、HTTP Over TLS 協(xié)議。
Websocket https://datatracker.ietf.org/doc/html/rfc6455
HTTP/3 https://datatracker.ietf.org/doc/rfc9114/
HTTP Over TLS https://datatracker.ietf.org/doc/html/rfc2818
如果希望繼續了解和學(xué)習計算機網(wǎng)絡(luò )底層協(xié)議,可以閱讀 RFC 1180。RFC 1180 算是 TCP/IP 協(xié)議簇的導讀,所以它的標題是 《A TCP/IP Tutorial》。這份 RFC 文檔可以說(shuō)是計算機網(wǎng)絡(luò )書(shū)籍最權威的材料引用來(lái)源。
相關(guān)地址:https://datatracker.ietf.org/doc/html/rfc1180
也可以拓展閱讀經(jīng)典的以太網(wǎng)協(xié)議 RFC 802.3、WIFI 協(xié)議 RFC 802.11。
RFC 802.3:https://datatracker.ietf.org/doc/html/rfc1516
RFC 802.11:https://datatracker.ietf.org/doc/html/rfc7494
關(guān)于網(wǎng)絡(luò )協(xié)議也可以推薦閱讀科來(lái)網(wǎng)絡(luò )協(xié)議圖譜,了解網(wǎng)絡(luò )協(xié)議之間的關(guān)系:
https://www.colasoft.com.cn/download/protocols_map.php
LDAP(輕量級目錄訪(fǎng)問(wèn)協(xié)議)是一種用于訪(fǎng)問(wèn)和維護分布式目錄信息的協(xié)議。它最初設計用于在 TCP/IP 網(wǎng)絡(luò )上訪(fǎng)問(wèn) X.500 目錄服務(wù),但后來(lái)被推廣為在各種環(huán)境中使用的通用協(xié)議,LDAP 主要用途為提供企業(yè)應用人員、組織、部門(mén)等信息。
架構師非常有必要了解 LDAP 協(xié)議,很多企業(yè)應用產(chǎn)品都提供了 LDAP 協(xié)議的認證接入。
相關(guān)地址:https://datatracker.ietf.org/doc/html/rfc4511
物聯(lián)網(wǎng)標準中常用的一項技術(shù)是 MQTT,它是一個(gè)應用層協(xié)議。
MQTT(Message Queuing Telemetry Transport)是一種輕量級的通信協(xié)議,設計用于在低帶寬、不穩定或資源受限的網(wǎng)絡(luò )環(huán)境中進(jìn)行高效的消息傳輸。MQTT 最初由IBM 開(kāi)發(fā),后來(lái)成為 OASIS 標準,并被廣泛應用于物聯(lián)網(wǎng)(IoT)和分布式系統中。
相關(guān)地址:https://mqtt.org/mqtt-specification/
如果需要實(shí)現瀏覽器中的音視頻能力,可以了解 WebRTC 規范。
WebRTC(Web Real-Time Communication)是一種開(kāi)放性的網(wǎng)絡(luò )技術(shù),旨在使瀏覽器和移動(dòng)應用能夠實(shí)現實(shí)時(shí)音頻、視頻通話(huà)以及點(diǎn)對點(diǎn)數據傳輸,無(wú)需借助第三方插件或應用程序。WebRTC 由于是關(guān)于 Web 的技術(shù),所以由 w3 組織制定。
相關(guān)地址:https://www.w3.org/TR/webrtc/
一般來(lái)說(shuō),編程語(yǔ)言的規范和實(shí)現是分開(kāi)的。例如 C 語(yǔ)言的實(shí)現微軟、Borland 等廠(chǎng)商的實(shí)現;Sql 也有不同的 DBMS 的實(shí)現;Java 有 Oracle 和 OpenJDK 的實(shí)現;Javascript 有多套實(shí)現。
C 語(yǔ)言規范 https://www.iso-9899.info/wiki/The_Standard
SQL 規范 https://www.iso.org/standard/76583.html
Java 規范 https://docs.oracle.com/javase/specs/
Javascript 規范 https://www.ecma-international.org/publications-and-standards/standards/ecma-262/
Shell 編程語(yǔ)言規范 https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
計算機科學(xué)中的技術(shù)標準可能離我們太遠,架構師需要關(guān)注工程應用中的標準,下面整理了一些工程應用中你能用的標準。
在單點(diǎn)登錄和開(kāi)放授權協(xié)議方面,可以使用 OAuth 和 Saml 協(xié)議。OAuth 基于 Web token 實(shí)現分布式授權,而 Saml 通過(guò) XML 實(shí)現。
使用標準的開(kāi)放授權協(xié)議可以幫助我們減少開(kāi)發(fā)成本,提高系統對接的便利性。
相關(guān)地址:
Saml http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html
OAuth https://datatracker.ietf.org/doc/html/rfc6749
RFC 3986 規范的標題是 Uniform Resource Identifier (URI): Generic Syntax,中文名是統一資源定位符,所以 URI 的用途并不僅僅用于網(wǎng)頁(yè)。
在很多方面都可以使用 URI 規范。例如,可以標記 APP 的窗口資源,來(lái)實(shí)現一種叫做 Deep Link 的技術(shù),可以從網(wǎng)頁(yè)打開(kāi)原生 APP 的某個(gè)窗口。
相關(guān)地址:https://datatracker.ietf.org/doc/html/rfc3986
在 Java 中數據校驗的規范化是 JCP 一個(gè)典型的實(shí)踐,從最早的 JSR 349 到 JSR 303,目前已經(jīng)發(fā)展到了 Bean validation 2.0,并開(kāi)始支持 2SE。Hibernate 最新的 validator 已經(jīng)開(kāi)始支持 2.0 的驗證規范。早期講 Java 的書(shū)談到使用 JSR 驗證容易讓人感到困惑,JSR 只是驗證規范,數據驗證是由其他的驗證器實(shí)現的。同時(shí)一些非 Java 的驗證框架也在參考實(shí)現 JCP 的標準。
相關(guān)地址:https://beanvalidation.org/2.0/spec/
API JPA 定義了對象關(guān)系映射以及如何持久化到數據中,JPA、ORM、Hibernate 在 Java 開(kāi)發(fā)時(shí)是非常容易被混淆的概念。其中 ORM 只是一個(gè)對象映射的概念,JPA 規范了 ORM、數據訪(fǎng)問(wèn) API、查詢(xún)語(yǔ)言,Hibernate 對 JPA 進(jìn)行了實(shí)現,JPA 其他的實(shí)現還有 Open JPA 和 Eclipse Link 等技術(shù)。
相關(guān)地址:https://download.oracle.com/otn-pub/jcp/persistence-2_2-mrel-spec/JavaPersistence.pdf
JAX-RS 定義了 Restful API 構建相關(guān)的規范,包括一些常見(jiàn)的注解都來(lái)源這個(gè)規范,例如 @Path @GET 等,關(guān)于 JAX-RS 的實(shí)現除了 Spring 全家桶之外,還有 Jersey、RESTeasy 等實(shí)現。
相關(guān)地址:https://download.oracle.com/otn-pub/jcp/jaxrs-2_0_rev_A-mrel-eval-spec/jsr339-jaxrs-2.0-final-spec.pdf
Servlet 可以說(shuō)是 J2EE 中最重要的規范之一,如果不去看 servlet 的規范很難理解 servlet 到底是什么。這也是很多公司面試一般都會(huì )問(wèn)的問(wèn)題。servlet 定義了 J2EE 應用和服務(wù)器容器之間的約定,所以在開(kāi)發(fā)過(guò)程中就需要特別注意 web 容器提供的額外的特性,造成耦合。
相關(guān)地址:https://download.oracle.com/otndocs/jcp/servlet-4-final-spec/index.html
ECMA 下一個(gè)非常重要的規范,簡(jiǎn)稱(chēng) OOXML,現已成為國際文檔格式標準。如果在項目中需要使用編程的方式解析 word 文檔,參考這個(gè)規范下的實(shí)現。
相關(guān)地址:https://www.ecma-international.org/publications-and-standards/standards/ecma-376/
RESTFul API 并沒(méi)有定義如何設計詳細的 API 消息體,所以你可以參考一些規范來(lái)更好的設計 API。jsonapi.org 提供了一套不錯的 API 設計規范,可以參考。
相關(guān)地址:https://jsonapi.org/
一般時(shí)間的表達、格式化、頻率表達、區間表達、時(shí)區等時(shí)間相關(guān)的內容都可以參考 ISO 8601 規范,不僅可以減少關(guān)于時(shí)間設計的心智負擔,還可以復用大量 JDK 中關(guān)于時(shí)間的實(shí)現。
在計算機中,時(shí)間的表示被 RFC 3339 進(jìn)一步規范化,包括時(shí)間格式化的代號,表達范圍和限制條件。
相關(guān)地址:
RFC 3339 https://www.iso.org/iso-8601-date-and-time-format.html
ISO 8601 https://datatracker.ietf.org/doc/html/rfc3339
從國際化的時(shí)間規范引申出來(lái)的還有幣種規范,可以使用標準的幣種規范作為系統之間通信的代號:
相關(guān)地址:ISO 4217 https://www.iso.org/iso-4217-currency-codes.html
媒體類(lèi)型是指常見(jiàn)文件的格式,通常被標記在文件頭信息中。應用開(kāi)發(fā)者可以定義自己的文件媒體格式,如果希望能被其它應用程序也能采納可以注冊到 iana.org 組織。
相關(guān)地址:https://datatracker.ietf.org/doc/html/rfc6838
在做技術(shù)方案時(shí),需要一些標準化的規范表達 API 設計,這時(shí)可以使用 OpenAPI 和 Raml。OpenAPI 的前身就是 Swagger 的 API 定義格式。
相關(guān)地址:
OpenAPI https://spec.openapis.org/oas/latest.html
raml https://raml.org/
在 HTML 或者 XML 中,為了讓標記語(yǔ)言更為語(yǔ)義化,用于第三方應用程序識別,出現了微格式這類(lèi)規范。例如,航空公司通過(guò) HTML 格式的郵件發(fā)送了機票信息,郵件客戶(hù)端可以通過(guò)微格式識別其中的關(guān)鍵信息,并添加到提示列表中。
另外的用途是瀏覽器可以識別微格式,并記錄用戶(hù)的表單輸入,減少用戶(hù)的重復輸入。
相關(guān)地址:https://microformats.org/wiki/metaformats
在企業(yè)級的架構規劃工作中,C4 模型是一種輕量級的表達架構視圖的規范。重量級的架構規范可以參考企業(yè)架構 Togaf,對于垂直領(lǐng)域也有類(lèi)似 BIAN 對銀行、金融領(lǐng)域的架構規范。
C4 模型 https://c4model.com/
Togaf https://www.opengroup.org/togaf-standard-version-92-evaluation-license
BIAN https://bian.org/deliverables/bian-standards/
微服務(wù)架構中的一些術(shù)語(yǔ)定義目前沒(méi)有成熟的標準和規范,不過(guò)在網(wǎng)上流傳了一份《分布式應用架構通用技術(shù)能力要求 第1部分:微服務(wù)平臺》規范草案可以參考。
相關(guān)地址:https://www.doc88.com/p-31473045316869.html
我們很多時(shí)候需要編寫(xiě)一些給前端表單使用的查詢(xún) API,有時(shí)候可能會(huì )出現比較、排序等需求,我們可以參考 scim-query-syntax 定義的一套規范,用來(lái)表達參數的格式。
例如屬性的比較 equal、not equal、contains、starts with 等,可以被縮寫(xiě)為 eq、ne、co、sw。
相關(guān)地址:https://bookstack.soffid.com/books/scim/page/scim-query-syntax
還有一些規范可能不直接被應用于項目中,而是作為日常工具使用存在。
BPMN 由OMG(Object Management Group)制定和維護,它提供了一種統一的方法來(lái)描述和可視化業(yè)務(wù)流程,使業(yè)務(wù)分析師、流程設計師和技術(shù)人員能夠更好地理解、溝通和優(yōu)化業(yè)務(wù)流程。
相關(guān)地址:https://www.bpmn.org/
UML 是由 OMG 制定的一種用于軟件工程和系統設計的標準化圖形化建模語(yǔ)言。UML 定義了常見(jiàn)規范化的模型繪圖方式,但又不僅僅只是繪圖。OMG 的目標其實(shí)是利用 UML,標準化的闡述面向對象相關(guān)概念,因此可以看做面向對象最權威的材料。
相關(guān)地址:https://www.omg.org/spec/UML/2.5/PDF
我們可能會(huì )在日常工作中使用 Markdown 編輯文檔,Markdown 有很多變種導致各個(gè)渲染器或者平臺不兼容,從而衍生出 commonmark 這個(gè) Markdown 規范。
相關(guān)地址:https://commonmark.org/
目前國內對技術(shù)規范的采納和應用還不成熟,而對于國外的應用來(lái)說(shuō),基本上會(huì )優(yōu)先基于規范來(lái)進(jìn)行架構設計。
例如,認證協(xié)議、LDAP 等規范被海外廠(chǎng)商廣泛采納,但是國內應用大都使用了自己的私有 API。
隨著(zhù)國內 IT 行業(yè)發(fā)展,技術(shù)規范的采用、建設應該會(huì )是一個(gè)趨勢,盡可能采用技術(shù)規范也能提高架構師的競爭力。
RDP 遠程桌面協(xié)議 https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/5073f4ed-1e93-45e1-b039-6e30c385867c
YANG 網(wǎng)絡(luò )配置模型 https://datatracker.ietf.org/doc/html/rfc6020
POSIX 協(xié)議 https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/~~
國家行政區劃 http://www.stats.gov.cn/sj/tjbz/tjyqhdmhcxhfdm/2022/51.html
聯(lián)系客服