精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产精品一级久久久| 欧美精品videosex极品1| www.色偷偷.com| 天堂地址在线www| 国产成人在线看| 97视频在线观看成人| 精品一区二区6| 97久久综合区小说区图片区| 一本到不卡免费一区二区| 在线观看一区二区三区三州| 免费激情视频网站| 日韩成人伦理电影在线观看| 色综合91久久精品中文字幕| 国产熟妇搡bbbb搡bbbb| 国产成年精品| 在线欧美小视频| 日韩视频在线视频| 爱久久·www| 91亚洲精华国产精华精华液| 国产视频福利一区| 亚洲图片在线视频| 91久久亚洲| 久久综合久久88| 日本性高潮视频| 久久资源综合| 日韩精品一区二区三区老鸭窝| 熟妇人妻无乱码中文字幕真矢织江| 狂野欧美性猛交xxxxx视频| 国产精品美日韩| 免费在线观看一区二区| 可以免费看毛片的网站| 激情五月婷婷综合| 国产精品视频成人| 中文字幕av第一页| 久久婷婷麻豆| 欧洲精品在线视频| 亚洲欧美在线视频免费| 欧美视频成人| 欧美成人免费观看| 任我爽在线视频| 日韩在线不卡| 永久免费看mv网站入口亚洲| 国产精品久久久久无码av色戒| 澳门久久精品| 精品国产一区二区三区久久影院 | 免费观看成人av| 日韩av免费在线看| 中文字幕在线看人| 久久三级视频| 日韩av成人在线| 国产欧美一区二区三区在线看蜜臂| 在线日本高清免费不卡| 久久久久久久一区二区| 日本少妇激情舌吻| 亚洲网站在线| 97人人做人人爱| 成年人午夜视频| 在线一区欧美| 欧日韩在线观看| 精品无码一区二区三区的天堂| 亚洲综合日本| 国产福利精品av综合导导航| 中文人妻熟女乱又乱精品| 麻豆精品久久久| 91精品国产综合久久久久久久久 | 亚洲国产精品yw在线观看| 国产高潮视频在线观看| 理论片一区二区在线| 精品亚洲一区二区| 久久成人激情视频| 97国产成人高清在线观看| 久久影院模特热| 国产精品不卡av| 久久精品日产第一区二区| 国产精品www色诱视频| 中文字幕乱码人妻二区三区| 国产在线视频精品一区| 成人免费视频网站| 天堂在线一二区| 国产精品久久久久久一区二区三区| 天天成人综合网| 调教一区二区| 一本到高清视频免费精品| 成 人 黄 色 小说网站 s色| 亚洲乱码一区| 国产丝袜一区二区三区| 久草福利资源在线| 亚洲第一黄色| 国产精品网址在线| 成人黄色在线观看视频| 久久久99久久| 欧美日韩中文字幕在线播放| 欧产日产国产精品视频| 欧美日韩视频第一区| av影片在线播放| 国产伦精品一区二区三区千人斩| 久久精品视频一| 亚洲黄色小说图片| 精品在线观看免费| 免费在线成人av| 日本动漫理论片在线观看网站| 欧美视频国产精品| 九色91porny| 精品日韩毛片| 97色在线视频| 99久久一区二区| 久久久久久久综合色一本| 热久久最新地址| gogo亚洲高清大胆美女人体 | 国产美女久久精品香蕉69| 国产91绿帽单男绿奴| 亚洲国产电影在线观看| 日韩a∨精品日韩在线观看| 精品久久久网| 亚洲欧洲日产国码av系列天堂| www欧美com| 老司机精品视频网站| 国产无套精品一区二区| 国产原厂视频在线观看| 欧美亚洲高清一区二区三区不卡| 国产精品偷伦视频免费观看了| 成人影院在线| 国产成人久久精品| 欧洲毛片在线| 日韩欧美国产网站| 婷婷五月精品中文字幕| 欧美 日韩 国产 一区| 国产精品一区二区久久| 黄色大片在线看| 欧美日韩国产精品一区二区不卡中文 | 日韩成人毛片视频| 久久国产精品99精品国产| 欧美深深色噜噜狠狠yyy| 麻豆视频在线观看免费网站黄| 日韩欧美亚洲另类制服综合在线| 日韩a级片在线观看| 久久99精品久久久| 亚洲天堂电影网| 五月激情久久| 在线日韩av观看| 国产91av在线播放| 亚洲国产精品成人久久综合一区| 免费在线观看的毛片| 蜜桃一区二区三区| 日韩av电影在线播放| 男女视频在线观看免费| 色欧美乱欧美15图片| 亚洲精品理论片| 美女网站久久| 日韩中文一区| 四虎影视精品永久在线观看| 俺也去精品视频在线观看| 亚洲中文字幕在线一区| 一区视频在线播放| ass极品水嫩小美女ass| 国户精品久久久久久久久久久不卡| 999热视频| 国产理论电影在线| 日韩大陆毛片av| 日本中文字幕第一页| 国产欧美一区二区三区在线老狼| 国产一级特黄a大片免费| 久久成人综合| 91成人免费视频| 国产一二在线播放| 亚洲人精选亚洲人成在线| 中国精品一区二区| 亚洲欧美另类久久久精品2019| 18深夜在线观看免费视频| 在线播放不卡| 日本一区美女| 国产精品一区二区美女视频免费看 | 国产在线免费看| 国产福利91精品一区| 日韩欧美国产综合在线| 国产精品欧美日韩一区| 国产中文字幕91| 国产第一页在线| 亚洲一区二区久久| 国产99对白在线播放| 婷婷亚洲久悠悠色悠在线播放 | 午夜在线视频观看| 欧美中文字幕一区| 久久国产精品二区| 久久精品夜色噜噜亚洲aⅴ| 深爱五月综合网| 国产精品综合色区在线观看| 国产又黄又爽免费视频| 三级精品视频| 亚洲aaa激情| 黑人巨大亚洲一区二区久| www国产精品com| 午夜视频在线免费播放| 欧美酷刑日本凌虐凌虐| 日韩成人一区二区三区| 国产精品久久久一本精品| 亚洲精品乱码久久久久久蜜桃图片| 日韩中文字幕一区二区三区| 国产成人亚洲综合无码| 精品国产日韩欧美| 国产成人免费电影| 美女视频一区| 97国产精品视频| 毛片av在线| 日韩国产精品视频| 国产黄色av网站| 欧美在线观看视频一区二区| 韩国av免费观看| 亚洲精品视频在线观看网站| 黄色片在线观看免费| www.亚洲人| 古装做爰无遮挡三级聊斋艳谭| 日韩精品成人一区二区三区| 岛国大片在线播放| 午夜精品国产| 制服丝袜综合日韩欧美| 一区二区美女| 久久精品五月婷婷| 综合伊人久久| 91九色单男在线观看| 成人亚洲视频| 国产成人啪精品视频免费网| 大黄网站在线观看| 欧美激情欧美狂野欧美精品| 美女写真理伦片在线看| 精品丝袜一区二区三区| 好吊视频一二三区| 日韩精品一区国产麻豆| 国产欧美日韩成人| 欧美男男青年gay1069videost | 国产精品综合视频| 亚洲视频一二三四| 日韩高清不卡在线| 久久美女福利视频| 国产色综合网| 欧美精品一区免费| 亚洲欧美日本国产专区一区| 天堂…中文在线最新版在线| av不卡在线| 久在线观看视频| 亚洲毛片播放| r级无码视频在线观看| 狠狠入ady亚洲精品| 精品人妻大屁股白浆无码| 欧美在线三级| av久久久久久| 影音先锋久久久| 国产九色porny| 国产亚洲亚洲| 国产成人av影视| 日本亚洲欧美天堂免费| 欧美日韩一区二区三区69堂| 美女视频黄 久久| 污污的视频免费观看| 国产又黄又大久久| 日本泡妞xxxx免费视频软件| 国产a精品视频| 老熟妇精品一区二区三区| www国产亚洲精品久久麻豆| av直播在线观看| 亚洲国产高清aⅴ视频| 内射一区二区三区| 一二三四区精品视频| 国产特黄大片aaaa毛片| 在线视频观看一区| 国产色在线视频| 亚洲第一福利在线观看| 视频一区二区三区在线看免费看| 国产亚洲欧洲黄色| 国内精品久久久久久野外| 欧美—级高清免费播放| 蜜桃视频www网站在线观看| 国产精品福利网站| 国产日韩一区二区三免费高清| 国产精品中出一区二区三区| 曰本一区二区三区视频| 国产盗摄视频在线观看| 亚洲美女黄网| 中国黄色片免费看| 国产一区二区在线视频| 人妻在线日韩免费视频| 国产精品久久影院| 亚洲国产综合久久| 欧美色倩网站大全免费| 国产成人三级在线观看视频| 亚洲欧美综合v| 羞羞污视频在线观看| 日本韩国在线不卡| 欧美一区一区| 欧美综合77777色婷婷| 一区二区影院| 国产精品99久久免费黑人人妻| 国产一区二区三区在线观看免费视频 | 中文字幕中文字幕在线一区| jizz国产免费| 欧美日韩色综合| 毛片在线播放网站| 欧美激情按摩在线| 精品三级在线| 欧美精品123| 国产中文一区| 中文字幕12页| 国产亚洲美州欧州综合国| 欧美极品aaaaabbbbb| 欧美图区在线视频| 污污的视频网站在线观看| 久久夜色精品国产亚洲aⅴ| 亚洲成人不卡| 国产精品自拍首页| 欧美精品日韩| 嫩草视频免费在线观看| 久久久电影一区二区三区| 日韩免费不卡视频| 日韩欧美精品在线视频| 尤物网在线观看| 国产91色在线|| 开心激情综合| 91免费黄视频| 国产成人免费在线观看不卡| 亚洲欧美综合7777色婷婷| 日本高清无吗v一区| 亚欧在线观看视频| 国产69精品久久久久9| 久久的色偷偷| 老汉色影院首页| 国产一区二三区好的| 萌白酱视频在线| 欧美丝袜第三区| bbbbbbbbbbb在线视频| 国产aaa精品| 欧美人与拘性视交免费看| 免费av观看网址| 97se亚洲国产综合自在线不卡| 久久精品免费av| 精品av久久707| 国产美女情趣调教h一区二区| 国产精华一区| 亚洲精品裸体| 激情综合丁香五月| 精品福利免费观看| 五月天婷婷在线观看| 欧美亚洲在线观看| 亚洲人和日本人hd| 女人另类性混交zo| 久久久99精品免费观看| 天堂网免费视频| 国产亚洲欧美日韩一区二区| 国产欧美在线观看免费| 视频一区二区精品| 另类小说综合欧美亚洲| 久久久久久久久久97| 欧美一区二区三区视频免费| 新版中文在线官网| 国产区二精品视| 久久精品30| 337人体粉嫩噜噜噜| 欧美日韩国产一二三| 国产精品一区二区三区视频网站| av一区观看| 国产视频一区在线观看一区免费| 黄色正能量网站| 欧美日韩一区成人| 综合久久2019| 国模一区二区三区私拍视频| 欧美一级视频| а天堂中文在线资源| 欧美一区二区三区免费大片 | 欧美久久一区| 国产视频久久久久久| 色婷婷久久久亚洲一区二区三区| 91精品国产综合久久久久久豆腐| 91精品久久久久久久久中文字幕| 国内精品福利| 日韩精品卡通动漫网站| 欧美日韩成人综合在线一区二区| 2024最新电影免费在线观看| 精品蜜桃一区二区三区| 麻豆精品新av中文字幕| 国产一级二级三级视频| 亚洲欧美日韩另类| 精品午夜视频| 91精品91久久久中77777老牛| 国产精品久久99| 黑人精品一区二区三区| 国产精品久久久亚洲| 欧美精品福利| 一级片视频免费看| 日韩欧美一级二级三级久久久| 中文字幕在线官网| 日本一二三区视频在线| 91婷婷韩国欧美一区二区| 国产原创中文av| 日本电影亚洲天堂| 国语精品一区| 香蕉久久久久久久| 日韩av影视在线| 免费精品一区| 一道本视频在线观看| 午夜精品久久久久久久久久久| 亚洲xxxxxx|