成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

有人提了一個問題:一定要RESTful嗎?

新聞 應用安全
這個問題看起來就顯得有些萌,或者說類似的問題都有些不靠譜,世上哪有那么多一定的事情,做開發都不一定做多久呢,所以說如果你有這個疑問的話是真真有點兒不著調,不過可能也就是隨口一問吧,沒有深究的必要。

寫在前面的話

這個問題看起來就顯得有些萌,或者說類似的問題都有些不靠譜,世上哪有那么多一定的事情,做開發都不一定做多久呢,所以說如果你有這個疑問的話是真真有點兒不著調,不過可能也就是隨口一問吧,沒有深究的必要。既然有人問這個,那么就再用一篇文章談談RESTful吧,既然談,就不能只是談其優點,也不能一味的吹捧,也講一下自己的一些理解和不足的地方。

[[206420]]

規范、易讀、簡潔?

Spring+SpringMVC+MyBatis+easyUI整合進階篇(一)設計一套好的RESTful API

Spring+SpringMVC+MyBatis+easyUI整合進階篇(二)RESTful API實戰筆記(接口設計及Java后端實現)

Spring+SpringMVC+MyBatis+easyUI整合進階篇(三)使用ajax方法實現form表單的提交

Spring+SpringMVC+MyBatis+easyUI整合進階篇(四)RESTful API實戰筆記(前端代碼修改)

前文中已經談了RESTful不少的優點,也做了代碼更新,首先,REST強調HTTP應當以資源為中心,并且規范了資源URI的風格;規范了HTTP請求動作(PUT,POST等)的使用,具有對應的語義;遵循REST規范的Web應用將會獲得下面好處:URL具有很強可讀性的,具有自描述性;資源描述與視圖的松耦合;可提供OpenAPI,便于第三方系統集成,提高互操作性;如果提供無狀態的服務接口,可提高應用的水平擴展性;

總結下來:規范、易讀,但是這兩個優點也帶來一些不盡如人意的"反效果":

  • 因為RESTful規范較為明確且有一定的"強制性",這種限制反而導致設計uri變得復雜了,尤其是復雜的關系,操作,資源集合,硬性套用rest原則設計非常困難。
  • 對于RESTful的爭論無處不在,都在討論正確性和規范性,即使和同事之間也會有類似的爭執,當我們在爭論Restful風格到底如何設計才是正宗時,發現心中的困惑不僅沒有降低,反而增加了。
  • RESTful思想及其所倡導的規范很正確,但是使用者的行為太刻意了反而導致這個東西變了味道,爭來爭去就是為了證明自己的理解和使用最"正宗"。

RESTful中的模棱兩可

前一個段落可能有些過于概念化了,還是舉一些具體的例子吧。

案例一

其實,RESTful中也存在著許多的模棱兩可,也有很多不是那么讓開發人員舒服的地方,有人會去糾結查詢、增加、修改、刪除(對應的方法就是get、post、put、delete),個人認為這并不完全正確,因為這個想法把開發工作中的業務場景過于簡單化和模板化了,我們開發的功能就只實現這四類操作嗎、如果遇到一些不能完全對應上這四種方式的業務該怎么辦呢?

  • 發短信、支付、用戶登錄認證,該用get、post、put、delete中的哪一個HTTP動詞?
  • login和logout應該怎么REST化?
  • 驗證碼發送該如何定義uri?

類似的問題還有很多,感覺很多朋友會遇到類似的問題,心里面也有一些不確定該如何去做,其實在理解了REST后,這些并不是什么無解的難題,只是思維方式要轉換一下: login和logout其實只是對session資源或者cookie資源的創建和刪除;業務的uri如何選擇HTTP動詞也要靈活變通,規范是死的,人是活的,按照自己的理解去做,如果后期發現錯誤即使糾正就好了。不過,雖然API如何編寫是開發者的自由,但如果一個API在url里放一堆動詞、資源設計混亂、各種亂用HTTP Method和Status Code,就太不像話了,規范嘛還是要遵守的,說了這么多理解上的偏差,其實代碼質量才是最重要的,有些手段其實只是讓代碼看起來比較優雅的手段而已。

案例二

以上是針對于RESTful理解和設計上的一個例子,具體工作中還有其他的例子嗎?也是很多的,比如,比較棘手的一個問題:跨域資源共享 CORS。

在實際進行跨域請求時,經常會遇到類似 No 'Access-Control-Allow-Origin' header is present on the requested resource.這樣的報錯:
跨域

這個問題并不是因為RESTful引起的,也不能通過修改RESTful的規范去解決,舉這個例子的原因是因為在接口的RESRful化時也遇到過這個問題,解決辦法就不在本文中列舉了,有興趣的朋友可以看一下跨域資源共享 CORS 詳解這篇文章,以后有時間會把解決方案整理出來的。

一些需要重視的安全性問題

當然,不止是以上的兩個問題,前一個段落主要是講述了一下理解和具體使用上的問題,這一段講一下可能引發的安全性問題。

遺漏了對資源從屬關系的檢查

一個典型的RESTful的URL會用資源名加上資源的id編號來標識其唯一性,就像這樣:/users/{userid},例如:/users/100

一般而言用戶只能查看自己的用戶信息,而不允許查看其它用戶的信息。在這種情況下,攻擊者很可能會嘗試把這個URL里面的USER ID從100修改為其他數值,以期望應用返回指定用戶的信息。不過由于這個安全風險太顯而易見,絕大多數應用都會對當前請求者的身份進行校驗,看其是否是編號為100的用戶,校驗成功才返回URL中指定的用戶信息,否則會拒絕當前請求。

不經意間泄露的業務信息

以查看用戶信息的RESTful URL為例:/users/100。由于用戶ID是一個按序遞增的數字,因此攻擊者既可以通過ID知道目前應用中的用戶規模,也可以分別在月初和月末的時候注冊一個用戶,并對比兩個用戶的ID即可知道當前這個月有多少新增用戶。同理,如果訂單號也是按序自增的數字,攻擊者可以了解到一定時間范圍內的訂單量。

這類ID并不會給應用造成任何技術上的威脅,只是通過ID泄露出來的信息對于你的業務而言可能非常敏感。解決辦法是不使用按序遞增的數字作為ID,而是使用具有隨機性、唯一性、不可預測性的值作為ID,最常見的做法就是使用UUID。

參考RESTful架構風格下的4大常見安全問題

選擇適合自己的方式

Spring+SpringMVC+MyBatis+easyUI整合進階篇(五)記錄一下從懵懂到理解RESTful的過程
前一篇博客中也提到了很多其他的方式,比如傳統的MVC開放形式,比如webservice,比如rpc調用,RESTful也只是其中的一種而已,這些選項中并沒有高下之分,無非是多種約定俗成的標準,傳統MVC開發著舒服就按MVC模式來開發,習慣用RPC就用RPC,能理解和接受REST就用REST。

前幾篇文章中描述了RESTful那么多的優點,現在又說大可不必使用,前文又提到RESTful是好的設計實踐,現在又是另外一種說法,不是自相矛盾嗎?

這是我的文章,我肯定要按照我的一些想法寫啊,可能有不對的地方,前文中提到的是好的設計實踐也是我的個人想法和理解,這篇的開頭就說了,不能只談優點,所以又列舉了一些不足吧,我寫文章不是挑口水,很沒必要,選擇適合自己的技術和規范就好。

套用網絡上比較流行的一句話:聽了很多道理卻依然過不好一生。

作為一名開發人員,自己動手去實踐才是硬道理,別人說什么都不要全盤接受,你要想想適不適合你,適不適合你目前做的項目,鞋合不合適只有腳知道,just do it!

結語

優點也好,缺點也罷,雖然看似也總結了不少,但都是個人見解,肯定還有一些遺漏的地方沒有講清楚,還請見諒。

回答文章一開始的問題,是不是一定要用呢?是不是一定要遵循其規則呢?如果不能解決你所面對的問題,不能提高和提升代碼質量、提升工作效率,其實大可不必如此介懷,不用就是了。

首發于我的個人博客,編輯于2017年10月13日晚11:37分。

責任編輯:張燕妮 來源: 博客園
相關推薦

2020-09-08 14:05:06

Redis數據庫緩存

2024-11-20 10:30:00

AI架構

2022-04-27 07:21:06

HTTPAPI系統

2021-12-03 12:35:50

new[]delete[]語言

2010-11-19 16:02:42

IT族

2020-10-09 11:30:07

Redis緩存數據庫

2021-01-05 05:27:32

業務Leader團隊

2017-05-05 09:26:33

2021-03-29 22:58:34

大數據Java編程語言

2022-09-30 14:00:50

JavaScrip新特性代碼

2024-04-23 10:23:34

WPFMVVMPrism

2021-03-16 15:49:30

架構運維技術

2021-03-05 11:02:14

iOS 14.5蘋果更新

2015-09-21 09:02:39

java數組

2020-10-27 10:58:07

Linux內核操作系統

2022-10-08 00:00:00

AdminUser數據庫鑒權

2023-02-01 08:04:07

測試flask網頁

2015-09-16 13:11:23

Java數組初始化

2011-11-09 14:54:50

Linux操作系統

2022-05-30 07:36:07

Python腳本函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一区二区视频 | 一区二区在线 | 成人精品福利 | 亚洲一区高清 | 国精日本亚洲欧州国产中文久久 | 亚洲一区二区三区四区视频 | 日韩中文字幕网 | 欧美成人h版在线观看 | 狠狠天天 | 精品一区二区视频 | 涩涩视频网站在线观看 | 中文字幕日韩欧美一区二区三区 | 欧美国产日韩一区二区三区 | 91视频在线观看 | 激情视频中文字幕 | 国产精品成人国产乱 | 麻豆久久久久久久 | 中文字幕av网站 | 欧美日韩精品一区二区三区四区 | 日韩中文字幕网 | 久久国产精品一区二区三区 | 欧美狠狠操 | 老子午夜影院 | 欧美在线免费 | 国内激情av片 | 日韩午夜网站 | 欧美成人h版在线观看 | 亚洲黄色在线 | 欧美日韩亚洲系列 | 日韩一二区 | 久久三区 | 国产精品一二三区 | 日本一区二区三区在线观看 | 久久久免费精品 | www成人啪啪18 | 天天拍天天插 | 亚洲欧洲精品成人久久奇米网 | 综合久久av | 999久久久免费精品国产 | 999视频| 在线免费观看a级片 |