OpenAPI 很難
“這能有多難?”

原標(biāo)題:OpenAPI 很難
文章來(lái)源:AI前線
內(nèi)容字?jǐn)?shù):5533字
OpenAPI:比你想象的難得多
本文講述了作者quobix構(gòu)建一個(gè)完全理解OpenAPI的引擎、框架和平臺(tái)的經(jīng)歷,以及過(guò)程中遇到的巨大挑戰(zhàn)。作者最初低估了任務(wù)的難度,認(rèn)為僅僅是解析YAML或JSON格式的數(shù)據(jù),事實(shí)卻遠(yuǎn)非如此。
1. OpenAPI的復(fù)雜性
OpenAPI并非簡(jiǎn)單的語(yǔ)言,而是由多種其他語(yǔ)言(如YAML、JSON、JSON Schema)組成的復(fù)雜系統(tǒng)。YAML支持錨點(diǎn)、別名和有序列表,而JSON則不支持,這導(dǎo)致了兼容性問(wèn)題。JSON Schema本身就是一個(gè)復(fù)雜的標(biāo)準(zhǔn),JSON指針的處理也增加了難度。這種多重語(yǔ)言的組合使得OpenAPI的解析和處理變得異常棘手。
2. 解析與編譯的挑戰(zhàn)
簡(jiǎn)單的JSON解析在遇到重復(fù)數(shù)據(jù)和引用(JSON指針)時(shí)就會(huì)失效。工程師需要構(gòu)建查找表或哈希表來(lái)索引和拼接引用,處理循環(huán)引用造成的無(wú)限循環(huán)或堆棧溢出問(wèn)題。作者指出,這實(shí)際上需要編寫(xiě)解釋器和編譯器,而非簡(jiǎn)單的解析器,這大大增加了任務(wù)的復(fù)雜性。許多工程師最終放棄自行開(kāi)發(fā),轉(zhuǎn)而使用現(xiàn)成的庫(kù),但這些庫(kù)往往功能不完善。
3. Rolodex系統(tǒng)的構(gòu)建
為了解決引用和文件管理問(wèn)題,作者構(gòu)建了“Rolodex”系統(tǒng),這是一個(gè)復(fù)雜的索引系統(tǒng),用于在龐大的文件網(wǎng)絡(luò)中查找和管理指針。這個(gè)系統(tǒng)的構(gòu)建耗費(fèi)了大量時(shí)間和精力,最終效果卻并不如預(yù)期理想,這體現(xiàn)了在處理復(fù)雜系統(tǒng)時(shí),過(guò)度設(shè)計(jì)可能帶來(lái)的問(wèn)題。
4. OpenAPI Doctor的強(qiáng)大功能
作者展示了其構(gòu)建的OpenAPI Doctor工具,該工具能夠高效地處理和可視化OpenAPI規(guī)范,包括處理大量的引用和文件。用戶(hù)可以輕松跳轉(zhuǎn)到文檔中的不同位置,查看和診斷引用,探索復(fù)雜的規(guī)范結(jié)構(gòu),這得益于底層Rolodex系統(tǒng)的支持。
5. 處理大型規(guī)范的挑戰(zhàn)
作者用DigitalOcean OpenAPI規(guī)范(1600多個(gè)文件,數(shù)十萬(wàn)個(gè)引用)來(lái)測(cè)試OpenAPI Doctor,證明了該工具能夠處理超大型規(guī)范,而大多數(shù)其他工具則會(huì)崩潰或失敗。這突顯了OpenAPI Doctor在處理復(fù)雜、大型OpenAPI規(guī)范方面的優(yōu)勢(shì)。
6. 結(jié)論
本文通過(guò)作者的親身經(jīng)歷,揭示了構(gòu)建一個(gè)完全理解OpenAPI的引擎的巨大挑戰(zhàn)。這不僅需要深入理解多種語(yǔ)言和規(guī)范,還需要處理復(fù)雜的引用和循環(huán)引用問(wèn)題。OpenAPI Doctor的成功,證明了通過(guò)精心設(shè)計(jì)和強(qiáng)大的底層架構(gòu),可以有效地應(yīng)對(duì)這些挑戰(zhàn)。
聯(lián)系作者
文章來(lái)源:AI前線
作者微信:
作者簡(jiǎn)介:面向AI愛(ài)好者、開(kāi)發(fā)者和科學(xué)家,提供大模型最新資訊、AI技術(shù)分享干貨、一線業(yè)界實(shí)踐案例,助你全面擁抱AIGC。

粵公網(wǎng)安備 44011502001135號(hào)