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

API開發,gRPC還是GraphQL?

譯文 精選
開發 架構
GraphQL既是一種用于API的查詢語言,且GraphQL對API中的數據提供了一套易于理解的完整描述,使得客戶端能夠準確地獲得它需要的數據,而且沒有任何冗余,也讓API更容易地隨著時間推移而演進,還能用于構建強大的開發者工具。

?譯者 | 崔皓

審校 | 云昭

gRPC是由Google開發的一個高性能、通用的開源RPC框架,主要面向移動應用開發且基于HTTP/2協議標準而設計,同時支持大多數流行的編程語言。

GraphQL既是一種用于API的查詢語言,且GraphQL對API中的數據提供了一套易于理解的完整描述,使得客戶端能夠準確地獲得它需要的數據,而且沒有任何冗余,也讓API更容易地隨著時間推移而演進,還能用于構建強大的開發者工具。

兩者看起來并用途不相同,但其實在通信場景中很多開發者面臨如何選擇的問題。本文筆者帶領大家從實用的角度去一一剖析gRPC與GraphQL的取舍之道!

一、開篇

本文主要介紹使用gRPC和GraphQL的時機,先說結論:推薦大家在客戶端與服務器之間的通信場景中使用GraphQL,在服務器與服務器之間的通信場景使用gRPC。此外,文末會介紹關于例外情況的處理方式。

二、背景介紹

gRPC是由谷歌在2016年發布的,它是一種高效且對開發者友好的服務器間通信協議。GraphQL是由Meta公司在2015年發布的,是一種高效的、對開發者友好的客戶端-服務器通信協議。兩者都比REST有明顯的優勢,并且有很多共同點。

我們將在文章中花大量的篇幅比較它們的特點,然后總結每個協議的優點和缺點。最后,我們會描述每種協議都適合哪些特定的領域,以及什么時候會出現跨領域使用不同協議。

三、比較gRPC和GraphQL的功能

1.界面設計

gRPC和GraphQL都是界面描述語言(IDL),描述了兩臺計算機如何進行通信。它們適用于不同的編程語言,我們可以使用codegen工具來生成多種語言的類型化接口。IDL抽象出了傳輸層;GraphQL與傳輸無關,但通常工作在HTTP之上,而gRPC則工作在HTTP/2之上。我們不需要知道傳輸層的細節,比如REST中的方法、路徑、查詢參數和正文格式。我們只需要知道針對一個獨立的節點,如何使用高級客戶端庫與之通信。

2.信息格式

gRPC使用協議緩沖區(又稱protobufs),這是一種二進制格式,只包括數值(傳遞的內容),而GraphQL使用JSON,它是基于文本的,除了數值外還包括字段名(數值的含義)。二進制格式與較少的信息發送相結合,通常導致gRPC消息比GraphQL消息小。(雖然高效的二進制格式在GraphQL中是可行的,但它很少被使用,也不被大多數的庫和工具所支持)。

影響消息大小的另一個方面是overfetching(過度獲取):我們決定是否只請求特定的字段或總是接收所有的字段(通過避免"overfetching"過濾掉我們不需要的字段,只接受我們需要的字段)。因此,對于GraphQL而言利用了overfetching技術可以在請求中指定需要哪些字段,而在gRPC中,我們可以使用FieldMasks作為請求的可重用的過濾器,該過濾器和overfetching有異曲同工之妙。

gRPC使用二進制格式的另一個好處是,比GraphQL信息的序列化和解析更快。當然,缺點也很明顯,它比JSON而言更難查看和調試,畢竟JSON的信息結構更加適合人類閱讀。在Temporal項目中(開源微服務平臺),我們默認使用protobuf的JSON格式,以利于開發者體驗的可見性。(這失去了二進制格式帶來的效率,但更看重效率的用戶可以切換到二進制)。

3.默認值

gRPC不在消息中包括默認值,而GraphQL可以對參數進行默認值的設置,但不能對請求字段或響應類型進行默認值設置。這導致gRPC消息尺寸較小的另一個因素。它還影響了消費gRPCAPI的DX,在不設置輸入字段和將該字段設置為默認值沒有什么區別,默認值也是基于字段類型的值。我們不能把`behavior`枚舉輸入字段默認為`BEHAVIOR_FOO=2`--我們必須把默認值放在第一位(`BEHAVIOR_FOO=0`),這意味著它在總是默認值,或者我們遵循推薦的做法,定義一個`BEHAVIOR_UNSPECIFIED=0`枚舉值。

enumBehavior{
behavior_unspecified=0
behavior_foo=1;
behavior_bar=2;
}

API提供者需要傳達UNSPECIFIED的意思(通過記錄"unspecified將使用默認行為,目前是FOO"),消費者需要考慮服務器的默認行為在未來是否會改變(如果服務器在消費者正在創建的業務實體中保存了UNSPECIFIED/0值,而服務器后來改變了默認行為,那么該實體將會有所不同),以及這種改變是否是所期望的。如果并不希望如此,客戶需要將該值設置為當前的默認值。

這種方式比gRPC版本更簡單,這種方式可以知道如果不提供字段會發生什么,而且我們不需要考慮是否要自己傳遞默認值。

其他類型的默認值也有一些特殊情況。對于數字而言,有時默認的0是一個有效的值,而有時它將意味著一個不同的默認值。對于布爾型,默認的false會導致字段被負數命名。當我們在編碼時給布爾變量命名時,我們使用正向命名。例如,我們通常會聲明letretryable=true而不是letnnotallow=false。人們通常認為前者更易讀,因為后者需要額外的步驟來理解雙重否定("notRetryable是假的,所以它是可重試的")。但是如果我們有一個gRPCAPI,我們希望默認狀態是可重試,那么我們就必須把這個字段命名為nonRetryable,因為可重試字段的默認值是false,就像gRPC中的所有布爾值一樣。

4.請求格式?

在gRPC中,我們一次調用一個方法。如果我們需要的數據比一個方法所返回的要多,就需要調用多個方法。如果我們需要第一個方法的響應數據,以便知道下一步調用哪個方法,那么我們就會連續進行多次往返。除非我們和服務器在同一個數據中心,否則會造成很大的延遲。這個問題被稱為underfetching,指請求的返回的數據信息不夠,這樣導致我們需要發多個請求去獲取數據。

這也是GraphQL設計能夠解決的問題之一。在高延遲的移動連接中,能夠在一次請求中獲得需要的所有數據,這一點特別重要。在GraphQL中,我們在請求中發送一個字符串,其中包括我們想要調用的所有方法(稱為queries和mutations)以及基于第一層結果的嵌套數據。嵌套的數據可能需要從服務器到數據庫的后續請求,但它們通常位于同一個數據中心,應該有亞毫秒級別的網絡延遲。

GraphQL的請求靈活性讓前端和后端團隊的耦合度降低。前端開發者不需要等待后端開發者在方法的響應中添加更多的數據(這樣客戶端就可以在單個請求中接收數據),而是可以在請求中添加更多的查詢或嵌套結果字段。當有一個涵蓋整個數據的GraphQLAPI時,后端發生變化而導致前端團隊時受阻的情況就會明顯減少。

GraphQL請求指定了所有需要的數據字段,這意味著客戶端可以使用聲明式數據獲取(declarativedatafetching):生命視圖組件接下來所需要的數據,而不是強制性地獲取數據(比如調用`grpcClient.callMethod()'),GraphQL客戶端庫將這些合并成一個請求并提供數據,在數據變化時也可以提供數據。在Web開發中使用React而不是jQuery:聲明組件應該是什么樣子,并在數據變化時讓組件自動更新,而不是必須用jQuery操作DOM。

GraphQL請求格式的另一個效果是增加了可見性:服務器可以看到每個被請求的字段。可以跟蹤字段的使用情況,看到客戶何時停止使用已廢棄的字段,這樣就知道何時可以刪除它們,而不用支持哪些應該被摒棄的東西。像ApolloGraphOS和Stellate這樣的常用工具中都有跟蹤功能。

5.向前兼容

gRPC和GraphQL都有很好的向前兼容性;也就是說,很容易以不破壞現有客戶端的方式更新服務器。這對已經過時的移動應用程序來說特別重要,但對于加載在用戶瀏覽器標簽中的SPA在服務器更新后繼續工作來說,也是必要的。

在gRPC中,你可以通過對字段進行數字排序、用新的數字添加字段,以及不改變現有字段的類型/數字來保持向前兼容。在GraphQL中,你可以添加字段,用`@deprecated"`指令廢除舊的字段(并讓它們發揮作用),并避免將可選參數改為必填。

6.傳輸

gRPC和GraphQL都支持服務器向客戶端傳輸數據:gRPC有serverstreaming,GraphQL有Subscriptions和指令@defer、@stream和@live。gRPC的HTTP/2也支持客戶端和雙向流(盡管當一方是瀏覽器時無法做到雙向)。HTTP/2還通過多路復用提高了性能。

gRPC有內置的網絡故障重試,該功能在GraphQL中沒有直接體現,而是在與之對應的客戶端庫中支持網絡故障重試,比如ApolloClient的RetryLink。

gRPC無法使用大多數API代理,比如ApigeeEdge,它是以HTTP頭為操作對象的,而當客戶端是瀏覽器時,我們需要使用gRPC-Web代理或Connect(雖然現代瀏覽器確實支持HTTP/2,但沒有瀏覽器API允許對請求進行足夠的控制)。默認情況下,GraphQL不使用GET緩存:許多HTTP緩存都是在GET請求上工作的,而大多數GraphQL庫默認使用POST。GraphQL有許多使用GET的選項,包括將操作放在查詢參數中(當操作字符串不太長時是可行的),建立時間持久化查詢(通常只用于私有API),以及自動持久化查詢。緩存指令可以在字段級提供(整個響應中最短的值被用于Cache-Control頭的`max-age')。

7.模式和類型

GraphQL有一個模式,服務器為客戶端開發人員發布并用于處理請求。它定義了所有可能的queries和mutations,以及所有的數據類型以及它們之間的關系。這種模式使來自多個服務的數據易于結合。GraphQL有schemastitching(將多個GraphQLAPI組合成一個代理schema的API)和federation(每個下游API聲明如何關聯共享類型,網關通過向下游API發出請求并結合結果自動解決請求)的概念,用于創建一個超圖(所有數據的圖,整合了較小的子圖/部分模式)。也有一些庫將其他協議代理給GraphQL,包括gRPC。

伴隨著GraphQL的模式而來的是自檢系統:以標準方式查詢服務器的能力,以確定其能力是什么。所有的GraphQL服務器庫都有自檢功能,還有一些基于自省的高級工具,如GraphiQL、請求提示與graphql-eslint和ApolloStudio,其中包括一個帶有字段自動完成、提示、自動生成文檔和搜索查詢的IDE。gRPC有自檢功能,但它沒有那么廣泛,使用它的工具也比較少。

GraphQL模式實現了反應式的規范化客戶端緩存:因為每個(嵌套的)對象都有一個類型字段,類型在不同的查詢之間是共享的,我們可以告訴客戶端哪個字段是類型的ID,客戶端可以將數據對象進行規范化存儲。這就實現客戶端的功能,比如查詢結果或更新會觸發對視圖組件的更新,而這些視圖組件依賴于包含相同對象的不同查詢。

gRPC和GraphQL類型之間的區別:

  • gRPC第3版(截至編寫時的最新版本)沒有必填字段:相反,每個字段都有一個默認值。在GraphQL中,服務器可以區分一個值是否存在,模式(schema)可以表明一個參數必須存在,或者一個響應字段將始終存在。
  • 在gRPC中,沒有標準的方法可以知道一個方法是否會變更狀態(與GraphQL相比,gRPC將queries和mutations分開)。
  • gRPC中支持Map類型,但GraphQL中不支持:如果你有一個數據類型,如`{[key:string]:T}`,需要通過JSON字符串類型實現。

GraphQL雖然具有模式和靈活查詢的特點,但是對于公共API來說,速率限制更加復雜(對于私有API,允許列出持久查詢)。因為可以在一個請求中包含任意多的查詢,而且查詢可以任意嵌套的數據,所以不能僅僅限制客戶端的請求數量。還需要對整個操作實施成本分析率限制,例如通過使用graphql-cost-analysis-cost-analysis庫將各個領域的成本相加,并將其傳遞給漏斗算法。

四、小結

以下將gRPc和GraphQL的異同以及優缺點通過摘要的方式呈現給大家,方便比較分析。

1.gRPC和GraphQL的相似之處

  • 使用codegen的類型化接口
  • 抽離網絡層
  • 可以有JSON響應
  • 服務器流媒體
  • 良好的前向兼容性
  • 可以避免過度獲取

2.gRPC和GraphQL的優劣勢

(1)gRPC優勢?

  • 二進制格式

更快的網絡傳輸

更快的序列化、解析和驗證

然而,比JSON更難查看和調試

  • HTTP/2

多重化

客戶端和雙向流媒體

  • 內置重試和最后期限

(2)gRPC劣勢?

  • 需要代理或連接以從瀏覽器使用
  • 無法使用大多數API代理機構
  • 沒有標準的方法可以知道一個方法是否會突變狀態

(3)GraphQL優勢?

  • 客戶決定它希望返回哪些數據字段。結果是:沒有取不到的數據團隊解耦提高辨識度
  • 更容易合并來自多種服務的數據
  • 進一步發展自檢和工具化
  • 聲明性的數據取用
  • 反應式的規范化客戶端緩存

(4)GraphQL劣勢

  • 如果我們已經有了可以公開的gRPC服務,那么增加一個GraphQL服務器就需要更多的后臺工作
  • HTTPGET緩存默認不工作
  • 對于公共API來說,速率限制更為復雜
  • MAP類型不被支持
  • 低效的文本運輸

3.如何取舍?

(1)服務器到服務器(Server-to-Server)

在服務器到服務器的通信中,低延遲往往很重要,而且有時需要更多類型的流,gRPC是明確的標準。然而,在有些情況下,我們可能會發現GraphQL的一些好處更為重要。

  • 我們正在使用GraphQLfederartion或模式拼接來創建所有業務數據的超圖,并決定由每個服務發布GraphQL子圖。我們創建了兩個超圖端點:一個是由客戶調用的外部端點,一個是由服務調用的內部端點。在這種情況下,對于服務來說,暴露一個gRPCAPI可能是不值得的,因為它們都可以通過超圖方便地到達。
  • 服務的數據字段將發生變化,并讓字段級的使用情況可見,這樣就可以刪除被廢棄的字段(而不是永遠維護它們)。

還有一個問題是,我們是否應該自己做服務器到服務器的通信。對于數據獲取(GraphQL的查詢),這是獲得響應的最快方式,但對于修改數據(變更),像MartinFowler的"同步調用被認為是有害的",也就導致我們使用異步、事件驅動的架構,在服務之間進行編排或協調。微服務模式建議在大多數情況下使用后者,為了保持DX和開發速度,我們需要一個基于代碼的協調器而不是基于DSL的協調器。一旦在像Temporal這樣基于代碼的協調器中工作時,就不再提出網絡請求--平臺會可靠處理這一切。在我看來,這就是未來。

(2)客戶端-服務器(Client-to-Server)

在客戶-服務器通信中,延遲很高。我們希望能夠在一次往返中獲得所有數據,能夠靈活地為不同的視圖獲取對應的數據,并擁有強大的緩存能力,所以GraphQL是明顯的贏家。然而,在有些情況下,我們可以選擇使用gRPC來代替。

  • 如果已經有可以使用的gRPCAPI了,那么再添加一個GraphQL服務器就不太值得了。
  • JSON并不適合這些數據(例如,我們正在發送大量的二進制數據)。

原文鏈接:https://stackoverflow.blog/2022/11/28/when-to-use-grpc-vs-graphql/

譯者介紹

崔皓,51CTO社區編輯,資深架構師,擁有18年的軟件開發和架構經驗,10年分布式架構經驗。曾任惠普技術專家。樂于分享,撰寫了很多熱門技術文章,閱讀量超過60萬。《分布式架構原理與實踐》作者。?

責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2024-04-16 12:00:14

API系統

2023-11-09 09:13:48

GraphQLAPI 架構

2023-03-10 15:03:37

Web 應用程序API開發

2023-03-16 18:04:00

APIWeb 應用程序開發

2022-08-02 19:03:19

RestAPI集成

2020-09-28 06:57:39

Node.jsGraphQLAPI

2019-12-09 08:00:00

GraphQLAPI架構

2022-05-06 09:52:17

REST接口API

2024-06-24 00:20:00

API應用程序接口

2021-05-07 09:06:55

GraphQLAPI 以太坊

2020-10-27 09:18:19

性能測試查詢

2023-08-01 11:14:07

開源Api軟件

2021-05-28 07:03:24

Vue GraphQL AP前端

2021-12-15 09:00:00

GraphQL安全漏洞

2025-11-07 01:25:00

2021-04-21 09:04:43

開發SpringBoot框架

2023-08-30 15:49:51

GraphQLAPI 開發

2023-08-14 09:00:00

APIgRPCREST

2020-01-18 14:55:03

架構運維技術

2024-01-09 09:09:45

RESTGraphQL
點贊
收藏

51CTO技術棧公眾號

狠狠狠综合7777久夜色撩人| 欧美黑人国产人伦爽爽爽| 黄色一级视频播放| 国产一级一级国产| 亚洲小说春色综合另类电影| 亚洲人成精品久久久久久| 日韩美女在线看| 熟女少妇内射日韩亚洲| 高清在线一区| 亚洲男女一区二区三区| 欧美性xxxx极品hd满灌| 91中文在线视频| 91n在线视频| 欧洲精品99毛片免费高清观看| 亚洲色图第一区| 国产精品xxxx| 天堂久久精品忘忧草| 欧美中文字幕精在线不卡| 国产精品网站一区| 久久韩国免费视频| 波多野结衣在线免费观看| av片在线观看免费| av电影在线观看一区| 日韩av男人的天堂| 国产美女福利视频| 日韩理论电影中文字幕| 一道本成人在线| 免费精品视频一区二区三区| 亚洲一区二区三区蜜桃| 国产一区高清| 亚洲人成影院在线观看| 久久久久久精| 成人性生交大片免费看无遮挡aⅴ| 亚洲高清影院| 台湾成人免费视频| 国际精品欧美精品| 欧美一级在线视频| 免费人成在线观看视频播放| 青草久久伊人| 国产麻豆一精品一av一免费 | 久久精品国产精品亚洲红杏| 久久成人国产精品| 亚洲中文字幕无码av永久| 国产大片在线免费观看| 97人人精品| 日韩精品免费一线在线观看| www.天天射.com| 密臀av在线播放| 夜夜嗨av一区二区三区| 水蜜桃亚洲一二三四在线| 亚洲欧美激情国产综合久久久| 免费观看30秒视频久久| 青青草原一区二区| 国产亚洲精品成人| 色综合天天爱| 亚洲视频在线视频| 免费在线观看成年人视频| 国产精品qvod| 欧美高清性hdvideosex| 欧洲精品久久| 无码人妻一区二区三区免费| 激情久久中文字幕| 精品偷拍一区二区三区在线看 | 中文字幕22页| 欧美日韩在线精品一区二区三区激情综合 | 成人情视频高清免费观看电影| 国产午夜精品一区二区理论影院 | 一区二区视频在线| 亚洲午夜精品久久久久久浪潮| 天堂在线资源8| 老汉av免费一区二区三区| 奇米四色中文综合久久| 影音先锋亚洲天堂| 欧美日韩一区自拍| 少妇高潮 亚洲精品| 精品人妻无码一区| 国产探花在线精品| 日韩在线观看免费全集电视剧网站| 香蕉网在线播放| 欧美午夜精彩| 欧美体内谢she精2性欧美| 免费在线a视频| 99re66热这里只有精品4| 欧美日韩精品中文字幕| 精品久久久久久无码中文野结衣| ****av在线网毛片| 婷婷开心久久网| 免费在线观看毛片网站| 9999精品| 一本高清dvd不卡在线观看| 热久久精品国产| 91国产精品| 亚洲精品720p| 日本激情视频在线播放| 少妇熟女视频一区二区三区| 色网在线观看| 欧美性高跟鞋xxxxhd| 中文字幕久久av| 豆花视频一区二区| 中文字幕av一区二区| 免费一级全黄少妇性色生活片| 亚洲男人影院| 亚洲伊人第一页| 熟妇人妻系列aⅴ无码专区友真希 熟妇人妻av无码一区二区三区 | 国产1区2区在线| 日韩av电影资源网| 欧美v日韩v国产v| 日本japanese极品少妇| 99九九热只有国产精品| 午夜精品久久久久久久久久久久久 | 亚洲黄色片免费看| 狼人精品一区二区三区在线| 日韩成人中文字幕在线观看| 天天色天天综合| 国产精品亚洲欧美| 狠狠躁夜夜躁人人躁婷婷91| 中文字幕国产精品久久| 无码人妻精品一区二区三应用大全| 欧美韩日一区| 日本高清不卡在线| 狠狠躁日日躁夜夜躁av| 中文字幕亚洲成人| 欧美 日韩 国产 高清| 外国成人毛片| 亚洲一二三在线| 少妇极品熟妇人妻无码| 日韩精品免费一区二区三区| 欧美激情精品久久久久久| 中文字幕在线视频第一页| 99re热这里只有精品视频| 香蕉视频免费版| 2020国产在线| 精品久久人人做人人爰| 亚洲综合视频网站| 秋霞影院一区二区| 欧美极品jizzhd欧美| 18av在线播放| 91精品免费在线观看| 少妇视频在线播放| 日韩精品欧美成人高清一区二区| 日韩免费av一区二区| 蜜桃视频在线观看www| 亚洲美女偷拍久久| 国产精品视频自在线| 97超碰青青草| 91欧美在线视频| 色综合天天视频在线观看| 日本一区二区在线观看视频| 欧美h版在线| 国产精品日日摸夜夜添夜夜av| 你懂的免费在线观看| 91视频免费播放| 极品尤物一区二区三区| 日本h片在线| 日韩亚洲欧美在线观看| 一级黄色片日本| 九九**精品视频免费播放| 一区高清视频| 日韩精品一级毛片在线播放| 最近2019中文字幕在线高清| 国产超碰人人爽人人做人人爱| 国产精品自拍网站| 天堂а√在线中文在线| 日本99精品| 欧美日韩国产成人高清视频| 国内爆初菊对白视频| 亚洲五月六月丁香激情| 2一3sex性hd| 久久国产直播| 91pron在线| 成人黄色网址| 亚洲一区在线电影| 波多野结衣三级视频| 亚洲激情视频| 免费精品视频一区| 欧美成人免费全部网站| 欧美成人剧情片在线观看| 国产视频www| 国产精品成人一区二区艾草| 国产精品久久久久野外| 影音先锋久久精品| 欧美污视频久久久| 日韩精品第二页| 久久免费福利视频| 自拍偷拍99| wwwxxx在线观看| 亚洲午夜久久久久久久久电影院| 动漫av在线免费观看| 爽爽窝窝午夜精品一区二区| 日韩美女毛茸茸| 国产超级va在线视频| 精品第一国产综合精品aⅴ| 欧美在线一级片| 丝袜a∨在线一区二区三区不卡| 中文字幕欧美日韩一区二区三区| 国产成人一二| 人人做人人澡人人爽欧美| 欧美jizz18性欧美| 亚洲精品狠狠操| 国产精品亚洲欧美在线播放| 精品久久久精品| 一区二区三区四区免费| 久久精品国产亚洲aⅴ| 无码人妻aⅴ一区二区三区日本| 日韩人体视频| 亚洲自拍偷拍区| 日韩一区二区三区在线免费观看| 欧美日韩高清在线观看| 国产区视频在线播放| 精品日本一线二线三线不卡| 五月婷婷六月婷婷| av在线不卡观看免费观看| 亚洲 欧美 另类人妖| av成人天堂| 神马影院午夜我不卡| 一区二区三区在线资源| 91极品女神在线| 国内精品久久久久国产| 亚洲视频在线观看免费| 偷拍精品一区二区三区| 欧美在线观看禁18| 97久久久久久久| 一区二区在线看| 国产黄a三级三级| 国产欧美日韩三级| 一区二区三区少妇| 成人激情动漫在线观看| 黄色a级三级三级三级| 99亚洲精品| 成人性生活视频免费看| 午夜精品一区二区三区国产 | 全球成人中文在线| 日本手机在线视频| 国产不卡一二三区| 蜜桃传媒视频麻豆第一区免费观看| 欧洲精品99毛片免费高清观看| 91精品久久久久久久久中文字幕| 午夜无码国产理论在线| 青青久久av北条麻妃黑人| 96av在线| 97高清免费视频| 国产99re66在线视频| 日韩在线高清视频| 国产又黄又大又爽| 欧美视频在线免费看| 日韩精品视频播放| 久久综合狠狠综合| 国产精品无码电影| av色综合久久天堂av综合| 亚洲精品国产成人av在线| 国产a级毛片一区| 无码人妻一区二区三区一| 国产一区二区三区四区五区入口| 亚洲另类第一页| 狠狠色丁香婷综合久久| 制服丝袜综合网| 精品一区二区三区免费观看 | 亚洲综合色一区| 国产午夜精品在线观看| 国产人妻精品午夜福利免费| 国产成人免费视频网站| 激情小说欧美色图| eeuss国产一区二区三区| 午夜福利三级理论电影| 成人动漫一区二区在线| 亚洲黄色在线网站| 久久亚区不卡日本| 欧美黄色高清视频| 日韩美女视频一区二区| 免费国产羞羞网站美图| 一区二区三区四区视频精品免费| 欧美日韩偷拍视频| 黄色成人在线免费| 色老头在线视频| 在线亚洲一区二区| 伊人网视频在线| 欧美一区在线视频| 亚洲av片在线观看| 亚洲性生活视频在线观看| 国产在线观看91| 欧美激情精品久久久久久| 亚洲欧洲自拍| 日韩av日韩在线观看| 亚洲成a人片777777久久| 91免费观看网站| 日韩视频在线直播| 国产嫩草一区二区三区在线观看| 欧美hdxxx| 在线一区二区视频| 在线观看三级网站| 欧美精品播放| 男人的天堂99| 狠狠色丁香婷综合久久| 人妻无码中文久久久久专区| 91美女福利视频| 老头老太做爰xxx视频| 国产精品久线在线观看| 国产一级视频在线观看| 高潮白浆女日韩av免费看| 亚洲欧美另类在线视频| 欧美三区在线观看| 日韩特级黄色片| 欧美色精品在线视频| 欧美熟妇乱码在线一区| 最好看的2019的中文字幕视频| 国产传媒在线播放| 日本欧美一级片| 欧美激情三级| 午夜精品电影在线观看| 激情综合视频| 亚洲精品第三页| 久久亚洲综合色一区二区三区| 中文字幕av免费在线观看| 欧洲色大大久久| 性xxxx搡xxxxx搡欧美| 久久中文字幕在线| 老司机成人影院| 国产99久久精品一区二区| 国产一区影院| 欧美在线日韩精品| 99pao成人国产永久免费视频| 欧美一级特黄aaa| 久久久久88色偷偷免费| 精品人妻一区二区乱码| 国产色91在线| 在线观看免费av片| 亚洲精品福利免费在线观看| 91在线品视觉盛宴免费| 国产ts人妖一区二区三区| 91精品久久| 日本久久中文字幕| 亚洲1区在线| 亚洲不卡一卡2卡三卡4卡5卡精品| 一区二区视频欧美| 亚洲免费在线播放视频| 国产精品久久久久久久久图文区| 伊人久久中文字幕| 日韩不卡中文字幕| 欧美男男激情videos| 精品国产91亚洲一区二区三区www| 国产在线欧美| 女教师高潮黄又色视频| 亚洲最大成人综合| 国产 日韩 欧美 综合| 九九热精品视频国产| 欧美专区视频| www.国产二区| 日韩电影在线免费| 91麻豆制片厂| 欧美三级日本三级少妇99| 成人一区二区不卡免费| 国产精品久久久久久久久久ktv| 夜夜春成人影院| 亚洲色图校园春色| 亚洲日本视频在线观看| 精品国产成人系列| 99色在线观看| 久久一区免费| 日韩激情视频网站| 日本不卡一区视频| 欧美精选一区二区| 好吊日视频在线观看| 国产经典一区二区三区| 亚洲激情女人| 五月天综合视频| 欧美日韩成人一区| 欧美男男video| 久久视频在线观看中文字幕| 日韩高清在线一区| 国产精品丝袜一区二区| 日韩一区二区在线看| 91超碰在线| 日韩欧美电影一区二区| 久久国产福利国产秒拍| 欧美极品aaaaabbbbb| 亚洲国模精品一区| 91精品国产66| 在线观看av的网址| 国产一区二区三区免费| 免费一级特黄特色大片| 日韩精品亚洲元码| 欧美videos粗暴| 免费拍拍拍网站| 久久欧美中文字幕| 99精品视频在线播放免费| 97免费中文视频在线观看| 国产亚洲精品美女久久久久久久久久| 岛国毛片在线播放| 又紧又大又爽精品一区二区| 日韩大胆视频| 91九色蝌蚪国产| 午夜在线精品| 亚洲一区电影在线观看| 亚洲精品国产精品久久清纯直播 | 天堂俺去俺来也www久久婷婷| 中文字幕视频在线免费观看| 亚洲一区二区视频在线观看| 福利成人在线观看| 91免费版黄色| 日韩高清欧美激情|