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

如何循序漸進地管理RESTful API的生命周期?

譯文 精選
開發 前端
本文通過簡單示例,將向您展示如何采用循序漸進的過程,去管理RESTful API的生命周期。

設計一個直觀且用戶友好的RESTful API往往是一項艱巨的工作。而對于初次嘗試規劃和管理API生命周期的新手開發者而言,尤為如此。下面,我將以簡單示例的形式,和您探討如何循序漸進地管理RESTful API的生命周期。

初始階段

讓我們首先來看一個典型的Hello應用代碼的示例:

> curl http://org. apisix/hello
Hello world
> curl http://org. apisix/hello/Joe
Hello Joe

如下圖所示,我們不必了解其底層技術,只需專注其API部分即可。

采用API網關

首先也是最關鍵的一步:禁止將應用直接暴露到互聯網上,并在前端建立一個API網關。維基百科是這樣定義API網關的:作為一個API的服務器前端,它能夠收到各種API請求,并通過實施節流和安全策略,將請求傳遞給后端服務,進而將響應回傳給請求者。

網關通常包括一個用于編排和修改請求與響應轉換引擎。同時,網關還可以提供諸如:收集分析數據、提供緩存、支持身份驗證、授權、安全審計以及合規檢查等功能。當然,如果您不太熟悉API網關的概念,也可以直接把它理解為一個更高級別的反向代理。在此,我將使用??Apache APISIX??,您也可以使用自己熟悉的網關。

為了暴露網關,您需要更新指向網關的DNS記錄,并向外廣播。您既可以等待一段時間讓其自動更新,也可以通過??dnschecker??來加速這個過程。

我使用APISIX創建了一個將HTTP請求發送到網關的路由(route,請參見如下代碼段)。

curl http://apisix:9080/apisix/admin/routes/1 -H 'X-API-KEY: xyz' -X PUT -d ' # 1-2
{
"name": "Direct Route to Old API", # 3
"methods": ["GET"], # 4
"uris": ["/hello", "/hello/", "/hello/*"], # 5
"upstream": { # 6
"type": "roundrobin", # 8
"nodes": {
"oldapi:8081": 1 # 7
}
}
}'

注釋:

1. APISIX會分配一個自動生成的ID(您也可以使用現成的)。在此,我使用現成的,并使用put將它傳遞給URL - 1。

2. 通過API key來更新路由。

3. 雖然我們不一定需要命名路由,但它能夠讓我們更好地對其有所了解。

4. 針對路由的HTTP方法數組。

5. 針對路由的URL數組。

6. 指明后端應用的上游(upstream)。在本例中,即為Hello World API。

7. 各個節點的Hashmap都自帶有權重。顯然,權重只有存在多個節點時才有意義。

8. 針對多個節點配置均衡算法。

如上圖所示,您可以通過如下方式查詢網關,并得到相同的結果:

> curl http://org. apisix/hello
Hello world
> curl http://org. apisix/hello/Joe
Hello Joe

API的版本

開發一個API往往意味著會出現其多個版本共存的情況。我們可以用如下三種方式給API編制版本:

  • 查詢參數:

curl http://org. apisix/hello?version=1

curl http://org. apisix/hello?version=2

  • 標頭:

curl -H 'Version: 1' http://org. apisix/hello

curl -H 'Version: 2' http://org. apisix/hello

  • 路徑:

curl http://org. apisix/v1/hello

curl http://org. apisix/v2/hello

在此,我將使用目前廣為采用的基于路徑的版本編制方法。當然,APISIX也支持其他兩種方式。

在前文中,我們創建了一個包含上游信息的路由。同時,APISIX也允許我們創建一個帶有專屬ID的上游,以重用其多個路由:

curl http://apisix:9080/apisix/admin/upstreams/1 -H 'X-API-KEY: xyz' -X PUT -d ' # 1
{
"name": "Old API", # 2
"type": "roundrobin",
"nodes": {
"oldapi:8081": 1
}
}'

注釋:

1. 使用upstreams路徑

2. 針對新的上游的有效載荷

由于上游只知道/hello,不知道/v1/hello,因此在轉發至上游之前,我們仍需要重寫發往網關的查詢。APISIX可以通過插件來實現此類轉換和過濾。下面,讓我們創建一個用于重寫路徑的插件配置:

curl http://apisix:9080/apisix/admin/plugin_configs/1 -H 'X-API-KEY: xyz' -X PUT -d ' # 1
{
"plugins": {
"proxy-rewrite": { # 2
"regex_uri": ["/v1/(.*)", "/$1"] # 3
}
}
}'

注釋:

1. 使用plugin-configs路徑

2. 使用??proxy-rewrite??插件

3. 刪除版本的前綴

現在我們就可以通過如下代碼段,創建有版本的路由,以引導新創建的上游和插件配置:

curl http://apisix:9080/apisix/admin/routes/2 -H 'X-API-KEY: xyz' -X PUT -d '  # 1
{
"name": "Versioned Route to Old API",
"methods": ["GET"],
"uris": ["/v1/hello", "/v1/hello/", "/v1/hello/*"],
"upstream_id": 1,
"plugin_config_id": 1
}'

下面展示了新路由的邏輯圖。

在此,我們已配置了有版本和非版本的兩個路由:

> curl http://org. apisix/hello
Hello world
> curl http://org. apisix/v1/hello
Hello world

將用戶從非版本路徑遷移到有版本路徑

雖然我們給API編制了版本,但是用戶可能仍會使用舊的、非版本的API。畢竟,我們肯定不能在用戶不知情時就刪除掉舊的路由,而只能通過HTTP的301狀態代碼,讓用戶知道資源已經從http://org.apisix/hello遷移到了http://org.apisix/v1/hello。如下代碼段展示了??如何通過配置重定向插件??來初始化路由:

curl http://apisix:9080/apisix/admin/routes/1 -H 'X-API-KEY: xyz' -X PATCH -d '
{
"plugins": {
"redirect": {
"uri": "/v1$uri",
"ret_code": 301
}
}
}'

其運行結果如下:

>curl http://apisix. org/hello
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>openresty</center>
</body>
</html>
>curl -L apisix:9080/hello # 1
Hello world

注釋:

1. -L選項后面跟著重定向

根據規則,用戶要么透明地使用到了新的端點,要么收到301的狀態提示,使用新的API位置。

識別用戶

您可能已經注意到,我們并不知道誰會使用我們的API。因此,為了保證API在被調用的過程中不會中斷用戶的使用,我選擇了限制未注冊的用戶可調用的數量。如果他們的總量到達了該限制,我們將返回典型的HTTP 429狀態消息,要求他們完成注冊。

當然,目前尚無開箱即用的插件可以實現這一點。因此,我在APISIX中引入Lua引擎,并用Lua編寫出了相應的插件。您可以通過GitHub的鏈接--https://github.com/nfrankel/evolve-apis/blob/master/unauth-limit-plugin/src/unauth-limit.lua,來瀏覽其源代碼。當然,您也可以使用Python、WebAssembly或任何基于JVM的語言,來編寫自己的插件。

我將通過如下步驟來完成插件的加載:

1. 配置APISIX使用的目錄:

apisix: extra_lua_path:/opt/apisix/.lua ?”

注意:APISIX可以使用位于/opt/apisix/文件夾下的任何Lua腳本。

2. 加載插件:

由于APISIX支持熱重載,因此它可以在無需重新啟動的情況下添加額外的插件。

curl http://apisix:9080/apisix/admin/plugins/reload -H 'X-API-KEY: xyz' -X PUT

3. 給現有插件的配置打補丁:

最后,我們需要為插件本身更新專屬的配置:

curl http://apisix:9080/apisix/admin/plugin_configs/1 -H 'X-API-KEY: xyz' -X PATCH -d '
{
"plugins": {
"proxy-rewrite": { # 1
"regex_uri": ["/v1/(.*)", "/$1"]
},
"unauth-limit": { # 2
"count": 1, # 3
"time_window": 60, # 3
"key_type": "var", # 4
"key": "consumer_name", # 4
"rejected_code": 429,
"rejected_msg": "Please register at https://apisix. org/register to get your API token and enjoy unlimited calls"
}
}
}'

注釋:

1. 我們需要重復現有的插件配置。當然,APISIX團隊正在修復這個bug。

2. 指向我們的插件。

3. 對于已通過認證的用戶,插件可限制每60秒超過一個調用。

4. 我會在下一節中解釋到。

我們通過如下命令檢查其是否能夠按預期運行:

>curl apisix:9080/v1/hello
Hello world
>curl apisix:9080/v1/hello
{"error_msg":"Please register at https:\/\/apisix. org\/register to get your API token and enjoy unlimited calls"}

實際上確實如此。

用戶認證

接著,我們需要為消費者(consumer)角色配置一個專屬的身份驗證插件。目前,我們可以選用的此類身份驗證插件有:API key、JWT、OpenId、LDAP、以及Keycloak等。在本例中,我們采用APISIX的??key-auth??插件。下面,讓我們配置一個通過API key驗證的消費者對象:

curl http://apisix:9080/apisix/admin/consumers -H 'X-API-KEY: xyz' -X PUT -d '
{
"username": "johndoe", # 1
"plugins": {
"key-auth": { # 2
"key": "mykey" # 3
}
}
}'

注釋:

1. 消費者的ID

2. 可供使用的插件

3. 有效令牌--mykey

注意,其默認的標頭為apikey,你也可以配置為其他,具體請參見key-auth插件的??相關文檔??。

我們用如下命令來驗證其是否能夠按照我們的需求運行:

>curl -H 'apikey: mykey' apisix:9080/v1/hello
Hello world
>curl -H 'apikey: mykey' apisix:9080/v1/hello
Hello world

在生產環境中測試

至此,我們的改進版Hello world API便可以供用戶調用了。如您所見,部署一個新的、可能包含潛在錯誤的應用版本,往往會給生產環境和業務營收帶來負面的影響。為了盡量減少此類風險,我們可以采用金絲雀發布策略,即:先對一小部分用戶推出新的軟件版本,然后慢慢地擴展到生產環境中的所有用戶處。如果出現了故障,那么新版本只會影響一小部分的用戶群,我們能夠及時回滾到舊的版本。就API網關而言,我們可以復制生產環境的流量到新的API端點上,實現在對用戶幾乎不產生影響的情況下,盡早發現更多的缺陷。

在此,APISIX提供了??proxy-mirror插件??,可向其他節點發送復制的生產環境流量。對此,我們可以對插件配置做如下更新:

curl http://apisix:9080/apisix/admin/plugin_configs/1 -H 'X-API-KEY: xyz' -X PATCH -d '
{
"plugins": {
"proxy-rewrite": {
"regex_uri": ["/v1/(.*)", "/$1"]
},
"unauth-limit": {
"count": 1,
"time_window": 60,
"key_type": "var",
"key": "consumer_name",
"rejected_code": 429,
"rejected_msg": "Please register at https://apisix. org/register to get your API token and enjoy unlimited calls"
},
"proxy-mirror": {
"host": "http://new. api:8082" # 1
}
}
}'

注釋:

1. APISIX將發送流量到該地址上。

根據上圖,我們可以監控和比較新和舊端點,一旦發生錯誤,我們便可以修復錯誤,并重新部署。在此,我們首先通過如下命令,創建一個指向新的API的上游:

curl http://apisix:9080/apisix/admin/upstreams/2 -H 'X-API-KEY: xyz' -X PUT -d '
{
"name": "New API",
"type": "roundrobin",
"nodes": {
"newapi:8082": 1
}
}'

然后,我們可以使用??traffic-split??,來更換proxy-mirror插件:

curl http://apisix:9080/apisix/admin/plugin_configs/1 -H 'X-API-KEY: xyz' -X PATCH -d '
{
"plugins": {
"proxy-rewrite": {
"regex_uri": ["/v1/(.*)", "/$1"]
},
"unauth-limit": {
"count": 1,
"time_window": 60,
"key_type": "var",
"key": "consumer_name",
"rejected_code": 429,
"rejected_msg": "Please register at https://apisix. org/register to get your API token and enjoy unlimited calls"
},
"traffic-split": {
"rules": [
{
"weighted_upstreams": [ # 1
{
"upstream_id": 2,
"weight": 1
},
{
"weight": 1
}
]
}
]
}
}
}'

注釋:

1. 作為演示,我們將50%的流量發送到新的API。在真實環境中,您可能只會配置少數的內部用戶去使用新的端點。

curl -L -H 'apikey: mykey' apisix:9080/hello
Hello world
curl -L -H 'apikey: mykey' apisix:9080/hello
Hello world (souped-up version!)

如果一切工作正常,我們可以將逐漸增加的流量移至新的API。最終我們可以移除traffic split,將默認端點從v1重定到v2上。

棄用舊的版本

根據IETF的草案規范,我們可以基于特定的HTTP響應標頭,來棄用HTTP的標頭字段 (請參見--https://tools.ietf.org/id/draft-dalal-deprecation-header-03.html)。即:在API網關的幫助下,我們可以通過配置路由,來與有待棄用和替代的版本進行通信。為此,我們將使用由APISIX提供??response-rewrite??,來添加額外棄用標志標頭,請參見如下代碼段:

curl -v http://apisix:9080/apisix/admin/plugin_configs/1 -H 'X-API-KEY: xyz' -X PATCH -d '
{
"plugins": {
"proxy-rewrite": {
"regex_uri": ["/v1/(.*)", "/$1"]
},
"unauth-limit": {
"count": 1,
"time_window": 60,
"key_type": "var",
"key": "consumer_name",
"rejected_code": 429,
"rejected_msg": "Please register at https://apisix. org/register to get your API token and enjoy unlimited calls"
},
"response-rewrite": {
"headers": {
"Deprecation": "true",
"Link": "<$scheme://apisix:$server_port/v2/hello>; rel=\"successor-version\""
}
}
}
}'
curl -v -H 'apikey: mykey' apisix:9080/v1/hello
< HTTP/1. 1 200
< Content-Type: text/plain;charset=UTF-8
< Content-Length: 11
< Connection: keep-alive
< Date: Fri, 18 Feb 2022 16:33:30 GMT
< Server: APISIX/2. 12. 0
< Link: <http://apisix:9080/v2/hello>; rel="successor-version"
< Deprecation: true
<
Hello world

小結

回顧一下,我們按照如下流程向您展示了如何通過循序漸進的過程,來管理API的整個生命周期。

1. 不要直接暴露您的API,而是在前端建立一個API網關

2. 使用路徑、查詢參數、以及請求標頭給現有的API編制版本

3. 通過使用301狀態碼,將用戶從無版本的端點遷移到有版本處

4. 識別和認證用戶

5. 為了測試生產環境,我們先復制流量,再將小部分用戶遷移到新的版本上

6. 發布新的版本

7. 通過標準響應標頭來棄用舊的版本

原文標題:??Evolving your RESTful APIs, a step-by-step approach??,作者:Nicolas Fr?nkel


責任編輯:華軒 來源: 51CTO
相關推薦

2019-06-25 09:02:44

加密加密算法密鑰

2010-12-28 16:49:05

2011-05-20 10:39:43

oracle

2024-07-04 08:00:00

2009-08-07 03:47:00

2012-03-01 22:37:02

Linux入門

2009-08-26 14:25:46

C#消息

2011-05-24 13:47:25

程序員

2023-03-23 08:49:39

負載均衡服務器

2024-05-28 07:55:31

SpringBean用域

2020-02-19 08:48:04

Java內存模型CPU

2021-07-19 05:52:29

網絡生命周期網絡框架

2012-06-20 10:29:16

敏捷開發

2022-06-01 09:25:16

嵌套生命周期智能技術工業資產

2015-07-08 16:28:23

weak生命周期

2018-02-05 15:30:01

MariaDB服務器主從復制

2010-12-31 15:28:41

Windows 7

2010-12-28 16:38:16

Windows SerWindows 部署服

2022-04-19 07:20:24

軟件開發安全生命周期SSDLC應用安全

2009-10-30 14:43:24

寬帶接入網
點贊
收藏

51CTO技術棧公眾號

免费看黄网站在线观看| 日韩av手机在线免费观看| 丁香六月综合| 国产精品久久久久久久岛一牛影视 | 欧美理论电影| 成人av网站在线观看免费| 国产成人一区二| 日本一级片免费| 猫咪成人在线观看| 欧美日韩高清一区二区| 91午夜在线观看| 国产三级电影在线| 高清成人在线观看| 国产精品视频一| 日韩精品久久久久久久酒店| 国产精品一区二区av交换| 91精品综合久久久久久| 黄色片视频在线免费观看| 黄色在线视频网站| 久久久久88色偷偷免费| 91亚色免费| 高潮毛片又色又爽免费| 欧美/亚洲一区| 亚洲男人第一网站| 亚洲一区二区三区黄色| 国产91欧美| 欧美性猛交丰臀xxxxx网站| 国产美女视频免费| yw193.com尤物在线| 99精品国产视频| 成人免费视频网站入口| 97成人在线观看| 日韩高清在线观看| 久久久久久久久久亚洲| 久久高清内射无套| 日韩中文字幕高清在线观看| 亚洲欧美精品suv| 国产精品无码在线| 国产精品17p| 777亚洲妇女| 自拍偷拍21p| av免费在线一区| 欧美性猛交xxxx乱大交| 播放灌醉水嫩大学生国内精品| 日本aa在线| 综合激情成人伊人| 亚洲欧洲一区二区在线观看| 岛国大片在线观看| 久久久久久久久岛国免费| 久久青青草原一区二区| 色婷婷激情五月| 99久久综合国产精品| 国产日韩在线一区二区三区| 欧美视频在线观看一区二区三区| 国产精品一二三四| 99在线看视频| 黄色av网址在线| 北岛玲一区二区三区四区| 国产伦精品一区二区三区四区视频| 高潮毛片7777777毛片| 成人免费av在线| 国产一区二区中文字幕免费看| www.综合色| 成人免费三级在线| 久久精品日产第一区二区三区乱码 | 欧美精品v日韩精品v国产精品| 日韩在线免费看| 国产九色91| 中文字幕av日韩精品| 精品av中文字幕在线毛片| 91久色porny| 欧美日韩在线观看一区二区三区| www.黄色小说.com| 波多野结衣亚洲一区| 精品视频高清无人区区二区三区| 人妻无码一区二区三区久久99| 中文字幕一级片| 欧美激情偷拍自拍| 日韩中文在线不卡| 亚洲欧美精品aaaaaa片| 欧美激情亚洲| 97超碰色婷婷| 中文字幕+乱码+中文字幕明步| 久久成人免费日本黄色| www国产亚洲精品| 少妇性bbb搡bbb爽爽爽欧美| 中文字幕乱码亚洲精品一区| 国产高清免费在线| 成人一级福利| 欧美在线观看一区| 精品人妻无码中文字幕18禁| 丝袜av一区| 精品国产欧美一区二区五十路| 久久久久亚洲AV| 日av在线不卡| 国产精品一区在线观看| 国产一级免费在线观看| 一个色在线综合| 日本成人中文字幕在线| 亚洲精品一二三**| 一本色道久久88综合亚洲精品ⅰ| xxxx日本少妇| 日韩精品视频网| 国产精华一区| 午夜视频在线观看免费视频| 亚洲成精国产精品女| 亚洲一区日韩精品| 欧美理伦片在线播放| 色狠狠久久aa北条麻妃| 国产精品视频久久久久久久| 久久99国内精品| 欧美久久久久久| 爱情岛论坛亚洲品质自拍视频网站| 91国产精品成人| 又黄又爽的网站| 女人香蕉久久**毛片精品| 国产精品国语对白| 艳母动漫在线看| 亚洲综合精品自拍| 永久免费的av网站| 精品产国自在拍| 97成人精品区在线播放| 精品国产无码AV| 最好看的中文字幕久久| 国产理论在线播放| 精品在线99| 91精品国产高清久久久久久91| 99热这里只有精品1| 国产精品视频线看| 噼里啪啦国语在线观看免费版高清版| 国产欧美自拍一区| 色综合久久精品亚洲国产| 亚洲天堂网在线观看视频| 久久久久久久电影| 久久精品免费一区二区| 九九热hot精品视频在线播放| 欧美久久久精品| 国产精品久久久久久免费免熟 | 日韩暖暖在线视频| 同心难改在线观看| 欧美日韩国产精品一区| 丝袜熟女一区二区三区| 激情久久五月| 国产精品一区二区三区在线| 国产蜜臀一区二区打屁股调教| 欧美高清视频www夜色资源网| 国产真人真事毛片视频| 麻豆精品久久精品色综合| 亚洲不卡一卡2卡三卡4卡5卡精品| 国产盗摄精品一区二区酒店| 精品成a人在线观看| 国产小视频在线观看免费| 国产91富婆露脸刺激对白 | 国产精品一区毛片| 久久久久资源| 亚洲播播91| 中文在线不卡视频| 国产精品国产av| 亚洲免费三区一区二区| 18禁一区二区三区| 91久久亚洲| 狼狼综合久久久久综合网| 亚洲黄色免费看| 国产一区二区三区在线观看网站 | 91麻豆精品国产91| 免费在线观看av网址| 成人午夜电影久久影院| 亚洲美免无码中文字幕在线| 校花撩起jk露出白色内裤国产精品 | 久久免费99精品久久久久久| 你懂得影院夜精品a| 综合国产在线视频| 午夜精品久久久久久久96蜜桃| 亚洲一区二区欧美激情| www.色天使| 免费在线观看日韩欧美| 99热都是精品| 欧美理论电影在线精品| 国产精品视频内| 欧美大片黄色| 亚洲小视频在线| 国产福利小视频| 色综合久久88色综合天天6| 国产一二三四视频| 国产精品中文字幕欧美| 欧美啪啪免费视频| 日韩精品水蜜桃| 成人动漫在线观看视频| 日本综合字幕| 久热国产精品视频| 天天综合永久入口| 欧美丰满少妇xxxbbb| 日本三级免费看| 中文字幕中文字幕在线一区 | 《视频一区视频二区| 荫蒂被男人添免费视频| 老司机一区二区| 精品少妇在线视频| 久久成人综合| 免费国产一区二区| 日韩av综合| 国产精品福利在线观看网址| 国精产品一区一区三区mba下载| 亚洲欧美在线一区二区| 精品国产亚洲AV| 欧美日韩国产bt| 欧美性猛交bbbbb精品| 亚洲精品日韩综合观看成人91| 瑟瑟视频在线观看| 国产91富婆露脸刺激对白| 亚洲欧美自拍另类日韩| 国产日产高清欧美一区二区三区| 伊人狠狠色丁香综合尤物| 日韩成人av在线资源| 91亚洲精品丁香在线观看| 国产精品亲子伦av一区二区三区| 97人人模人人爽人人喊中文字| 激情在线小视频| 中文字幕在线亚洲| 国产午夜视频在线观看| 亚洲精品成人网| 亚洲成人精品女人久久久| 欧美精品18+| 中文字幕 自拍偷拍| 色婷婷久久99综合精品jk白丝| 日产亚洲一区二区三区| 亚洲最新在线观看| 日韩a级片在线观看 | 一区二区三区国产福利| 国产精品嫩模av在线| 久久国产主播精品| 凹凸av导航大全精品| 亚洲xxx自由成熟| 国产激情综合| 91美女片黄在线观| 自拍偷拍亚洲图片| 成人免费观看a| 日韩精品一页| 国产主播在线一区| 亚洲一区二区av| 国产欧美一区二区三区久久人妖| 88xx成人网| 国产精品久久久久久亚洲调教 | av av在线| 国产不卡视频在线观看| 国产在线观看中文字幕| 精品中文字幕一区二区| wwwwwxxxx日本| 美国毛片一区二区| 色婷婷狠狠18| 久久国产乱子精品免费女| 亚洲综合日韩欧美| 紧缚捆绑精品一区二区| 亚洲黄色片免费看| 国产精品影视天天线| 免费国偷自产拍精品视频| 国产成人av网站| 欧美熟妇精品一区二区蜜桃视频| 波多野结衣亚洲一区| 欧美亚一区二区三区| 国产色91在线| 天堂av免费在线| 一区二区在线看| 日韩精品一区二区av| 欧美性xxxx在线播放| 亚洲精品国产无码| 欧美精品色综合| 亚洲卡一卡二卡三| 亚洲精选在线观看| 1024免费在线视频| 色综合天天狠天天透天天伊人 | 欧美性猛交99久久久久99按摩| 久草视频在线免费| 日韩一区二区三区在线观看| 日本xxxxwww| 亚洲人成网站777色婷婷| 黄色网址在线免费播放| 午夜精品久久久久久久99热| 欧美日韩国产v| 亚洲最大成人网色| 综合伊思人在钱三区| 永久久久久久| 亚洲最黄网站| 久久久久久久久久一区二区| 成人免费视频免费观看| 五月婷婷六月香| 亚洲成人高清在线| 中文字幕在线日亚洲9| 精品国产免费久久| 777电影在线观看| 久久久免费在线观看| 成人免费视频观看| 国产精品毛片一区视频| 日本一二区不卡| 成人网站免费观看入口| 精品在线观看免费| 给我看免费高清在线观看| 中文字幕在线观看一区| 成人午夜视频在线播放| 91精品国产综合久久婷婷香蕉| 午夜视频在线播放| 久久精品精品电影网| 成人性生交大片免费观看网站| 999热视频在线观看| 日韩电影免费网站| 91视频最新入口| 成人一区二区三区在线观看| 黑人と日本人の交わりビデオ| 欧美日韩国产精品一区二区不卡中文| 国产乱色精品成人免费视频| 亚洲香蕉成人av网站在线观看| 国产蜜臀一区二区打屁股调教| 成人h视频在线| av资源久久| 日本精品一区在线观看| 国产99精品在线观看| 久草手机视频在线观看| 在线欧美小视频| 午夜影院在线视频| 欧美国产极速在线| 国产精品白丝久久av网站| 日韩在线导航| 久久精品91| 国产老熟女伦老熟妇露脸| 一区二区成人在线观看| 国产麻豆精品一区| 日韩中文字幕在线视频| 日本精品不卡| 久久日韩精品| 香蕉久久国产| 亚洲一区二区三区无码久久| 亚洲国产视频在线| 亚洲精品国产av| 欧美日本中文字幕| 日韩一二三区| 国产资源第一页| 国产精品中文字幕欧美| 国产97免费视频| 欧美美女激情18p| 欧美jizz18性欧美| 国产欧美日韩丝袜精品一区| 日韩av有码| 三级av免费观看| 国产精品女主播av| 中文字幕在线观看欧美| 日韩一区二区精品视频| av在线播放一区二区| 黄黄视频在线观看| 国产乱妇无码大片在线观看| 天天干中文字幕| 精品久久久久99| 91豆花视频在线播放| 久久99国产精品| 久久久噜噜噜久久狠狠50岁| 国产精品密蕾丝袜| 欧美午夜精品一区二区三区 | 欧美精品电影在线| 国产精品极品| 茄子视频成人免费观看| 国产亚洲欧美色| 91极品身材尤物theporn| 欧美老少配视频| 日韩美脚连裤袜丝袜在线| 欧美黄色一级片视频| 欧美国产日韩a欧美在线观看| 在线观看中文字幕网站| 久久6免费高清热精品| 欧洲vs亚洲vs国产| 亚洲高清在线免费观看| 亚洲人精品一区| 男人天堂一区二区| 国产脚交av在线一区二区| 99久久影视| 欧美双性人妖o0| 在线免费不卡电影| 在线中文字幕视频观看| 久久久久久一区| 寂寞少妇一区二区三区| 日产电影一区二区三区| 中文字幕日韩电影| 一区二区三区四区高清视频| 116极品美女午夜一级| 亚洲欧美中日韩| 三级小视频在线观看| 国产精品久久久久久久久久久久| 最新国产精品| 日本黄色网址大全| 日韩一区二区影院| 少妇一区视频| 国产av熟女一区二区三区| 国产婷婷色一区二区三区在线| av中文字幕观看| 日本道色综合久久影院| 欧美在线视屏| 亚洲午夜久久久久久久国产| 日韩一二三区视频| 先锋欧美三级| 一二三四视频社区在线| 亚洲人一二三区| av电影在线观看一区二区三区|