上一篇文章“App前端,,Web前端,,后端,微信小程序到底該學(xué)啥,?”發(fā)表之后有部分同學(xué)反饋?zhàn)约阂磸氖虑岸?,要么后端,?duì)前后端之間如何交互比較感興趣,,這篇文章就給大家介紹一下后臺(tái)與客戶(hù)端是如何交互的,。 客戶(hù)端與服務(wù)器的交互一般遵循以下原則:跨平臺(tái)、傳輸數(shù)據(jù)格式標(biāo)準(zhǔn),、安全可靠,。目前絕大多數(shù)的App都有android和iOS兩個(gè)版本,因此同樣的數(shù)據(jù),,不同平臺(tái)的客戶(hù)端請(qǐng)求,,返回的結(jié)果應(yīng)該一致,。客戶(hù)端與server之間通信無(wú)非就兩種協(xié)議HTTP和TCP,,然后根據(jù)這兩類(lèi)衍生出其他的通信方式,。TCP的典型場(chǎng)景是server與客戶(hù)端需要保持長(zhǎng)連接,二者進(jìn)行三次握手之后建立連接,,有一方斷開(kāi),,該次連接結(jié)束。 HTTP連接最顯著的特點(diǎn)是客戶(hù)端發(fā)送的每次請(qǐng)求都需要服務(wù)器回送響應(yīng),,在請(qǐng)求結(jié)束后,,會(huì)主動(dòng)釋放連接。大部分的客戶(hù)端和server通信采用的是這種方式,,隨著HTTPS的普及,,安全性也越來(lái)越受到重視,后續(xù)我們會(huì)寫(xiě)一篇HTTPS建立連接的過(guò)程,。在網(wǎng)絡(luò)請(qǐng)求調(diào)試的過(guò)程中,,需要經(jīng)常抓包分析報(bào)文是否正確,在這兒推薦Wireshark抓包軟件,,在mac上很好用,,當(dāng)然也有其他工具,建議大家做網(wǎng)絡(luò)請(qǐng)求試著研究一下報(bào)文,,對(duì)網(wǎng)絡(luò)通信能有更深的理解,。 一、Restful框架 Restful架構(gòu),,是目前最流行的一種客戶(hù)端與服務(wù)器交互的架構(gòu),。REST這個(gè)詞,最早是Roy Thomas Fielding在博士論文中提出的,。 REST是Representational State Transfer 的縮寫(xiě),,顧名思義“表現(xiàn)層狀態(tài)轉(zhuǎn)化'。網(wǎng)上有很多關(guān)于這個(gè)詞語(yǔ)的詳細(xì)解釋?zhuān)ㄋ椎闹v: 1)每一個(gè)URI代表一種資源,; 2)客戶(hù)端和服務(wù)器之間,,傳遞這種資源的某種表現(xiàn)層; 3)客戶(hù)端通過(guò)HTTP動(dòng)詞,,對(duì)服務(wù)器端資源進(jìn)行操作,,實(shí)現(xiàn)'表現(xiàn)層狀態(tài)轉(zhuǎn)化'。 Restful無(wú)狀態(tài),,在調(diào)用一個(gè)接口的時(shí)候,,不需要考慮上下文與當(dāng)前狀態(tài),極大的降低了復(fù)雜度,,分離了API結(jié)構(gòu)和邏輯資源,。采用REST架構(gòu)風(fēng)格,,對(duì)于開(kāi)發(fā)、測(cè)試,、運(yùn)維人員來(lái)說(shuō),,都會(huì)更簡(jiǎn)單。當(dāng)然缺點(diǎn)也是有的,,這里不在詳細(xì)闡述。在我們的項(xiàng)目中,,使用REST風(fēng)格完成客戶(hù)端和服務(wù)器json數(shù)據(jù)的交互,。 二、構(gòu)造Restful 我們的服務(wù)器端Restful框架通過(guò)Spring Boot搭建,。Spring Boot也是這兩年很火的微框架,,按照官方的說(shuō)法,Spring Boot使開(kāi)發(fā)獨(dú)立的,,產(chǎn)品級(jí)別的基于Spring的應(yīng)用變得非常簡(jiǎn)單,,為所有的Spring開(kāi)發(fā)提供一個(gè)從根本上更快的和廣泛使用的入門(mén)經(jīng)驗(yàn)。開(kāi)箱即用,,但你可以通過(guò)不采用默認(rèn)設(shè)置來(lái)擺脫這種方式,。提供一系列大型項(xiàng)目常用的非功能性特征(比如,內(nèi)嵌服務(wù)器,,安全,,指標(biāo),健康檢測(cè),,外部化配置),。最重要的是不需要代碼生成及XML配置,省了很多時(shí)間和精力,。 接下來(lái)我們來(lái)創(chuàng)建基于Spring Boot的Restful風(fēng)格的demo,。首先需要準(zhǔn)備好環(huán)境,安裝JDK和MyEclipse,。 我的MyEclipse版本如上圖,,安裝好之后自帶了maven,如果對(duì)maven不了解,,請(qǐng)搜索相關(guān)資料,,了解它的使用方法。 (1)MyEclipse->File->New->Other,選擇Maven Project,,創(chuàng)建demo工程,。 創(chuàng)建完工程后,在我們的目錄下會(huì)看到pom.xml文件,,該文件用于maven構(gòu)建項(xiàng)目,,我們打開(kāi)后編輯此文件,,添加如下內(nèi)容: 然后保存,并右鍵選擇項(xiàng)目->Maven4MyEclipse->Update Project,,加載依賴(lài),,完成后目錄結(jié)構(gòu)如下: 這樣,我們的maven web項(xiàng)目就支持了spring boot,。 三,、基于Spring Boot的Demo 1.首先在配置好Spring Boot依賴(lài)的工程中,新建一個(gè)java類(lèi),,如下,,命名為RestfulDemo: 工程目錄 RestfulDemo類(lèi) 2.接下來(lái)重點(diǎn)講解這個(gè)類(lèi)中的每個(gè)細(xì)節(jié)。 (1)@RestController和@RequestMapping注解 RestfulDemo類(lèi)的上面使用的第一個(gè)注解是@RestController,,它通常被稱(chēng)為一個(gè)構(gòu)造型(stereotype)注解,。RestController本身不是Spring Boot特有的,它繼承自@Controller注解,。Controller用來(lái)標(biāo)識(shí)當(dāng)前類(lèi)是一個(gè)控制器servlet,。在本示例中,我們的類(lèi)是一個(gè)web @Controller,,所以當(dāng)處理進(jìn)來(lái)的web請(qǐng)求時(shí),,Spring會(huì)詢(xún)問(wèn)它。RestController相當(dāng)于@ResponseBody + @Controller,。ResponseBody用于將Controller的方法返回的對(duì)象,,通過(guò)適當(dāng)?shù)腍ttpMessageConverter轉(zhuǎn)換為指定格式后,寫(xiě)入到Response對(duì)象的body數(shù)據(jù)區(qū),,當(dāng)返回的數(shù)據(jù)是json,、xml等時(shí)使用。 (2)@RequestMapping注解 RequestMapping注解主要用來(lái)提供路由信息,,它告訴Spring任何來(lái)自'/'路徑的HTTP請(qǐng)求都應(yīng)該被映射到home方法,。RequestMapping注解有六個(gè)屬性,下面我們把她分成三類(lèi)進(jìn)行說(shuō)明,。 1) value,, method value: 指定請(qǐng)求的實(shí)際地址; method:指定請(qǐng)求的method類(lèi)型,, GET,、POST、PUT,、DELETE等,; 2) consumes,produces consumes: 指定處理請(qǐng)求的提交內(nèi)容類(lèi)型(Content-Type),,例如application/json, text/html; produces: 指定返回的內(nèi)容類(lèi)型,,僅當(dāng)request請(qǐng)求頭中的(Accept)類(lèi)型中包含該指定類(lèi)型才返回,; 3) params,headers params: 指定request中必須包含某些參數(shù)值是,,才讓該方法處理,。 headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請(qǐng)求,。 (3)@EnableAutoConfiguration注解 EnableAutoConfiguration是Spring Boot根據(jù)我們?cè)趐om中設(shè)置的依賴(lài)自動(dòng)配置spring,。由于spring-boot-starter-web添加了Tomcat和Spring MVC,所以auto-configuration默認(rèn)我們?cè)陂_(kāi)發(fā)一個(gè)web應(yīng)用并相應(yīng)地對(duì)Spring進(jìn)行設(shè)置,,當(dāng)然我們也可以手動(dòng)配置,。 (4)SpringApplication類(lèi) 在main方法通過(guò)調(diào)用SpringApplication類(lèi)的run,將業(yè)務(wù)委托給了Spring Boot,,啟動(dòng)Spring,相應(yīng)地啟動(dòng)被自動(dòng)配置的Tomcat web服務(wù)器,。 3.應(yīng)用程序的運(yùn)行 Spring Boot的運(yùn)行有幾種方式,,在這里我介紹兩種。 (1)MyEclipse啟動(dòng) 右鍵單擊RestfulDemo類(lèi)->Run As->Java Application 啟動(dòng)完成 如果看到圖中紅色的提示語(yǔ),,說(shuō)明項(xiàng)目正常啟動(dòng),,此時(shí)在瀏覽器輸入http://localhost:8080/,就能看到“Hello World!”的輸出,。 (2)使用maven命令行啟動(dòng) 當(dāng)前我們的pc如果配置了maven,,也可以在命令行下啟動(dòng)。由于使用了spring-boot-starter-parent的依賴(lài),,這樣我們就有了一個(gè)非常有用的run目標(biāo),。命令行進(jìn)入到工程根目錄,輸入 mvn spring-boot:run來(lái)啟動(dòng)應(yīng)用: maven會(huì)下載一些依賴(lài),,初始化組件,,最終也會(huì)打印出Tomcat啟動(dòng)成功的信息。 至此,,Spring Boot的Hello World應(yīng)用完美啟動(dòng),,Restful的實(shí)現(xiàn)類(lèi)似我們的demo,由于篇幅過(guò)長(zhǎng),,將在后續(xù)章節(jié)詳細(xì)介紹,。 如果您喜歡我們的文章,點(diǎn)贊就好,,您的認(rèn)可是我分享的最大動(dòng)力,。 |
|
來(lái)自: hwjcccn > 《待分類(lèi)》