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

TeaDSL:支持任意 OpenAPI 網關的多語言 SDK 方案

開發 開發工具
在以云計算為主角的開發者視界中,OpenAPI 是絕對的主角。要發短信,用 OpenAPI;要管理資源,用 OpenAPI;要管理權限,用 OpenAPI。如果一個 OpenAPI 解決不了你的問題,那就再來一個。

 ?在以云計算為主角的開發者視界中,OpenAPI 是絕對的主角。要發短信,用 OpenAPI;要管理資源,用 OpenAPI;要管理權限,用 OpenAPI。如果一個 OpenAPI 解決不了你的問題,那就再來一個。在今天,開放平臺及 OpenAPI 隨處可見,它是系統與系統之間集成的重要橋梁。但 OpenAPI 用起來是否真的舒服,這要打一個大大的問號。本文將介紹 OpenAPI 領域下的難題和一些解決方案。

背景

阿里云有位工程師叫樸靈,熱愛開源,是活躍在 Github 上的國內技術大牛之一。在阿里工作 6 年之際,樸靈產生了離職的想法,打算去一家創業公司再戰高峰。走之前,樸靈做了一些研究工作,他發現阿里云在功能和產品上可以說是一流的云計算廠商,是創業公司的首選,但由于過去的業務中寫過大量的 Node.js SDK,對開發者體驗有著自己的體感,他覺得在開發者體驗關懷上,阿里云做得還不夠好。來自一個熱血工程師最樸素的想法,自己何不先留下來,去把這件事情做好,于是,樸靈加入了阿里云開放平臺負責 SDK 業務,期間,他和團隊研發了專利 TeaDSL,下面樸靈將分享 TeaDSL 如何解決多語言 SDK 的問題。

使用 OpenAPI 的痛苦

在過去,我們經常說的 OpenAPI,通常的做法是,開發好服務端的接口,然后在文檔里簡單寫幾個參數描述,就直接丟給客戶去用。反正我是開發好了,我這里是好的,客戶能不能用起來我是不用管的。

?

??

??


 

圖 1 第一代的 OpenAPI 通常僅由簡單的文檔及實際的接口構成

然而接下來的問題就來了。首先,文檔上寫得不清不楚的參數,沒有試過,完全不知道它到底能不能 Work。其次,OpenAPI 總得有一定的權限認證吧,那么總得有一個簽名啥的,每個客戶都要寫一遍,關鍵是總是沒法寫對。再次,不同的客戶所使用的編程語言不一樣,得把接口重新包裝才能用。

總算費心費力調通了接口,以為可以高枕無憂的時候,咋接口老是報錯,網絡連不上,返回的數據不對,諸如此類。再往后,OpenAPI 可能總是要發生一點變化什么的,總是出現一些數據結構發生變化,不兼容之類的問題。

一個 OpenAPI 到最后,不光是用戶使用起來覺得很氣,作為維護者也是很艱難的。當公布一個 OpenAPI 后,第一步給出簡單的文檔后,會發現除了要把參數詳情寫得越來越完善準確外,還得給出簽名算法,讓不同語言的開發者來接入。然而給出簽名算法后,會發現只有一些開發者能順利完成,大部分的開發者只能眼巴巴地請你幫忙提供一個 SDK。好吧,那就提供一下我最拿手的 Java 語言的簽名,提供一個核心 SDK 唄。

?

??

??


 

圖 2 第二代的 OpenAPI 會有 SDK 的實現,但僅有少許的語言支持

隨著這個 OpenAPI 接口的用戶越來越多,一個客戶說我要用 C++ 來對接你,另一個客戶說我要用 Python 來對接你,于是,我一個 Java 程序員,怎么就要寫那么多語言的 SDK 呢。沒有辦法,如果不提供良好的 SDK,客戶說,沒有 IDE 提示呢,我怎么寫代碼呢。

總而言之,在 OpenAPI 的應用過程中,一件簡單的事情,會變得非常復雜:

  • 需要提供良好的 API 文檔,作為最基本的要求
  • 需要提供 SDK,保障開發者的編碼體驗,封裝細節,代碼提示等
  • 需要提供 Code Sample,更理解接口的使用效果
  • 如果有 CLI 就更好了,這樣連 bash 腳本寫起來也更方便
  • 如果沒有 Test Cases 作為日常的持續集成,接口質量可能存在問題

上面這些要求,如果加上多種編程語言的條件,就會演變為一件細碎而又繁多的體力活。并且這中間不能有任何的變動,因為僅僅是一點點的 OpenAPI 變動,就需要連帶整個下游發生變化。如果一個地方沒有保持一致,那么客戶問題就會出現。

?

??

??


 

圖 3 當用戶量變多,OpenAPI 的提供者需要提供完善的工具及更多的編程語言支持

通常為了解決此類的問題,以及 OpenAPI 的諸如簽名校驗,限流,生成 SDK、文檔等等,業界通常會使用 API 網關來承擔這些橫向的責任。

然而,作為筆者所在的環境下,會發現,我們身邊的網關有點多。于是不同的網關有不同的風格,不同的簽名算法,不同的序列化格式。于是上述的過程要根據不同網關的數量,進行翻倍:

?

??

??


 

圖 4 當一個企業變得龐大時,不同風格的 OpenAPI 及網關都會出現

當我們在抱怨使用不同產品的 OpenAPI/SDK 體驗不一致,文檔不對,Demo 出錯等等問題時,真不是因為做這些事情太難,而是太多,太瑣碎。一件簡單的事情,需要做一百次,也就不是簡單的事情了。

TeaDSL 的解決之道

TeaDSL 是由阿里云開放平臺 SDK 團隊主導設計的一門領域特定語言。主要用于解決如下問題:

  • 通過一門中間語言,可以支持不同風格的網關。即使網關下的 OpenAPI 風格各異,也能一致地表達到。
  • 可以通過翻譯的能力,實現對不同編程語言的代碼生成。也就是可以基于統一的中間表達,生成多語言的 SDK。
  • 基于中間表達,我們可以將一組 OpenAPI 視為一個 library,因此可以在這個基礎上實現 OpenAPI 接口的 Code Sample 編寫。進而實現多語言的 Code Sample 統一生成。

因此 TeaDSL 的核心能力就是通過一種中間語法來描述 OpenAPI,提供類似編程語言的能力,來將 OpenAPI、SDK、Code Sample 等場景及語言有機地結合在一起。

在沒有 TeaDSL 之前,對于不同的網關,我們要為它制定獨立的工作流程,即從 OpenAPI 定義到不同語言的 SDK 生成,是獨特的。換一個新的網關風格,就要重新實現這套流程。

?

??

??


 

圖 5 M 個網關都要支持 N 種編程語言,整個工作量是 M * N 的關系

而具有 TeaDSL 后,我們則形成一個中間層。可以將原來的工作收斂起來,我們僅需要關注不同的網關到 TeaDSL 的轉換工作,以及 TeaDSL 到各個編程語言的生成工作。

?

??

??


 

圖 6 經過中間層的隔離,整個工作量變為 M + N 的關系

也就是說,TeaDSL 是在做一件 M * N 到 M + N 的工作。當網關越多,支持的編程語言越多,收益則越大。

一旦這個中間層建立起來,整個 OpenAPI 的應用形式都可以基于它來構建。比如,編寫一個 OpenAPI 的 Code Sample,Test Case 等。

接下來簡單介紹 TeaDSL 是如何實現支持任意風格的網關和多種編程語言的。

如何支持任意風格的網關

對于不同的 API 網關,或者不同產品的 OpenAPI 而言,它們之間的風格可能都千差萬別,因此在很大的程度上,每種風格的 OpenAPI 都有它自己的元數據定義格式。為了減少網關、風格帶來的差異化,業界主要推動的方式是盡量采用標準的定義格式。比如 Swagger 就是其中的佼佼者,它依托于 OpenAPI Specification ,以 RESTful 風格的 OpenAPI 作為基準,形成了一套業界標準。

但這個世界就是這樣不完美,我們現有的大量 OpenAPI 并不是 RESTful 風格的。這導致很多的產品現存的 OpenAPI 在文檔、SDK等場景下,無法使用上 Swagger 這樣強大的生態工具鏈。

為了解決這些問題,我們需要進行兩步操作:

  • 設立一套新的標準,來包容不同風格的 OpenAPI
  • 以這套新的標準,來建設生態工具鏈

如果完成這兩個步驟,那么現實世界上的每一個 OpenAPI,RESTful 或者非 RESTful 的,不需要做任何遷移,也能具有強大的工具鏈支持。

新標準的設計

通過我們的研究發現,無論 OpenAPI 的參數是如何組成的,傳輸是 JSON,還是 XML,乃至自定義協議,OpenAPI 都是基于 HTTP 協議棧進行提供的。也就是說,萬變不離其宗的是 HTTP 協議本身。因此我們確立的基本模型是這樣的:

{ 
protocol: string, // http or https
port: number, // tcp port
host: string, // domain
request: {
method: string, // http method
pathname: string, // path name
query: map[string]string, // query string
headers: map[string]string, // request headers
body: readable // request body
},
response: {
statusCode: number, // http method
statusMessage: string, // path name
headers: map[string]string, // response headers
body: readable // response body
},
}

對于不同風格的 OpenAPI 而言,就像不同風格的建筑,它們的建筑材料都幾乎相同,只是施工手法,組合形式不一樣而已。我們看到的 OpenAPI 風格差異,實質則是序列化過程不同而帶來的不同。我們序列化過程和數據模型分離,將用戶更直觀的數據結構提取出來。

比如從用戶角度出發,一個數據模型是更直觀的事物:

model User { 
username: string,
age: number
}

在不同的網關下,它的傳輸形式可能是 JSON,也可能是 XML,但最終都是 readable,也就是可讀的字節流。

toJSON(user: User): string 
toXML(user: User): string

最終的結果就是:

__request.body = toJSON(user); 
__request.body = toXML(user);

更進一步的過程是,我們會將一個 OpenAPI 的請求/響應包裝為一個類似于編程代碼的方法:

api getUser(username: string): User { 
__request.method = 'GET';
__request.pathname = `/users/${username}`;
__request.headers = {
host = 'hostname',
};
} returns {
var body = readAsJSON(__response.body);
return body;
}

盡管上面的代碼不能實際運行,但大致也看出來我們包容不同的網關、風格的辦法如下:

  • 以 request / response 也就是 HTTP 協議作為核心模型
  • 通過引入一些方法,如 toJSON / toXML / readAsJSON 等方法來分離數據結構和序列化過程
  • 將整個過程包裝成方法

這些方法在不同的編程語言下具有不同的實現,但我們只要定義好統一的簽名,就能確保一致性:

function toXML(data: $Model): string; 
function toJSON(data: $Model): string;

以上就是 TeaDSL 如何實現支持任意網關的方案。整個過程相對抽象,網關間的那些具有差異化的風格,統統交給這些方法去實現,留下來的就只有數據結構。

如何支持不同的編程語言

如果只是能通過一種描述方式來描述不同的 OpenAPI 調用過程,只是完成了一半的工作。另一半的工作是如何將這種描述語言落地到不同的編程語言下。在過去,我們支持不同的編程語言,主要是基于模版的形式來生成不同語言的實際代碼。但這對我們來說仍然還有一些不足之處:

  • 模版的生成方式相對生硬,實現起來容易,但維護起來不那么靈活
  • 生成出來的代碼容易帶來命名沖突,語法錯誤等

從上面的形式也看到,這個方案,被我們設計成了一種 DSL 代碼。因此它是具有自己的詞法、語法、語義規則的,在生成目標編程語言代碼之前,會有一套自身的校驗。DSL 的這些能力是模版所不具備的。

可能對于別的場合,采用 DSL 的形式并不多見。但對于前端工程師而言,這些年已經見的較多了:CoffeeScript、Babel、JSX、TypeScript 等等。為此我們參考了諸多編程語言的設計,最終形成了自己的一套語法。并借鑒編譯器領域的轉譯方式,因此我們可以在模型一致的情況,生成到各種不同的編程語言下。

整個 TeaDSL 的處理流程如下:

?

??

??


 

最終我們支持多種編程語言的場景主要有3個:

  • 基本的多種語言的 SDK
  • OpenAPI 相關的多種語言的 Code Sample
  • OpenAPI 相關的多種語言的 Test Case

通過中間語言的強校驗,生成到多種目標場景,可以解決編程語言支持不全面的問題。同時也大幅節約 OpenAPI 維護者的精力成本,不需要反復手工地編寫不同編程語言下的 Code Sample。隨著對不同編程語言的支持逐步完善,這些中間 TeaDSL 代碼不需要任何操作,即可自動支持到新的編程語言下。

總結

TeaDSL 的主要能力是支持到不同風格的 OpenAPI,同時支持多語言的 SDK、Code Sample 目標生成。最終的目的仍然是打通從 OpenAPI 定義到文檔、到 SDK、CLI 等 OpenAPI 使用場景下的一致性。提供給用戶更統一、專業、一致的使用體驗。同時也大幅降低 OpenAPI 提供者用來支持用戶的成本,通過自動化的方式,節省精力的同時,還減少人為參與時導致的錯誤。

目前 TeaDSL 在阿里云的一些 SDK 上已經有所應用,如:https://github.com/aliyun/aliyun-ccp。阿里云開放平臺在持續努力提升它的整個工具支持生態,以期望能建成比 Swagger 更適配的生態體系。

【本文為51CTO專欄作者“阿里巴巴官方技術”原創稿件,轉載請聯系原作者】

??戳這里,看該作者更多好文??

 

 

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2009-07-17 10:02:29

WPF程序多語言支持

2009-08-03 17:33:01

ASP.NET多語言支

2014-07-09 09:20:06

WPFWPF應用

2021-07-24 11:41:42

前端開發技術

2014-04-16 14:50:20

Spark

2009-08-25 10:44:50

C#實現多語言

2011-08-05 17:54:33

Cocoa Touch 多語言

2012-04-19 11:40:21

Titanium

2010-01-06 13:41:51

.NET Framew

2011-07-26 10:09:08

iPhone 多語言 國際化

2021-06-29 21:48:32

開源語言架構

2021-09-07 10:17:35

iOS多語言適配設計

2013-07-04 10:54:27

Windows 8.1系統升級

2024-05-09 08:14:09

系統設計語言多語言

2022-08-09 07:22:15

語言數據庫程序

2013-10-16 15:50:01

iOS優化本地化

2025-08-11 07:00:00

2010-08-16 10:50:13

Windows 7 S

2023-08-04 10:18:15

2009-08-31 17:13:09

點贊
收藏

51CTO技術棧公眾號

这里只有精品99re| 成人国产精品免费观看动漫| 色噜噜亚洲精品中文字幕| 一个色综合久久| 少女频道在线观看高清| 99精品国产91久久久久久| 国产精品91久久久| 久久中文免费视频| 久久精品凹凸全集| 欧美日韩一级二级三级| 日韩精品一区二区免费| 青青草视频免费在线观看| 狠狠色伊人亚洲综合成人| 午夜精品福利视频| 99精品中文字幕| 久久视频在线观看| 精彩视频一区二区| 天天综合网天天综合色| 日本一区二区三区免费看| 99久久精品免费看国产交换| 国产精品亚洲欧美| 久久国产精品久久久久久| 毛片网站免费观看| 国产精品99无码一区二区| 国产精品一区二区人人爽| 一本不卡影院| 美日韩精品视频免费看| 亚洲av无码一区二区三区人| 91久久精品无嫩草影院| 欧美日韩精品免费观看视频| 免费 成 人 黄 色| 在线三级中文| 国产精品天天摸av网| 国产一区二区无遮挡| 国产精品久久久久久在线| 日韩高清中文字幕一区| 97久久精品国产| 欧美交换国产一区内射| 久久人人88| 在线电影av不卡网址| 国产三级视频网站| 精品三级av在线导航| 欧美一区三区二区| 亚洲a级黄色片| 免费高清视频在线一区| 日本欧美在线| 亚洲卡通欧美制服中文| 亚洲一卡二卡三卡| 大乳在线免费观看| 久久精品视频免费| 欧美日韩在线播放一区二区| 午夜视频免费在线| 91丨九色丨国产丨porny| 99re6在线| 亚洲精品一区二区三区区别| 国产九九视频一区二区三区| 91美女福利视频高清| 国产又大又长又粗| 精品亚洲免费视频| 亚洲va电影大全| 999久久久久久| 国产成人免费视频网站高清观看视频 | 黄色www视频| 粉嫩久久99精品久久久久久夜| 91黄色国产视频| 亚洲黄色小说网| 不卡大黄网站免费看| 精品人伦一区二区三区| 香蕉视频黄色片| 久久久www成人免费毛片麻豆| 欧美亚洲国产免费| 一本一道波多野毛片中文在线| 中文久久乱码一区二区| 青青草原网站在线观看| 欧美v亚洲v| 欧美色另类天堂2015| 91看片就是不一样| 国产亚洲人成a在线v网站| 制服.丝袜.亚洲.另类.中文| 超碰在线超碰在线| 琪琪久久久久日韩精品 | 日本xxxxxxxxx18| 凹凸成人精品亚洲精品密奴| 久久久精品电影| 欧美亚韩一区二区三区| 波多野结衣一区二区| 成人激情免费网站| 欧洲国产精品| 亚洲综合图区| 色婷婷一区二区三区四区| gai在线观看免费高清| av毛片精品| 国产亚洲a∨片在线观看| 亚洲AV成人无码精电影在线| 亚洲国产婷婷| 国产精品男人的天堂| www天堂在线| 久久精品亚洲一区二区三区浴池| 椎名由奈jux491在线播放| wwww亚洲| 欧美私人免费视频| 逼特逼视频在线观看| 精品国产一区一区二区三亚瑟| 久久亚洲欧美日韩精品专区| 影音先锋在线国产| 国产麻豆一精品一av一免费| 久久riav| 中日韩高清电影网| 在线免费亚洲电影| 激情av中文字幕| 日韩精品dvd| 68精品国产免费久久久久久婷婷| 一级淫片免费看| 91麻豆国产自产在线观看| 久久av秘一区二区三区| 激情开心成人网| 精品电影一区二区| 欧美大片xxxx| 青青草97国产精品免费观看| 国内成+人亚洲| 国产丝袜在线| 色婷婷av一区二区| 国模私拍在线观看| 欧美日韩一区二区国产| 国产免费久久av| 国产资源在线看| 性感美女久久精品| 亚洲性图第一页| 91精品国产自产拍在线观看蜜| 日韩女优在线播放| 国产精品国产高清国产| 亚洲一区电影777| 日本r级电影在线观看| 污污的网站在线免费观看| 免费成人av在线| 成人女人免费毛片| 自拍亚洲图区| 91精品国产色综合久久ai换脸| 中文字幕在线观看免费高清 | 熟妇人妻无乱码中文字幕真矢织江| 成人av影音| 欧美极度另类性三渗透| 亚洲欧美激情国产综合久久久| 日韩理论片网站| 成人性生交免费看| 成人激情在线| 国产精品自拍偷拍| 日日夜夜精品一区| 欧美久久高跟鞋激| 69夜色精品国产69乱| 九一九一国产精品| 三级网在线观看| 国产精品亚洲一区二区在线观看| 在线视频一区二区| 亚洲一级在线播放| 综合分类小说区另类春色亚洲小说欧美| 亚洲激情在线观看视频| 成人毛片免费看| 国产日韩欧美一二三区| 超碰在线caoporn| 日韩欧美三级在线| 日韩欧美a级片| 99天天综合性| 无遮挡又爽又刺激的视频| 啪啪亚洲精品| 成人精品在线视频| 26uuu亚洲电影在线观看| 日韩欧美123| 国产成人亚洲精品自产在线| 91亚洲精华国产精华精华液| 国产91美女视频| 精品国产一区二区三区av片| 国产日韩欧美黄色| 蜜臀av国内免费精品久久久夜夜| 亚洲国产成人av在线| 91久久国产综合久久91| 国产精品久久久久9999吃药| 香蕉视频xxxx| 性欧美精品高清| 正在播放精油久久| 久久99精品久久久久久欧洲站 | 精品久久久久久久久久岛国gif| 久久99精品久久久久久噜噜| 亚洲欧美综合在线观看| 一区二区三区中文| 成人久久18免费网站图片| 操喷在线视频| 这里只有视频精品| 亚洲欧美激情在线观看| 色婷婷久久久亚洲一区二区三区 | 亚洲电影激情视频网站| 少妇按摩一区二区三区| 激情av综合网| 欧美成人黑人猛交| 欧美黄色大片网站| 欧美二区三区在线| 日韩精品成人在线观看| 热re91久久精品国99热蜜臀| 黄色成人在线观看| 亚洲美女视频网站| 国产精品无码免费播放| 欧美丝袜一区二区| 欧美交换国产一区内射| 国产精品私房写真福利视频| 亚洲无人区码一码二码三码| 免费xxxx性欧美18vr| 国产a级片网站| 91精品综合| 欧美日韩在线观看一区| jizzjizzjizz欧美| 成人激情视频在线观看| 欧美男女交配| 国内精品久久久久影院优| 国产人成网在线播放va免费| 亚洲欧洲在线视频| 无码国产精品高潮久久99| 欧美一区日韩一区| 真实的国产乱xxxx在线91| 五月婷婷综合网| 青娱乐免费在线视频| **欧美大码日韩| 在线观看免费小视频| 2014亚洲片线观看视频免费| www.美色吧.com| 国产福利91精品一区| 亚洲欧洲日本精品| 三级欧美韩日大片在线看| 久久精品视频16| 亚洲欧洲日本一区二区三区| 视频一区二区视频| 色乱码一区二区三区网站| 欧美亚洲另类在线一区二区三区| 老司机精品在线| 国产精品免费一区二区三区四区 | 青青草97国产精品免费观看无弹窗版 | 香蕉久久夜色精品国产| 欧美视频在线观看视频| 国内视频精品| 成品人视频ww入口| 在线观看一区| 97超碰在线人人| 国产精品红桃| www.日本在线视频| 亚洲国产精品第一区二区三区| 亚洲精品少妇一区二区| 天堂在线观看免费视频| 日韩欧美国产网站| 草莓视频18免费观看| 一本大道综合伊人精品热热| 久久精品视频1| 色婷婷激情综合| 国产精品尤物视频| 欧美日韩一二三| 91国在线视频| 日韩一区国产二区欧美三区| 国产aⅴ一区二区三区| 日韩欧美国产成人一区二区| 精品国产无码AV| 亚洲国产中文字幕久久网| 后进极品白嫩翘臀在线视频| 亚洲国产精品一区二区久| 亚洲av成人精品毛片| 亚洲欧美制服第一页| 大乳在线免费观看| 久久精品国产亚洲精品| 中文字幕有码在线观看| 午夜精品美女自拍福到在线| 无码小电影在线观看网站免费| 日本精品久久久| 成人在线视频免费| 亚洲xxxxx性| 噜噜噜天天躁狠狠躁夜夜精品| 玛丽玛丽电影原版免费观看1977| 少妇精品久久久一区二区三区| 日韩欧美一区二区三区久久婷婷| 99精品综合| 人人妻人人澡人人爽欧美一区| 国产欧美大片| 污色网站在线观看| 懂色av中文字幕一区二区三区| 性欧美丰满熟妇xxxx性久久久| 国产偷国产偷亚洲高清人白洁| 国产3级在线观看| 亚洲国产成人91porn| 日韩精品在线一区二区三区| 日韩午夜激情免费电影| 亚洲日本在线播放| 色999日韩欧美国产| 韩国成人免费视频| 国产精品黄页免费高清在线观看| 国产精品成人3p一区二区三区| 国产乱码精品一区二区三区不卡| 亚洲妇女av| 日韩欧美一级在线| 日韩国产精品91| 李丽珍裸体午夜理伦片| 日本一区二区三区四区| 精品肉丝脚一区二区三区| 91电影在线观看| 国产 日韩 欧美 精品| 一区二区三区精品99久久| 98色花堂精品视频在线观看| 国产美女精品视频免费观看| 日韩高清成人在线| 国内自拍中文字幕| 水蜜桃久久夜色精品一区的特点| 国产欧美视频一区| 国产精品国产三级国产a| 久久影院理伦片| 亚洲黄页网站| 日本男女交配视频| 国产在线一区观看| av网在线播放| 欧美日韩日本国产| 亚洲精华国产精华精华液网站| 亚洲丝袜在线视频| 欧美激情20| 超碰97国产在线| 久久久久久美女精品| 美女一区二区三区视频| 97se亚洲国产综合自在线 | 99精品美女| 婷婷丁香激情网| 国产调教视频一区| 亚洲久久在线观看| 亚洲国产成人91精品| 黄网站在线观| 成人9ⅰ免费影视网站| 这里只有精品在线| 99九九99九九九99九他书对| 国产精品全国免费观看高清| 天天干天天操天天操| 亚洲美女视频网| 中文在线资源| 久久草视频在线看| 亚洲一区图片| 爱爱的免费视频| 欧美性jizz18性欧美| 四虎精品一区二区三区| 欧美激情亚洲一区| 视频亚洲一区二区| 97碰在线视频| 丁香六月久久综合狠狠色| 久久久久久久久久一区二区三区| 日韩欧美激情一区| 亚洲精品白浆| 操一操视频一区| 亚洲国产美女| 亚洲综合自拍网| 色综合久久66| av基地在线| 91精品久久久久久久久中文字幕| 香港欧美日韩三级黄色一级电影网站| 男人的天堂最新网址| 18成人在线观看| 午夜精品久久久久久久91蜜桃| 欧美极度另类性三渗透| 精品国产一区二区三区成人影院| 免费av观看网址| 国产亚洲成av人在线观看导航| 成人免费一区二区三区| 日韩一二三在线视频播| 精品国产亚洲一区二区三区在线 | 亚洲av中文无码乱人伦在线视色| 国产视频一区在线| 国产一区一一区高清不卡| 中文字幕乱码一区二区三区| 国产乱色国产精品免费视频| 久草视频手机在线观看| 亚洲精品久久视频| 日韩av电影资源网| 精品剧情在线观看| 91电影在线播放| 97netav| 亚洲欧美日韩一区在线观看| 欧美亚洲色综久久精品国产| 日韩一区二区三区视频在线观看 | 91精品国产91久久久久久黑人| 秋霞午夜鲁丝一区二区| 精品久久久精品| 日本在线免费| 国产一区视频观看| 奇米影视7777精品一区二区| 看片网站在线观看| 亚洲精品久久久久久久久| 丁香婷婷久久| 成人午夜精品久久久久久久蜜臀| 国产日产精品一区| 性一交一乱一乱一视频| 热门国产精品亚洲第一区在线| 久久精品久久久| 久操视频免费看| 精品伦理精品一区| 成人精品国产| 欧美男女爱爱视频| 国产精品久久久久婷婷| 天天操天天舔天天干| 成人激情视频网| 日韩电影在线一区二区三区| 国产无遮挡又黄又爽又色|