目錄
一.HTTP協(xié)議?
二.HTTP請(qǐng)求數(shù)據(jù)格式?
請(qǐng)求方式
三.后端響應(yīng)請(qǐng)求
基于SpringBoot響應(yīng)數(shù)據(jù)
請(qǐng)求響應(yīng)的參數(shù)類型
同一響應(yīng)格式
四.Apifox(postman)使用方法
一.HTTP協(xié)議?
HTTP(Hypertext Transfer Protocol,超文本傳輸協(xié)議)是一種用于傳輸超媒體文檔(如HTML)的應(yīng)用層協(xié)議。
HTTP的特點(diǎn)和工作原理如下:
- 無連接性:HTTP默認(rèn)是無連接的,即每個(gè)請(qǐng)求都是一個(gè)獨(dú)立的、獨(dú)立的事務(wù)。當(dāng)服務(wù)器完成對(duì)客戶端請(qǐng)求的響應(yīng)后,會(huì)立即關(guān)閉連接,不會(huì)保持長(zhǎng)連接。這種無連接性可以節(jié)省服務(wù)器資源,但也會(huì)增加每個(gè)請(qǐng)求的延遲,因?yàn)樾枰匦陆⑦B接。
- 無狀態(tài)性:HTTP協(xié)議是無狀態(tài)的,即服務(wù)器不會(huì)保存客戶端的狀態(tài)信息。每個(gè)請(qǐng)求都是獨(dú)立的,服務(wù)器不會(huì)記住之前的請(qǐng)求。為了處理這個(gè)問題,引入了Cookie和Session機(jī)制,通過在客戶端和服務(wù)器之間傳遞標(biāo)識(shí)符來跟蹤會(huì)話狀態(tài)。
- 請(qǐng)求-響應(yīng)模型:HTTP通過請(qǐng)求-響應(yīng)模型進(jìn)行通信??蛻舳税l(fā)送一個(gè)HTTP請(qǐng)求,服務(wù)器接收并處理請(qǐng)求,并返回一個(gè)HTTP響應(yīng)。響應(yīng)包含響應(yīng)狀態(tài)碼、響應(yīng)頭和響應(yīng)體。
- 支持多種請(qǐng)求方法:HTTP定義了多種請(qǐng)求方法,最常見的是GET和POST。其他常見的方法有PUT、DELETE、HEAD等,用于不同的操作和目的。
- 使用URL定位資源:HTTP使用統(tǒng)一資源定位符(URL)來標(biāo)識(shí)要獲取的資源地址。URL包含協(xié)議、主機(jī)名、端口號(hào)和資源路徑。
- 使用TCP作為傳輸協(xié)議:HTTP默認(rèn)使用TCP作為傳輸協(xié)議,通過建立TCP連接來傳輸數(shù)據(jù)。TCP提供可靠的、面向連接的通信。
HTTP協(xié)議由請(qǐng)求和響應(yīng)組成,它們都由報(bào)文(message)組成。報(bào)文包括報(bào)文頭和報(bào)文體。報(bào)文頭包含了請(qǐng)求/響應(yīng)行、報(bào)文頭部字段和換行符等信息。報(bào)文體包含了實(shí)際的請(qǐng)求/響應(yīng)數(shù)據(jù),如HTML文檔。
總結(jié)起來,HTTP是一種簡(jiǎn)單、靈活、無連接、無狀態(tài)的協(xié)議,廣泛應(yīng)用于Web開發(fā)和數(shù)據(jù)傳輸。它使用URL定位資源,通過請(qǐng)求-響應(yīng)模型進(jìn)行通信,使用TCP作為傳輸協(xié)議。
二.HTTP請(qǐng)求數(shù)據(jù)格式?
HTTP請(qǐng)求格式是由三部分組成:
-
請(qǐng)求行(Request line):包括請(qǐng)求方法、URL和協(xié)議版本。
- 請(qǐng)求方法(Request method):表示要執(zhí)行的操作,常見的方法有GET、POST、PUT、DELETE等。
- URL(Uniform Resource Locator):表示要訪問的資源路徑。
- 協(xié)議版本(Protocol version):表示使用的HTTP協(xié)議版本,如HTTP/1.1。
-
請(qǐng)求頭部(Request headers):包括一些關(guān)于請(qǐng)求的額外信息,如User-Agent、Content-Type、Authorization等。
-
請(qǐng)求體(Request body):用于傳輸請(qǐng)求的數(shù)據(jù),對(duì)于GET請(qǐng)求來說,請(qǐng)求體通常為空。
以下是一個(gè)示例HTTP請(qǐng)求的格式:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
在這個(gè)示例中:
請(qǐng)求行包括GET方法、URL為/index.html和協(xié)議版本為HTTP/1.1。
請(qǐng)求頭部包括Host、User-Agent、Accept、Accept-Encoding和Accept-Language等字段。
請(qǐng)求體為空,因?yàn)檫@是一個(gè)GET請(qǐng)求。
在上述實(shí)例中,申明了該請(qǐng)求是GET請(qǐng)求,我們最常用的請(qǐng)求方式就是GET和POST請(qǐng)求,二者在請(qǐng)求參數(shù)的傳遞中有很大不同,正如上述實(shí)例中所說:
GET請(qǐng)求的請(qǐng)求參數(shù)在請(qǐng)求行中,沒有請(qǐng)求體
POST請(qǐng)求的請(qǐng)求參數(shù)在請(qǐng)求體中
下方是另一個(gè)響應(yīng)的實(shí)例,在響應(yīng)體中則展示了許多參數(shù)的信息
請(qǐng)求方式
除了上述最常用的GET請(qǐng)求和POST請(qǐng)求外,在HTTP請(qǐng)求響應(yīng)中還有如下其他的請(qǐng)求方式
筆者這里選取一些相對(duì)常用的進(jìn)行介紹:
- GET:用于從服務(wù)器獲取資源,也是最常見的請(qǐng)求方式。GET請(qǐng)求將請(qǐng)求的參數(shù)附加在URL的末尾,發(fā)送給服務(wù)器。
- POST:用于向服務(wù)器提交數(shù)據(jù),一般用于發(fā)送表單數(shù)據(jù)。POST請(qǐng)求將請(qǐng)求的參數(shù)放在請(qǐng)求的主體中,而不是URL中。
- PUT:用于向服務(wù)器上傳文件或更新資源。PUT請(qǐng)求會(huì)將請(qǐng)求的數(shù)據(jù)存儲(chǔ)在服務(wù)器上指定的位置。
- DELETE:用于刪除服務(wù)器上的資源。
- HEAD:用于獲取服務(wù)器對(duì)資源的頭部信息,而不獲取實(shí)際的資源內(nèi)容。
- OPTIONS:用于獲取服務(wù)器支持的請(qǐng)求方法。
此外,對(duì)于其他一些不太常見的請(qǐng)求方式,比如PATCH、TRACE等,用途較少。
三.后端響應(yīng)請(qǐng)求
在現(xiàn)在主流的Web開發(fā)中,當(dāng)前端給后端發(fā)送請(qǐng)求后,后端就需要響應(yīng)這個(gè)請(qǐng)求,執(zhí)行對(duì)應(yīng)需要的操作,然后加工數(shù)據(jù)再返回給前端,從而達(dá)到前后端分離更高效的維護(hù)項(xiàng)目。
以下方代碼舉例,在傳統(tǒng)的Java編程中,我們需要在Controller方法中申明HttpServletRequest對(duì)象,然后通過這個(gè)對(duì)象去拿到前端傳給我們的數(shù)據(jù),最后返回給前端一個(gè)“OK”的字符串。
//原始方式
@RestController
public class RequestController {
@RequestMapping("/getNameAge") //請(qǐng)求數(shù)據(jù)的路徑
public String getNameAge(HttpServletRequest request) {
//獲取請(qǐng)求參數(shù)
String name = request.getParameter("name");
String ageStr = request.getParameter("age");
int age = Integer.parseInt(ageStr);
//... ...
return "OK";
}
}
基于SpringBoot響應(yīng)數(shù)據(jù)
但這樣的方式是非常低效的,我們可以通過使用Spring框架來幫助我們更高效的實(shí)現(xiàn)功能和需求
如下代碼,使用SpringBoot的話在代碼量上只管的就可以感受到快捷和輕便
//SpringBOot方式
@RestController
public class RequestController {
//簡(jiǎn)單類型參數(shù)
@RequestMapping("/getNameAge")
public String getNameAge(String name,Integer age) {
//... ...
return "OK";
}
使用SpringBoot的話只需要請(qǐng)求參數(shù)名和方法形式參數(shù)變量名相同,框架就會(huì)自動(dòng)幫我們進(jìn)行類型轉(zhuǎn)化并且拿到數(shù)據(jù)
請(qǐng)求響應(yīng)的參數(shù)類型
關(guān)于請(qǐng)求響應(yīng)的參數(shù)部分,既可以是非常簡(jiǎn)單的基礎(chǔ)類型,也可以是復(fù)雜的自定義類型
public class Student {
private String name;
private String age;
private Address address;
}
public class Address {
private String provice;
private String city;
}
//復(fù)雜類型參數(shù)
@RequestMapping("/getpojo")
public String getPojo(Student student) {
System.out.println(student);
return "OK";
}
比如我們這里,自定義一個(gè)學(xué)生類,再在參數(shù)中使用學(xué)生類對(duì)象進(jìn)行接收
此外數(shù)組和集合也是可以作為參數(shù)的
//數(shù)組參數(shù)
@RequestMapping("/array")
public String getArray(String[] hobby) {
System.out.println(Arrays.toString(hobby));
return "ok";
}
//集合參數(shù)
@RequestMapping("/list")
public String getList(@RequestParam List<String> hobby) {
System.out.println(hobby);
return "ok";
}
但是需要注意,在使用集合作為參數(shù)的時(shí)候,需要加上注解@RequestParam
日期時(shí)間參數(shù)在使用的時(shí)候同上,也要加上對(duì)應(yīng)的注解@DateTimeFormat
//日期時(shí)間參數(shù)
@RequestMapping("/getdatetime")
public String getTime(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime localDateTime) {
System.out.println(localDateTime);
return "OK";
}
還可以使用JSON格式的參數(shù),但需加上對(duì)應(yīng)的注解@RequestBody
//JSON參數(shù)
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody Student student) {
System.out.println(student);
return "OK";
}
路徑參數(shù)也是在開發(fā)中最常用的一種,加上注釋@PathVariable聲明它是路徑變量
//路徑參數(shù)
@RequestMapping("/path/{id}")
public String pathParam(@PathVariable Integer id) {
System.out.println(id);
return "OK";
}
存在多個(gè)路徑參數(shù)的時(shí)候,可以用? ‘/’? 將他們分開
//路徑參數(shù)
@RequestMapping("/path/{id}/{name}")
public String pathParam2(@PathVariable Integer id,@PathVariable String name) {
System.out.println(id + "--" +name);
return "OK";
}
同一響應(yīng)格式
在企業(yè)級(jí)開發(fā)中,為了方便閱讀和管理,我們一般要求返回統(tǒng)一的數(shù)據(jù)格式
如下,各個(gè)響應(yīng)的返回類型都不一樣,這是不便于我們管理和操作的
@RestController
public class ResponseController {
@RequestMapping("/hello")
public String hello() {
System.out.println("Hello world");
return "Hello world";
}
@RequestMapping("/getAddr")
public Address getAddress() {
Address address = new Address();
address.setProvice("河南省");
address.setCity("洛陽(yáng)市");
return address;
}
@RequestMapping("/listAddr")
public List<Address> listAddr() {
List<Address> list = new ArrayList<>();
Address addr1 = new Address();
addr1.setProvice("河南省");
addr1.setCity("洛陽(yáng)市");
Address addr2 = new Address();
addr2.setProvice("廣西省");
addr2.setCity("桂林市");
list.add(addr1);
list.add(addr2);
return list;
}
}
因此我們寫一個(gè)統(tǒng)一返回結(jié)果的類,然后將上述各自的返回值封裝成這個(gè)結(jié)果類,然后統(tǒng)一進(jìn)行返回?
經(jīng)過上述的改善后,我們就可以得到如下的代碼
@RestController
public class ResponseController {
@RequestMapping("/hello")
public Result hello() {
System.out.println("Hello world");
return new Result(1,"success","hello world");
}
@RequestMapping("/getAddr")
public Result getAddress() {
Address address = new Address();
address.setProvice("河南省");
address.setCity("洛陽(yáng)市");
return Result.success(address);
}
@RequestMapping("/listAddr")
public Result listAddr() {
List<Address> list = new ArrayList<>();
Address addr1 = new Address();
addr1.setProvice("河南省");
addr1.setCity("洛陽(yáng)市");
Address addr2 = new Address();
addr2.setProvice("廣西省");
addr2.setCity("桂林市");
list.add(addr1);
list.add(addr2);
return Result.success(list);
}
}
四.Apifox(postman)使用方法
對(duì)于上述HTTP的請(qǐng)求響應(yīng)和后端響應(yīng)數(shù)據(jù)我們有了一些基礎(chǔ)的理解后,我們就可以通過一些工具來幫助我們測(cè)試,我們能否成功的向后端發(fā)起請(qǐng)求,能否成功的拿到后端返回的數(shù)據(jù),對(duì)此我們可以借助一些接口管理工具,諸如Yapi,postman,Apifox等
筆者這里使用Apifox進(jìn)行舉例,各個(gè)工具之間的使用方式是通用的,因此不需要擔(dān)心方法不兼容的問題。
大體界面是這樣的
我們這里只是進(jìn)行基礎(chǔ)的使用,我們可以點(diǎn)擊目錄旁邊的添加接口
點(diǎn)擊創(chuàng)建接口后,我們就可以看見如下的界面
對(duì)于數(shù)據(jù)請(qǐng)求的路徑,除了圖中說明的端口號(hào)后,還需注意端口號(hào)后的路徑必須和請(qǐng)求路徑相同,如下圖 /hello 和接口中的 /hello 相同,所以就會(huì)調(diào)用這個(gè) hello()方法
筆者這里給個(gè)示例,我們先運(yùn)行Java項(xiàng)目,在控制臺(tái)中就會(huì)顯示本地的服務(wù)器端口號(hào),如下圖顯示為8080
點(diǎn)擊這里的運(yùn)行
然后點(diǎn)擊發(fā)送
然后就會(huì)根據(jù)路徑找到項(xiàng)目中對(duì)應(yīng)的方法,返回我們需要的數(shù)據(jù)
以上就是Apifox的基礎(chǔ)使用方法,后序筆者會(huì)分享一些更高級(jí)的使用方式文章來源:http://www.zghlxwxcb.cn/news/detail-837545.html
?本次的分享就到此為止了,希望我的分享能給您帶來幫助,也歡迎大家三連支持,你們的點(diǎn)贊就是博主更新最大的動(dòng)力!
如有不同意見,歡迎評(píng)論區(qū)積極討論交流,讓我們一起學(xué)習(xí)進(jìn)步!
有相關(guān)問題也可以私信博主,評(píng)論區(qū)和私信都會(huì)認(rèn)真查看的,我們下次再見
文章來源地址http://www.zghlxwxcb.cn/news/detail-837545.html
到了這里,關(guān)于HTTP請(qǐng)求響應(yīng)詳解 (HTTP請(qǐng)求數(shù)據(jù)格式,常見請(qǐng)求方式,后端響應(yīng)參數(shù))及Apifox(postman)使用方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!