传统的Web应用程序和RESTful API
如今,當(dāng)我們構(gòu)建Web應(yīng)用程序時(shí),將所有功能公開(kāi)為RESTful API,然后自己使用它是一種最佳實(shí)踐。 這通常與使用繁重的javascript的豐富前端配合使用,例如Angular / Ember / Backbone / React。
但是沉重的前端似乎不是一個(gè)很好的默認(rèn)值–需要概念上沉重的javascript框架開(kāi)銷(xiāo)的應(yīng)用程序?qū)嶋H上并不是絕大多數(shù)。 網(wǎng)絡(luò)雖然復(fù)雜得多,但仍然不僅僅是單頁(yè)應(yīng)用程序。 更不用說(shuō),如果您正在編寫(xiě)靜態(tài)類(lèi)型的后端,則可能需要一個(gè)專(zhuān)用的javascript團(tuán)隊(duì)(不一定是個(gè)好主意,尤其是在小型公司/初創(chuàng)企業(yè)中),或者您必須在其中編寫(xiě)……不太令人愉快語(yǔ)言。 老實(shí)說(shuō),我的瀏覽器到處都在使用所有不必要JavaScript,但這是一個(gè)獨(dú)立的故事。
讓自己使用自己的RESTful API的另一種選擇是擁有一個(gè)“ Web”模塊,該模塊調(diào)用您的“后端”模塊。 這可能是一個(gè)好主意,尤其是在您擁有不同專(zhuān)業(yè)的不同團(tuán)隊(duì)的情況下,但是為了分離而引入如此多的通信開(kāi)銷(xiāo)似乎至少應(yīng)該在操作前三思。 更不用說(shuō)現(xiàn)實(shí)中的發(fā)布周期通常是捆綁在一起的,因?yàn)槟枰冻鲱~外的努力才能使“ Web”和“后端”保持適當(dāng)?shù)耐?#xff08;“ Web”不請(qǐng)求“后端”尚未提供的服務(wù),或者“后端”未提供“網(wǎng)絡(luò)”不期望的修改后的響應(yīng)模型)。
正如我對(duì)整體的辯護(hù)一樣 ,我顯然傾向于整體應(yīng)用。 我不會(huì)重復(fù)另一篇文章,但是我的想法是,即使應(yīng)用程序在單個(gè)運(yùn)行時(shí)(例如JVM)中運(yùn)行,也可以是模塊化的。 有了您的“ Web”軟件包,有了您的“服務(wù)”軟件包,它們可以獨(dú)立開(kāi)發(fā),甚至可以作為單獨(dú)的(子)項(xiàng)目編譯成一個(gè)可部署的工件。
因此,如果您想要一個(gè)傳統(tǒng)的Web應(yīng)用程序-請(qǐng)求/響應(yīng),一點(diǎn)點(diǎn)的ajax,但又沒(méi)有繁瑣的javascript幻想,也沒(méi)有架構(gòu)開(kāi)銷(xiāo),并且仍然想將服務(wù)公開(kāi)為RESTful API,該怎么辦?
您的Web層-控制器,使用來(lái)自表單提交的請(qǐng)求參數(shù)并使用模板引擎呈現(xiàn)響應(yīng)-通常與您的服務(wù)層通信。 因此,對(duì)于您的Web層,服務(wù)層只是一個(gè)API。 它通過(guò)JVM內(nèi)部的方法調(diào)用來(lái)使用它。 但這不是使用服務(wù)層的唯一方法。 諸如Spring-MVC,Jersey等框架允許注釋任何方法并將其作為RESTful服務(wù)公開(kāi)。 通常,服務(wù)層不公開(kāi)為Web組件,但可以公開(kāi)。 因此–您通過(guò)方法調(diào)用使用了服務(wù)層API,其他所有人都通過(guò)HTTP使用了它。 相同的定義,相同的輸出,相同的安全性。 而且,您不需要單獨(dú)的傳遞層即可擁有RESTful API。
從理論上講,這聽(tīng)起來(lái)不錯(cuò)。 在實(shí)踐中,將方法變成端點(diǎn)的注釋可能會(huì)帶來(lái)問(wèn)題-序列化/反序列化是否正常工作,標(biāo)題是否正確處理,身份驗(yàn)證是否正確。 而且,如果僅在單個(gè)JVM中使用方法,您將不會(huì)知道這些方法不起作用。 是的,您會(huì)知道它們?cè)跇I(yè)務(wù)邏輯方面可以正常工作,但是啟用RESTful的部分可能有所不同。
這就是為什么您需要全面接受驗(yàn)收測(cè)試的原因。 諸如黃瓜/ JBehave之類(lèi)的東西可以測(cè)試所有暴露的端點(diǎn)。 這樣,您將確保RESTful方面和業(yè)務(wù)邏輯均正常運(yùn)行。 無(wú)論如何,實(shí)際上實(shí)際上是應(yīng)該存在的東西,因此沒(méi)有開(kāi)銷(xiāo)。
另一個(gè)問(wèn)題是您可能希望將API與主應(yīng)用程序分開(kāi)部署。 https://yoursite.com和https://api.yoursite.com。 您可能只希望在一個(gè)集群中運(yùn)行API,而在另一個(gè)集群中運(yùn)行您的應(yīng)用程序。 沒(méi)問(wèn)題–您可以使用配置開(kāi)關(guān)和應(yīng)用程序簡(jiǎn)單地禁用“ Web”部分,并多次部署相同的工件。
我不得不承認(rèn)我還沒(méi)有嘗試過(guò)這種方法,但是它看起來(lái)像是一種簡(jiǎn)單的方法,仍然可以正確覆蓋所有用例。
翻譯自: https://www.javacodegeeks.com/2016/09/traditional-web-apps-restful-apis.html
總結(jié)
以上是生活随笔為你收集整理的传统的Web应用程序和RESTful API的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 双11电商手机大战盘点,大神荣耀各成势力
- 下一篇: eclipse 重构_Eclipse对类