做網(wǎng)站 多少人軟件開發(fā)流程八個(gè)步驟
Http協(xié)議
超文本傳輸協(xié)議(Hypertext Transfer Protocol,HTTP)是一個(gè)簡(jiǎn)單的請(qǐng)求-響應(yīng)協(xié)議,它通常運(yùn)行在TCP之上。
【參考】
GET && POST
對(duì)比
關(guān)于tcp數(shù)據(jù)包:對(duì)于GET方式的請(qǐng)求,瀏覽器會(huì)把http header和data一并發(fā)送出去,服務(wù)器響應(yīng)200(返回?cái)?shù)據(jù));
而對(duì)于POST,瀏覽器先發(fā)送header,服務(wù)器響應(yīng)100 continue,瀏覽器再發(fā)送data,服務(wù)器響應(yīng)200 ok(返回?cái)?shù)據(jù))。
實(shí)際上get會(huì)產(chǎn)生一個(gè)tcp數(shù)據(jù)包,post會(huì)產(chǎn)生兩個(gè)數(shù)據(jù),這就會(huì)造成響應(yīng)時(shí)間問(wèn)題,但并不是所有的瀏覽器都是post發(fā)兩次包,firefox不是。
GET
為獲取數(shù)據(jù)
- 請(qǐng)求參數(shù)在url上體現(xiàn),能看到—不安全
- 相當(dāng)于數(shù)據(jù)庫(kù)中的
SELECT
操作。
發(fā)送 數(shù)據(jù) POST && PUT
put和post都是向服務(wù)器端發(fā)送數(shù)據(jù),但put是冪等的,而post是非冪等。
所謂冪等,即多次發(fā)送同一個(gè)請(qǐng)求時(shí)候,產(chǎn)生的結(jié)果是一樣的就是冪等性原則,這是為了當(dāng)網(wǎng)絡(luò)出現(xiàn)延遲等,服務(wù)器(客戶端)之間發(fā)送請(qǐng)求沒(méi)有收到回應(yīng),再重新發(fā)一次,實(shí)際上另一端已經(jīng)接收到了第一次的請(qǐng)求,接著有接收第二次同一請(qǐng)求。如果是交易的業(yè)務(wù)沒(méi)有冪等就會(huì)造成交易兩次卻只結(jié)算一次交易額。
POST
為提交數(shù)據(jù)
- 向服務(wù)器發(fā)送數(shù)據(jù)。
- 該請(qǐng)求,相當(dāng)于
INSERT
操作。用于新增數(shù)據(jù)。
post用于提交表單或創(chuàng)建新資源- 安全性。比
GET
更安全。數(shù)據(jù)都是放在RequestBody
中- 數(shù)據(jù)量無(wú)上限。
PUT
為提交數(shù)據(jù)
- 也是向服務(wù)器發(fā)送消息
- 該請(qǐng)求像數(shù)據(jù)庫(kù)中的
UPDATE
操作,用來(lái)修改數(shù)據(jù);
(多次請(qǐng)求,最新一次會(huì)把上一次的請(qǐng)求數(shù)據(jù)覆蓋)
put用于向服務(wù)器上傳或更新資源
DELETE
就是刪除某行,就像
DELETE
操作
@GetMapping、@PostMapping、@PutMapping、@DeleteMapping 的區(qū)別
RESTFUL風(fēng)格接口,常用的URL請(qǐng)求方式就包括了GET、POST、PUT、DELETE等
@RequestMaping
@RequestMaping主要是將HTTP請(qǐng)求映射到控制器方法上,用于接收HTTP請(qǐng)求。因此,@GetMapping其實(shí)寫法就是@RequestMapping(method = RequestMethod.GET)
@GetMapping
- 用來(lái)獲取數(shù)據(jù);
- 類似 select
- 具有冪等性
@PostMapping
- 用來(lái)提交請(qǐng)求數(shù)據(jù)(表單)
- 類似 insert
- 需要考慮接口冪等性問(wèn)題 ???
@PutMapping
- 用來(lái)修改數(shù)據(jù)
- -類似 update
- 本身就具有冪等性
@DeleteMapping
- 用來(lái)刪除數(shù)據(jù)
- 類似于數(shù)據(jù)庫(kù)中的delete
- 具有冪等性
示例
// insert
> @PostMapping(value = "/add")
> public void add(@RequestBody User user) {
>
> }
>
> // delete
> @DeleteMapping(value = "/delete/{id}")
> public void delete(@PathVariable String id) {
>
> }
>
> // update
> @PutMapping(value = "/update")
> public void update(@RequestBody User user) {
>
> }
>
> // select
> @GetMapping(value = "/get")
> public User get(@RequestParam String name)
> {
>
> }