精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一篇學會 REST 深度進階

開發 前端
REST 并沒有規定使用什么樣的格式來傳遞數據,XML 也行,JSON 也行。但是在我的團隊中,JSON 傳遞數據是一個硬性要求。

[[431418]]

本文轉載自微信公眾號「老王Plus」,作者老王Plus的老王。轉載本文請聯系老王Plus公眾號。

說起來,REST 出現已經很久了。

從早期的三層架構,到現在的多層、微服務,核心內容之一就是 API --- 從非常簡單的 API,到多設備多用途的 API,包括一些外接的三方,像 BAT 的公共服務,簡單的、麻煩的,都是 API。而這些 API,又基本上都是基于 REST 的。

今天我們不去詳細解釋 REST,只說說 REST 應用中間的一些要點。

REST 應用之多,是有他的原因的。他很容易理解,很靈活,并且可以適用于任何規模的應用。

當然,REST 并不是唯一的規范,還有 SOAP、GraphQL。但是,這只是字面上的并列的規范。所有的規范用過了,你就會知道:SOAP 很笨重,有時候還很古怪:你需要花大量的心思去想接口的表示,而不是邏輯本身。至于 GraphQL,又延伸的太多了,居然需要調用 API 的客戶端去考慮和設計,這絕不是個好主意。

好吧,這個問題見仁見智,我們不展開討論。

不管怎么說,在我看來,REST 仍然是 API 接口規范的王者,并且不會在短時間內被取代。

在我的習慣中,使用 REST 會有以下幾個約束。

1. 使用 JSON 數據

別誤解,這是我的習慣,不是 REST 的。

REST 并沒有規定使用什么樣的格式來傳遞數據,XML 也行,JSON 也行。但是在我的團隊中,JSON 傳遞數據是一個硬性要求。

相比較而言,JSON 比 XML 有太多的優勢了:

  • 更易于使用、書寫和閱讀
  • 更快,占用的內存空間更少
  • 不需要特殊的依賴項或包來解析
  • 主流的編程語言對 JSON 都有支持

如果不理解這些優勢,沒關系,去網上隨便找一個 XML,試著自己解析一下看看。熟悉大廠的各種開放平臺的同學們也會有直覺的感覺:早期的 SOAP 和 XML,已經被逐步替換為了 REST 和 JSON。

此外,這里說的使用 JSON 數據,不僅僅是響應數據,還包括請求數據。不要使用 form-data 或者 x-www-form-urlencoded 發送數據,轉成 JSON 發送,會更容易閱讀、編寫、測試和管理。

真心的,如果你這么做了,我會替所有開發的同學們感謝你。

2. 認真對待方法

想一下,你有沒有見到過只用 GET 方法來處理一切事情的 API?

這并不是不可以,只不過,這樣的寫法說明沒有深入理解這個工具,以及 HTTP 的準確的工作方式。要知道,HTTP 中每個方法都被設計為處理特定的工作和內容。

這兒我逐個說說:

GET - 在僅僅用于讀數據時,應該用 GET。不寫入、不更新,只讀取數據。這個概念很簡單。而且,在這個前提下,相同的請求一定會返回相同的結果。

POST - 看字面的意思就明白,就是存儲一些東西,像是在數據庫中創建一條記錄、在某處寫入一些內容。通常來說,可以選擇很多種方式 POST 數據:multipart/form-data、x-www-form-urlencoded、application/json 或者 text/plain,等等,很多。不過,我們要求只使用 application/json 方式,這樣做可以保持開發和調用的一致性。

PUT - 字意就是更新內容。所以當我們需要更新數據時,就需要定義為 PUT 方法。當然,也可以用來創建新數據。

DELETE - 刪除,很好理解。

PATCH - 打補丁,對于已經存在的數據進行更新操作。這個跟 PUT 有一點點區別,通常 PATCH 是有范圍的,更新需要更新的內容,而 PUT 更多時候是更新整個數據。

當然,在某些文章里,還會有 OPTIONS、HEAD、TRACE等等,這些用得少,就不說了。想了解的,可以去查 HTTP 相關的文檔。

說這么多,重要的是 --- 既然 HTTP 提供了這樣的方法定義,我們完全可以把任何 CRUD 的操作對映到這些方法,而不是只用 GET,這決不是一個好習慣。

3. 注意語義

在團隊開發 API 時,有一個嚴格的要求,就是 API 名稱需要有語義感。語義感這個詞是我自己生造的,不是什么高大上的東西,就是要求寫的 API 名稱能使用正確的英文和次序,能夠讓人看得懂。都 9021 年了,居然還有人用拼音首字符,說出來你敢信嗎?

在我看來,所有的 API 都應該可以在不看注釋和說明的情況下被調用方理解,從調用端點,到參數,和 JSON 的鍵。

這兒,我參考了國外的一些規則。規則也很簡單:

  • 用名詞,別用動詞。想一下,上面列出的方法,本身就是動詞,比方說:GET /clients,就很好理解,如果換成 GET /getClients,總覺得怪怪的。
  • 一定要準確使用單數和復數,針對一條數據,就用單數;針對多條數據,就一定用復數。感覺一下 GET /client 和 GET /clients 的區別。當然,對于單個數據來說,通常還需要某種 ID 的存在:GET /client/id。

下面用一些例子來理解一下這個規則。

  1. // 好的方式 
  2. GET /clients 
  3. POST /clients 
  4. GET /client/23 
  5. PUT /client/23 
  6. DELETE /client/23 
  7. GET /client/23/comments 
  8.  
  9. // 不好的方式 
  10. GET /clients/23 
  11. GET /listAllClients 
  12. POST /client/create 
  13. PUT /updateClient/23 
  14. GET /clientComments/23 

這兒要多說兩句:規則只是規則,不用那么死板的去記。要把這種規則理解了,并習慣性地應用在編程的過程中,變成一種類似肌肉記憶的東西。

4. 隨時留心 API 的安全

就算你做得不是公開的 API,也一定要記著,使用某些手段,讓你的 API 安全起來。這是 API 編程一個基本的要求。

這又有幾個方面的要求:

1). 使用 HTTPs

HTTPs 已經出來非常久了,而且,如果你對接過大廠的 API,你會發現使用 HTTPs 是一個基本的要求。

HTTPs 提供了一種比 HTTP 更安全的方式,可以在基本網絡層面除去中間人攻擊,并加密調用端和 API 的通訊。在編程時,使用 HTTPs 是個成本最低但又確實有效的安全方式。

把使用 HTTPs 當成一個標準和習慣,有一天你會感謝自己的。

2). 從構建 API 開始,就要做到控制訪問

你看得沒錯,是從構建 API 開始。

不需要做得很麻煩,但要有控制,要能控制誰能訪問這個 API。通常可以先加入一個簡單的 JWT Auth,等 API 成形后,再轉為 OAuth。目的很簡單,就是控制訪問。如果真出現了 API 被攻擊什么的,簡單地關閉暴露的密鑰就可以了。當然,我們還可以用密鑰來跟蹤 API 的調用,包括調用量、調用異常等。

3). 小心對待敏感數據

API 代表了網絡,代表了通訊。在網絡和通訊上,傳遞敏感數據一定要小心再小心。我們前邊提到了一定使用 HTTPs,也是因為這個。如果不想面向監獄編程,一定要確保這些敏感數據通過正確的方式,給到正確的調用方。

看了一眼數據,就被追了刑責,這是我身邊的真事。

4). 確保運行環境的安全

網關、防火墻,有就用上,別因為麻煩就關掉。更深的內容,可以扔給運維,但基礎的部分,自己要懂要會。

5. 版本控制

API 疊代升級,是每個開發的會面對的事。有時候,升級僅僅是邏輯的改變,而更多時候,是會改變輸入輸出結構的。這種情況下,保持和維護 API 的版本很重要。作為后端開發人員,我們無法保證調用端會隨時同步進行相應的改動。極端情況下,改變內部邏輯,也有可能影響到調用端。

API 版本控制,不用猶豫,馬上開始使用。不要覺得某個 API 比較小,或者調用端少,就不去做。記著,任何的代碼改動,對于不更新應用或其它內容的調用者來說都是有風險的。你不僅需要確保你的代碼不會破壞任何東西或任何人,還需要知道某個應用版本的表現。這件事一點都不好玩。

關于 API 版本控制的詳細實現,我前邊一篇推文,可以去看看。傳送門

至于版本的方式,倒是不那么重要,可以看個人的習慣,v1、v2、v3也可以,v1.0、v1.1、v1.2也可以。按照微軟的建議,是采用 Major.Minor.Patch 的方式。不過我自己覺得帶上 Patch 部分有點太長了。

所以,在我的習慣中,應用版本控制后,API 的 URL會是這樣的:

  1. GET /v1.7/clients 
  2. POST /v1.7/clients 
  3. GET /v1.7/client/23 
  4. PUT /v1.7/client/23 
  5. DELETE /v1.7/client/23 
  6. GET /v1.7/client/23/comments 

聽我的,馬上開始 API 的版本控制。

6. 保持響應的一致

一致性是好的 API 的優秀品質。開發中,我們應該在各種方面做到一致,包括命名、URI、請求、響應等。而在這里面,響應的一致性是我對團人的一個硬性要求。

API 是要讓別人去調用的。保持資源響應的一致,是對調用者最大的善意。在某個壇子上,我看到過建議每個端點返回不同資源結構的說法。如果你也看到過類似的內容,忘了它,那是錯的。

記著這句話:保持資源響應的一致,是對調用者最大的善意。

API 開發時,盡可能發送相同的響應結構。如果沒有數據,就將其作為空值、空對象或空數據發送。

我們拿論壇的文章結構舉個例子。

文章數據的結構通常是這樣(有簡化,不要糾結):

  1.     "title""文章標題"
  2.     "description""文章內容"
  3.     "comments"
  4.     [ 
  5.         { 
  6.             "text""回復1"
  7.             "user""張三" 
  8.         }, 
  9.         { 
  10.             "text""回復1"
  11.             "user""張三" 
  12.         } 
  13.     ] 

如果需要返回一條數據,并且要列出評論時,結果會是這樣:

  1.     "message""fetch data successed"
  2.     "status"true
  3.     "article"
  4.     { 
  5.         "title""文章標題"
  6.         "description""文章內容"
  7.         "comments"
  8.         [ 
  9.             { 
  10.                 "text""回復1"
  11.                 "user""張三" 
  12.             }, 
  13.             { 
  14.                 "text""回復1"
  15.                 "user""張三" 
  16.             } 
  17.         ] 
  18.     } 

如果需要返回一個文章列表,并且沒有評論時,會是這樣:

  1.     "message""fetch data successed"
  2.     "status"true
  3.     "articles"
  4.     [ 
  5.         { 
  6.             "title""文章標題1"
  7.             "description""文章內容1"
  8.             "comments": [] 
  9.         }, 
  10.         { 
  11.             "title""文章標題2"
  12.             "description""文章內容2"
  13.             "comments": [] 
  14.         } 
  15.     ] 

看到了吧?這樣的方式下,我們對于里面元素 article 里結構是完全一樣的,而對于整個返回結構,也是相似的。

堅持這樣做,可以為自己和他人節省大量的時間。

7. 重視出錯后的返回信息

API 開發,應該既能處理正確的請求,也能處理錯誤的請求。錯誤的請求并不可怕,可怕的是你沒有考慮到,或者考慮到了,但沒有給到調用端足夠的細節。

在 API 返回中,很多人在這里會忽略 HTTP 的狀態代碼,也就是 HttpStatus。

HTTP 協議,為我們定義了超過 50 種不同的狀態代碼,涵蓋了幾乎所有的場景。每個代碼都有獨特的含義,應該在獨特的場景中使用。這個內容網上有很多,我就簡單列一下:

1xx - 信息性響應代碼,簡單說就是一個狀態通知。

2xx - 成功響應代碼。所有的成功都會在這個范圍。通常我們見到的是 200,但也有別的成功情況。

3xx - 重定向響應代碼。請求被服務器重定向到另一個 URL,就會有這個返回。

4xx - 客戶端錯誤響應代碼。最常見的是 400,請求協議格式或內容錯誤。

5xx - 服務器錯誤響應。最常見的是 500,服務端程序,也就是 API 的內部,有內存溢出或異常拋出。

開發中,我們可以充分并準確使用這些狀態碼。這樣,所有的開發人員,會在相同的認識層次上理解問題的狀態和原因,從而使得 API 變得普遍易懂、一致和標準。

這不是 REST 的標準,但應該作為我們開發 REST 的標準。

有了狀態碼,這只是第一步。當運行出錯時,我們需要向調用端提供盡可能多的細節。當然,這并不容易,我們需要能夠考慮并預測 API 會如何出錯,調用者會做什么,不會做什么。所以,通常一個 API 第一步是進行嚴格的請求數據驗證:數據是否存在、值是否在我們期望的范圍內、是否可以將他們存入數據庫。

拿上面的例子來說,GET /client/23,取 clientId = 23 的數據,我們需要做以下的工作:

檢查請求是否有 clientId 參數,如果沒有,應該是一個 400 的狀態

檢查傳入的 clientId = 23 的記錄是否存在,如果不存在,返回響應 404

如果找到記錄,則返回響應 200

這只是一個簡單的例子,真實的編程時,需要考慮的會更多。

而且,除了狀態碼外,還要返回相應的錯誤消息,例如:輸入參數 clientId 沒有輸入、ID 為 23 的數據記錄不存在,等等。

重要的是,提供詳細的錯誤信息,可以幫助開發者和調用方了解到底什么地方發生了問題。

放心,調用者不會將這些信息顯示給最終用戶,但可以通過這些信息來快速的定位和解決問題。

8. 盡可能優化

在現代編程中,API 在體系中的角色,絕對是整個操作的大腦。所以,對于 API 的開發,最基本的要求是快速和優化,決不能讓 API 成為整個系統和生態的痛點。

要求就這么簡單。

我們可以做很多事情來確保交付一個具備良好性能和可伸縮性的 API。來看看我們能做什么?

首先是數據庫級別的優化。通常說 API 慢的時候,十有八九與數據庫有關。糟糕的數據庫設計、復雜的查詢、緩慢的硬件環境,甚至缺乏緩存,都是慢的理由。所以,開發過程中,應該隨時關注并始終優化數據庫結構、查詢、索引以及與數據庫交互的所有內容。

接下來是緩存。很多人不愿意用緩存,因為會將代碼變復雜。但是從實際效果上,越大、越復雜的系統,越應該通過緩存傳遞數據。有時候,緩存數據庫查詢能減少 100% 的加載時間。而絕大多數數據,不會進行頻繁的改變。把緩存用起來,調用端的兄弟們,會把你當親兄弟的。

另一個影響性能的因素是 API 發送到調用端的數據量。要做到確保 API 只返回調用端需要的數據,而不是全部。如果可能,不要每次都返回完整的模型細節和關系。試一下,但要與響應中的返回模型保持一致。

最后,別忘了壓縮。如果可以,使用 Brotli,或者至少也使用 Gzip 來壓縮數據。簡單的配置,可以獲得減少 50-75% 的傳輸數據,多好!

9. 做個體貼的開發者

這個要求無關技術,但我還是想寫出來。

作為一個開發人員,我們要明白,項目不是一個人的事。當我們寫完最后一行代碼,提交并合并后,你可能會認為工作已經完成。但不是,對其他很多人來說,這才是個剛剛開始。

很多人在我們完成了工作后,才能開始他們的工作。所以,我們需要以多種方式準備 API。我們要確保 API 能正常工作,要有很好的文檔,更重要的事,我們需要準備好集成支持。不過文檔寫得有多好,在集成過程中,及以后的過程中,總會有問題,各種問題。

所以,設身處地的為他人著想,盡量讓他們的工作變得容易些。構建一個良好的API,遵循我們在這里定義的規則,編寫優秀的文檔,并為所有人服務。

10. 寫完了

寫完了。

上面九條,是我團隊中執行的標準和要求。

這里我也必須說, REST 本身并不是一個標準,所以也不會有人告訴你什么是對的,什么是錯的。開發的時候多想一下:作為開發人員,我們每天都在尋找使代碼更好、更漂亮、更高效的模式,那么為什么不在 API 中也做同樣的事呢?

 

責任編輯:武曉燕 來源: 老王Plus
相關推薦

2022-01-02 08:43:46

Python

2022-02-07 11:01:23

ZooKeeper

2021-07-06 08:59:18

抽象工廠模式

2023-11-28 08:29:31

Rust內存布局

2023-01-03 08:31:54

Spring讀取器配置

2021-07-02 09:45:29

MySQL InnoDB數據

2022-08-23 08:00:59

磁盤性能網絡

2021-05-11 08:54:59

建造者模式設計

2022-08-26 09:29:01

Kubernetes策略Master

2021-07-05 22:11:38

MySQL體系架構

2022-04-12 08:30:52

回調函數代碼調試

2021-07-16 22:43:10

Go并發Golang

2021-07-02 08:51:29

源碼參數Thread

2021-04-29 10:18:18

循環依賴數組

2021-09-28 08:59:30

復原IP地址

2023-03-13 21:38:08

TCP數據IP地址

2022-03-11 10:21:30

IO系統日志

2023-11-01 09:07:01

Spring裝配源碼

2021-10-29 07:35:32

Linux 命令系統

2021-10-14 10:22:19

逃逸JVM性能
點贊
收藏

51CTO技術棧公眾號

成人av免费电影| 久久这里有精品| 熟女人妇 成熟妇女系列视频| 国产一区二区视频在线观看免费| 黄色美女视频在线观看| 99精品欧美一区| 国产精品久久久久久中文字| 深夜福利影院在线观看| 日韩av字幕| 欧美另类高清zo欧美| 男人的天堂狠狠干| 日本视频在线播放| 91在线看国产| 成人免费网站在线看| 国产成人无码一区二区三区在线 | 激情五月综合| 欧美一级日韩免费不卡| wwwxxx黄色片| 中文字幕资源网在线观看| 99精品久久久久久| 91久久精品视频| 黄色免费av网站| 黄色日韩在线| 久久久极品av| 亚洲高潮女人毛茸茸| 狠狠久久伊人| 欧美大片拔萝卜| 天天色综合社区| 吉吉日韩欧美| 亚洲成a人片在线不卡一二三区| 国产精品国产精品国产专区蜜臀ah | 中文字幕av日韩| 国产一卡二卡三卡四卡| 亚洲男人在线| 欧美日产在线观看| 国产主播在线看| 牛牛精品在线| 亚洲美女屁股眼交3| 色999日韩自偷自拍美女| 天天干天天干天天干| 国产成人精品一区二区三区四区| 欧美黑人性视频| 日韩福利小视频| 日韩av自拍| 在线电影欧美日韩一区二区私密| 国产嫩草在线观看| 综合另类专区| 日本韩国一区二区三区| 91传媒久久久| 伊人久久视频| 一本色道久久综合亚洲91| 国产午夜大地久久| 538在线视频| 亚洲成av人片在线| 激情五月宗合网| 免费一二一二在线视频| 黑人欧美xxxx| 91av俱乐部| 成人午夜sm精品久久久久久久| 亚洲综合久久久久| 9色porny| 黄视频免费在线看| 色悠悠久久综合| 国产精品wwwww| 日韩不卡视频在线观看| 欧美色视频在线| 污污的视频免费| 精品国产一区二| 欧美成人a∨高清免费观看| 娇妻高潮浓精白浆xxⅹ| 日韩伦理一区二区三区| 国产亚洲欧美视频| 国产午夜精品理论片在线| 在线精品国产| 97婷婷大伊香蕉精品视频| 国产污污视频在线观看 | 丝袜美腿精品国产二区| 国产在线免费看| 一区二区三区网站| 97国产精品久久| 免费看一级视频| 六月婷婷色综合| 不卡一区二区三区四区五区| 香蕉久久一区二区三区| 国产亲近乱来精品视频| 成年人黄色在线观看| 欧美videos另类精品| 欧美日韩亚洲一区二| 三级a在线观看| 亚洲国产高清在线观看| 亚洲高清一区二| 日本人亚洲人jjzzjjz| 影视亚洲一区二区三区| 欧美亚洲国产精品| 一区二区日韩在线观看| 成人高清在线视频| 五月天色一区| 高清电影在线免费观看| 91久久精品一区二区三| 人妻体体内射精一区二区| 爽爽窝窝午夜精品一区二区| 久久精品中文字幕电影| 狠狠躁夜夜躁人人爽天天高潮| 女人色偷偷aa久久天堂| 全球成人中文在线| 国产xxxxxx| 国产欧美久久久精品影院| 亚洲啊啊啊啊啊| 日本精品在线中文字幕| 亚洲国产成人久久综合一区| 亚洲女人久久久| 99成人精品| 7777精品久久久大香线蕉小说| 91av久久久| 久久久综合九色合综国产精品| 国产一区喷水| 黄av在线播放| 色吊一区二区三区| 精品少妇人妻av一区二区三区| 久久69av| 北条麻妃一区二区三区中文字幕 | 国产精品99久久久久久久久| 国产男男gay体育生白袜| 久久久精品综合| 国产精品videossex国产高清| 538在线视频| 91精品国产综合久久久久久漫画| 中文字幕第38页| 亚洲电影一级片| 97涩涩爰在线观看亚洲| 国产高清免费在线观看| 国产精品蜜臀在线观看| 免费午夜视频在线观看| 欧美日韩导航| 欧美福利视频在线观看| av资源免费看| 国产精品欧美一区喷水| 久久久国产欧美| 国产一区二区区别| 热久久99这里有精品| 天堂网在线观看视频| 亚洲成av人影院在线观看网| 韩国av中国字幕| 久久久久国产精品| 成人亚洲激情网| a级片国产精品自在拍在线播放| 亚洲午夜精品在线| 91精品人妻一区二区三区蜜桃2| 成人午夜网址| 久久久久久伊人| 男人天堂网在线视频| 一区二区欧美在线观看| 男人女人拔萝卜视频| 亚洲深深色噜噜狠狠爱网站| 亚洲a成v人在线观看| 好操啊在线观看免费视频| 欧美一区二区三区啪啪| 懂色av懂色av粉嫩av| 国产suv一区二区三区88区| 无码毛片aaa在线| jizz性欧美23| 韩国国内大量揄拍精品视频| 日韩大片b站免费观看直播| 狠狠躁18三区二区一区| 日本一级免费视频| 免费在线观看视频一区| 亚洲精品偷拍视频| 大奶在线精品| 日本精品久久久| 懂色一区二区三区| 欧美日韩国产色站一区二区三区| 中国极品少妇xxxx| 久久九九免费| 永久久久久久| 97一区二区国产好的精华液| 91av在线看| 香蕉视频免费在线播放| 日韩免费电影一区| 亚洲一区欧美在线| 国产日韩欧美高清在线| 国产毛片久久久久久| 国产精品大片| 欧美一区1区三区3区公司 | 国产精品久久久久久久久久ktv| 北条麻妃一二三区| 精品欧美国产一区二区三区| 亚洲一二三四视频| 国产.欧美.日韩| 男人天堂成人在线| 欧美一区在线看| 蜜桃av色综合| 精品国产亚洲日本| 国产成人精品国内自产拍免费看 | 中文字幕第一页在线播放| 亚洲另类在线视频| 永久免费看mv网站入口78| 久久99最新地址| 国产男女免费视频| 97精品国产福利一区二区三区| 国产高清视频一区三区| 麻豆av在线免费观看| 亚洲午夜av电影| 亚洲第一黄色片| 欧美性极品少妇| 日本一区二区不卡在线| 欧美国产禁国产网站cc| 中文在线观看免费视频| 精品一区二区综合| 无码人妻h动漫| 狠狠入ady亚洲精品| 亚洲视频sss| 女仆av观看一区| 99se婷婷在线视频观看| 日韩高清不卡| 日韩av色在线| 3344国产永久在线观看视频| 久久久国产在线视频| 国产69精品久久app免费版| 亚洲激情在线观看| 国产高清视频免费观看| 欧美嫩在线观看| 青青国产在线视频| 大桥未久av一区二区三区| 九九九免费视频| 中文字幕综合网| 中文字幕黄色网址| 久久久不卡网国产精品二区| 99re久久精品国产| 成人久久18免费网站麻豆| 91蝌蚪视频在线| 久久91精品国产91久久小草| 亚洲精品一二三四五区| 日韩一区欧美二区| 免费裸体美女网站| 久久精品道一区二区三区| 少妇av一区二区三区无码| 影院欧美亚洲| 日韩精品在线中文字幕| 欧美久久久久| 免费网站在线观看视频| 欧美特黄a级高清免费大片a级| 久久涩涩网站| 欧美在线导航| 麻豆亚洲一区| 精品国产乱码久久久| 免费在线国产精品| 国产精品一国产精品| 日本一区二区三区免费看| 国产一区二区电影在线观看| 日韩欧美一区二区三区久久婷婷| 久久久精品区| 成人蜜桃视频| 猫咪成人在线观看| 玛丽玛丽电影原版免费观看1977| 欧洲午夜精品| 91亚洲精华国产精华| 香蕉免费一区二区三区在线观看| 国产不卡在线观看| xxxxx.日韩| 91精品久久久久久久久不口人| 91超碰在线免费| 欧美中文字幕精品| 欧美黄色三级| 91久久久久久久久| 国产精品视频3p| 日本精品一区| 中文字幕一区二区三区久久网站| 久久一区二区精品| 蜜桃a∨噜噜一区二区三区| 欧美中文娱乐网| 日韩欧美电影| 国产天堂视频在线观看| 亚洲影院在线| 天天视频天天爽| 国产精品一二二区| 国产毛片毛片毛片毛片毛片毛片| 国产不卡在线一区| 一区二区三区免费在线观看视频 | 在线观看国产91| 国产精品久久影视| 亚洲国产成人av在线| 毛片在线播放网站| 久热在线中文字幕色999舞| 男女羞羞视频在线观看| 国产99久久精品一区二区| 欧美日韩视频免费看| 国产精品自拍首页| 欧美日韩在线二区| 亚洲色成人www永久在线观看| 欧美99久久| 成人亚洲视频在线观看| 激情文学综合丁香| 特级西西人体4444xxxx| 日韩一区在线播放| 国产专区第一页| 日韩一区二区麻豆国产| 青青草免费在线| 久久91精品国产91久久跳| xxxxxx欧美| 99在线视频首页| 成人一区二区| 国产欧美日韩网站| 狠狠色伊人亚洲综合成人| 制服丝袜第二页| 亚洲欧美日韩中文字幕一区二区三区| 黄色录像一级片| 91久久精品日日躁夜夜躁欧美| 欧美一区二区三区不卡视频| 日韩精品中文字幕在线一区| 国产高清免费av在线| 国模叶桐国产精品一区| 亚洲天堂网站| 日本亚洲自拍| 国产亚洲在线观看| 国产在线a视频| 亚洲啪啪综合av一区二区三区| 一女三黑人理论片在线| 亚洲男人天堂一区| 在线观看日韩一区二区| 日韩成人网免费视频| 特级毛片在线| 成人在线播放av| 91蜜臀精品国产自偷在线| 日本xxxxxxx免费视频| 99国产精品久| 日韩精品一区二区在线播放 | 好男人www社区| 91视视频在线直接观看在线看网页在线看| 中文字幕在线视频精品| 久久精品人人做| 国产精品视频免费播放| 亚洲激情自拍图| 91在线中文| 91网站免费看| 99欧美视频| 五月花丁香婷婷| 国产精品看片你懂得| 成人毛片一区二区三区| 亚洲欧美制服丝袜| 欧美精品日日操| 欧美重口乱码一区二区| 日本不卡123| 青娱乐国产视频| 在线观看不卡视频| 成人在线观看免费| 国产精品一区二区性色av| 欧洲美女日日| 午夜在线观看av| 国产精品久久一卡二卡| ,亚洲人成毛片在线播放| 日韩有码在线视频| 欧美国产视频| 一本—道久久a久久精品蜜桃| 亚洲国产91| 国产a√精品区二区三区四区| 国产视频一区在线播放| 亚洲av无码乱码国产精品fc2| 欧美一区二区私人影院日本| av大全在线| 国产欧美欧洲| 麻豆亚洲精品| 欧美亚洲色综久久精品国产| 欧美日韩一区视频| 在线中文免费视频| 国产麻豆一区二区三区在线观看| 97久久夜色精品国产| 在线成人精品视频| 精品福利一区二区| 国产精品久久久久久久龚玥菲 | 精品毛片乱码1区2区3区| 日本欧美电影在线观看| 九色一区二区| 理论片日本一区| 国产免费无码一区二区视频| 亚洲国产精品字幕| 国产日韩另类视频一区| 欧美日韩在线免费观看视频| 成人精品一区二区三区中文字幕 | 亚洲超丰满肉感bbw| 日本黄在线观看| 国产精品久久久久久亚洲影视| 伦理一区二区| 激情视频免费网站| 亚洲一级二级三级在线免费观看| 波多野结衣二区三区| 日韩在线资源网| 成人知道污网站| 国产精品亚洲a| 亚洲精品老司机| 美女做暖暖视频免费在线观看全部网址91| 久久久久久久国产| 国产精品手机在线播放| 男人女人拔萝卜视频| 欧美丝袜一区二区| 国产91在线视频蝌蚪| 麻豆一区区三区四区产品精品蜜桃| 欧美精品一卡| 亚洲天堂精品一区| 亚洲精品久久视频| 欧洲午夜精品|