2014 在 Go 中構(gòu)建套接字服務(wù)器幾年后,,我突然需要為 Javascript 和 Objective-C 客戶端構(gòu)建一些基于 HTTP 的 REST API,。擁有 Rails 背景,我對(duì)通用 MVC 框架抱有很高的期望,。然而,,像 Ruby 中的 Sinatra 這樣的框架在簡單 REST 端點(diǎn)的簡單性之間取得了很好的平衡。為此我選擇繼續(xù)使用 Go,,因?yàn)樗男阅芎挽o態(tài)類型,,我認(rèn)為在不需要在傳統(tǒng) Web 應(yīng)用程序樣式開發(fā)中進(jìn)行大量模板和表單的項(xiàng)目中會(huì)長期勝出。 比戈Beego看起來是一個(gè)功能齊全的 MVC 框架,,可能與 Rails 處于同一級(jí)別,。它不會(huì)試圖變小。它有自己的日志庫,、ORM 和 Web 框架,。 社區(qū):Beego社區(qū)相當(dāng)大。然而,,使用它的大多數(shù)公司似乎都是中國人,,所以這個(gè)社區(qū)肯定存在語言障礙。由于大型中文站點(diǎn)使用該框架,,因此它可能可以擴(kuò)展到大量流量,。 最大的特點(diǎn):由于這是一個(gè)成熟的 MVC 框架,您不必在網(wǎng)上搜索大量庫。很多問題馬上就消失了,,例如要使用什么日志框架以及如何構(gòu)建應(yīng)用程序,。這些功能可以在新項(xiàng)目開始時(shí)節(jié)省大量時(shí)間。 馬提尼Martini受 Sinatra 的啟發(fā),,具有非常輕量級(jí)框架的感覺。它處理基本的事情,,比如路由,、異常處理和做中間件的常用方法。最初在 Go 社區(qū)中有一些強(qiáng)烈反對(duì),,因?yàn)樗泻芏喾瓷浼夹g(shù)來清除路由中的 API 結(jié)構(gòu),。它可以做很酷的事情,比如根據(jù)類型將不同的數(shù)據(jù)集動(dòng)態(tài)注入到處理程序中(請(qǐng)參閱最佳功能示例),。這種在 Ruby 框架中很常見的“魔法”在 Go 社區(qū)中引起了很大的轟動(dòng),。以至于作者正在研究一個(gè)更簡單的框架,稱為Negroni,。然而,,在我看來,它并沒有像馬提尼那樣提供那么多的價(jià)值,。 社區(qū):盡管是一個(gè)小社區(qū),,但它似乎仍然非常活躍,,大約有 20 個(gè)左右的活躍插件,,我也有一個(gè)可以集成到 GetSentry源中。鑒于框架的口頭禪是小,,所以沒有那么多需要添加的東西是有道理的,。 最大的特點(diǎn):由于框架使用反射,它可以動(dòng)態(tài)地將數(shù)據(jù)插入處理函數(shù)中,,根據(jù)您的需要,,請(qǐng)參見下面的示例。您甚至可以動(dòng)態(tài)添加新服務(wù),。
大猩猩Gorilla可能是最大和運(yùn)行時(shí)間最長的 Gi Web 框架,,它是一個(gè)模塊化框架,可以為用戶提供盡可能多或盡可能少的資源,。例如,,在一個(gè)項(xiàng)目中,我們只是將 Sessions 包取出并重新用于 Auth,。我認(rèn)為 Gorilla 很好,,因?yàn)楹芏嘟M件都可以通過直接 社區(qū):Gorilla 可能擁有所有框架中最大的英語社區(qū)。它顯示了 GitHub 上可用的博客文章和中間件的剪切量,。 最大的特點(diǎn):我認(rèn)為最近有很多關(guān)于使用 Web 套接字動(dòng)態(tài)更新Meteor.js 等框架中的應(yīng)用程序的炒作,。Gorilla 具有開箱即用的 Web 套接字,因此您可以將與 Web 套接字完全相同的代碼連接到 REST 端點(diǎn),,而無需使用像 Pusher 這樣的第三方服務(wù),。 圍棋我真的很想至少簡要地談?wù)?/font>這個(gè)框架。我認(rèn)為 net/http 的最大問題之一是無法將上下文傳遞給您的處理程序鏈,。因此,,您無法在中間件和處理程序之間輕松共享數(shù)據(jù)或事務(wù)。這個(gè)框架的目標(biāo)是超級(jí)最小化并解決這個(gè)問題,。讓我給你看幾個(gè)簡單的例子 讓我們舉一個(gè)典型的例子,,其中一些中間件授權(quán)用戶,然后將用戶對(duì)象放入會(huì)話中,。
網(wǎng)絡(luò)/HTTP如果您閱讀 Go 郵件列表,,您可能會(huì)被告知這是您需要的唯一框架。在某些方面它是真實(shí)的,。我們僅使用 net/http 構(gòu)建了一個(gè)完整的 XMPP 服務(wù)器,,并且運(yùn)行良好。然而,,復(fù)雜的 Web 應(yīng)用程序往往需要中間件,。有一些有趣的項(xiàng)目,例如interpose,,它允許您將來自其他 GO Web 框架的中間件與標(biāo)準(zhǔn) net/http 混合和匹配,。 社區(qū)社區(qū)顯然非常大,因?yàn)橛脩艨梢灾赜脕碜栽S多其他項(xiàng)目的位,。然而,,它的接口非常有限,并且并沒有真正定義任何擴(kuò)展中間件的標(biāo)準(zhǔn)方式,。開箱即用的路由非常薄弱,,因此您通常使用它的框架。 結(jié)論我們嘗試了幾個(gè)這樣的框架來感受一下,。我們將 Martini 用于我們的 REST API,。雖然我們喜歡它,但我認(rèn)為將來我會(huì)嘗試使用 GoCraft,,因?yàn)樗p量級(jí),,但解決了與 Martini 相同的上下文問題。也許我們會(huì)采用一些 Martini 中間件作為實(shí)驗(yàn),。最初我們嘗試將 Gorilla 用于我們的管理系統(tǒng),,我認(rèn)為這最終是一個(gè)大錯(cuò)誤,。它確實(shí)缺乏 RAILS 是多么固執(zhí)己見,以及許多用于制作真正基本的千篇一律的網(wǎng)絡(luò)應(yīng)用程序的小功能,。對(duì)于直接基于傳統(tǒng)形式的 CRUD 應(yīng)用程序,,我認(rèn)為我們將來會(huì)嚴(yán)重傾向于 Beego,因?yàn)樗娴母杏X像是一個(gè)完整的 MVC 功能集,。 Matthew是一名黑客,,他經(jīng)常在紐約和曼谷之間奔波。他為湯森路透編寫了大型 XMPP 服務(wù)器,,將 Bloomberg.com 移植到 Ruby on Rails,,甚至為 Gucci 從事電子商務(wù)工作。在他的許多合同之間,,他經(jīng)營著一家名為 Langfight 的新創(chuàng)業(yè)公司。他經(jīng)營著曼谷 GO Lang Meetup,,并發(fā)表了一篇名為 DistributedAgile 的關(guān)于外包的有趣方面的博客,。博客上有一本關(guān)于外包的免費(fèi)電子書。你可以在推特上關(guān)注他@kanwisher
通過Flickr Creative Commons 提供的 特色圖片 |
|