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

到底什么樣的 REST 才是最佳 REST?

開發(fā) 前端
今天松哥就來和大家一起來聊一聊到底什么是 REST,順便再來看下 Spring HATEOAS 的用法。

說起 REST API,小伙伴們多多少少都有聽說過,但是如果讓你詳細(xì)介紹一下什么是 REST,估計(jì)會有很多人講不出來,或者只講出來其中一部分。

今天松哥就來和大家一起來聊一聊到底什么是 REST,順便再來看下 Spring HATEOAS 的用法。

一、REST 成熟模型

首先關(guān)于 REST,有一個大佬 Leonard Richardson 為 REST 定義了一個成熟度模型,他一共定義了四個不同的層次,分別如下:

  1. Level0:Web 服務(wù)單純的使用 HTTP 作為數(shù)據(jù)傳輸方式,本質(zhì)上就是遠(yuǎn)程方法調(diào)用,常見的 SOAP 和 RPC 基本上都屬于這一類。
  2. Level1:在這一級別上,引入了資源的概念,服務(wù)端的每一個資源,都有一個對應(yīng)的操作地址。
  3. Level2:在這一級別上,我們引入了不同的 HTTP 請求方法來描述不同的操作,例如 GET 表示查詢、POST 表示插入、PUT 表示更新、DELETE 表示刪除,并且使用 HTTP 的狀態(tài)碼來表示不同的響應(yīng)結(jié)果。一般來說,大家在日常的接口開發(fā)中,基本上都能做到這一層級。但是這還不是最佳結(jié)果。
  4. Level3:按照 Leonard Richardson 的意思,這一層級的 REST 基于 HATEOAS(Hypertext As The Engine Of Application State),在這一級別上,除了返回資源的 JSON 之外,還會額外返回一組 Link,這組 Link 描述了對于該資源可以做哪些操作,以及具體的該怎么做。

在日常的開發(fā)中,我們一般都是只實(shí)現(xiàn)到 Level2 這一層級,真正做到 Level3 的估計(jì)很少,不過雖然在工作中一般不會做到 Level3 這一層級,但是,我相信很多小伙伴應(yīng)該是見過 Level3 層級的 REST 是啥樣子的,特別是看過 vhr 視頻的小伙伴,松哥在其中講過,通過 Spring Data Jpa+Spring Rest Repositories 實(shí)現(xiàn)的 CURD 接口,其實(shí)就是一個達(dá)到了 Level3 層級的 REST。

二、Spring HATEOAS

那么接下來我先用 Spring HATEOAS 寫一個簡單的 REST,然后結(jié)合這個案例來和小伙伴們聊一聊到底 Spring HATEOAS 有何不一樣的地方。

首先我們創(chuàng)建一個 Spring Boot 工程,引入 Web 和 Spring HATEOAS 依賴,如下:

圖片

創(chuàng)建好之后,我們首先創(chuàng)建一個 User 實(shí)體類:

public class User extends RepresentationModel {
private Integer id;
private String username;
private String address;
//省略 getter/setter
}

注意這個 User 實(shí)體類需要繼承自 RepresentationModel,以方便后續(xù)添加不同的 Link(以前舊的版本需要繼承自 ResourceSupport)。

接下來寫一個簡單的測試接口。

查詢所有用戶:

@RestController
@RequestMapping("/users")
public class UserController {

@GetMapping
public CollectionModel<User> list(){
List<User> list = new ArrayList<>();
User u1 = new User();
u1.setId(1);
u1.setUsername("javaboy");
u1.setAddress("www.javaboy.org");
u1.add(WebMvcLinkBuilder.linkTo(UserController.class).slash(u1.getId()).withSelfRel());
list.add(u1);
User u2 = new User();
u2.setId(2);
u2.setUsername("itboy");
u2.setAddress("www.itboyhub.com");
u2.add(WebMvcLinkBuilder.linkTo(UserController.class).slash(u2.getId()).withSelfRel());
list.add(u2);
CollectionModel<User> users = CollectionModel.of(list);
users.add(WebMvcLinkBuilder.linkTo(UserController.class).withRel("users"));
return users;
}
}

關(guān)于這個接口,我來說幾點(diǎn):

  1. 首先,對于這種返回一個集合或者數(shù)組的情況,返回的類型都是 CollectionModel。
  2. 把集合弄好之后(正常應(yīng)該去數(shù)據(jù)庫中查詢,我這里省事直接創(chuàng)建了),通過CollectionModel.of(list)? 方法去獲取一個CollectionModel<User> 對象。
  3. 對于每一個 user 對象,我都添加了一個 Link 對象,WebMvcLinkBuilder.linkTo(UserController.class).slash(u1.getId()).withSelfRel() 表示生成當(dāng)前對象的訪問鏈接。
  4. WebMvcLinkBuilder.linkTo(UserController.class).withRel("users") 表示訪問所有數(shù)據(jù)的鏈接。

好了,這個接口寫完之后,我們訪問看下:

圖片

可以看到,返回的每一個 user 對象中,都有一個鏈接表示如何單獨(dú)訪問這個對象。最下面還有一個訪問所有對象的鏈接。

對于上面這個案例,可能有小伙伴會質(zhì)疑,難道我們從數(shù)據(jù)庫中查詢出來的 List 集合都要遍歷一遍,然后給每一個 User 添加一個 Link 嗎?其實(shí)不必,添加 Link 這個事可以直接在 User 類中完成,如下:

public class User extends RepresentationModel {
private Integer id;
private String username;
private String address;

public User(Integer id){
super(WebMvcLinkBuilder.linkTo(UserController.class).slash(id).withSelfRel());
this.id = id;
}
//省略 getter/setter
}

可以看到,直接在構(gòu)造方法中完成即可。此時(shí)接口里就不用那么復(fù)雜了,如下:

@GetMapping
public CollectionModel<User> list(){
List<User> list = new ArrayList<>();
User u1 = new User(1);
u1.setUsername("javaboy");
u1.setAddress("www.javaboy.org");
list.add(u1);
User u2 = new User(2);
u2.setUsername("itboy");
u2.setAddress("www.itboyhub.com");
list.add(u2);
CollectionModel<User> users = CollectionModel.of(list);
users.add(WebMvcLinkBuilder.linkTo(UserController.class).withRel("users"));
return users;
}

那么對于根據(jù) ID 來查詢用戶的需求,我們也應(yīng)該給一個接口如下:

@RestController
@RequestMapping("/users")
public class UserController {

@GetMapping("/{id}")
public EntityModel<User> getOne(@PathVariable Integer id) throws NoSuchMethodException {
User u = new User(id);
u.setUsername("javaboy");
u.setAddress("深圳");
u.add(Link.of("http://localhost:8080/users/"+id, "getOne"));
Link users = WebMvcLinkBuilder.linkTo(UserController.class).withRel("users");
u.add(users);
Link link = WebMvcLinkBuilder.linkTo(UserController.class).slash(u.getId()).withSelfRel();
u.add(link);
Method method = UserController.class.getMethod("getOne", Integer.class);
Link link2 = WebMvcLinkBuilder.linkTo(method, id).withSelfRel();
u.add(link2);
return EntityModel.of(u);
}
}

關(guān)于這個接口,我說如下幾點(diǎn):

  1. 如果返回類型是一個對象的話,需要使用EntityModel<User> 類型。
  2. 搞好返回的對象之后,通過EntityModel.of(u) 方法可以獲取到目標(biāo)數(shù)據(jù)類型。
  3. 這個地方,為了給小伙伴們演示不同的 Link 添加方式,我寫了好多個(單純?yōu)榱搜菔静煌?Link 添加方式):
  1. Link.of("http://localhost:8080/users/"+id, "getOne") 這種是自己純手工去生成當(dāng)前對象的訪問鏈接,很明顯這不是一個很好的方案。當(dāng)前對象的訪問鏈接建議使用上文中提到的方式。
  2. WebMvcLinkBuilder.linkTo(UserController.class).withRel("users") 這個是生成當(dāng)前這個 Controller 的訪問鏈接,一般就是訪問所有用戶對象的鏈接。
  3. WebMvcLinkBuilder.linkTo(UserController.class).slash(u.getId()).withSelfRel() 前文已經(jīng)用過了,不多說了,實(shí)際應(yīng)用中建議使用這種。
  4. 也可以根據(jù)某一個方法自動生成,像這樣WebMvcLinkBuilder.linkTo(method, id).withSelfRel(),這個是生成某一個具體方法的訪問鏈接。

好了,現(xiàn)在我們來看下這個接口生成的 JSON,如下:

圖片

生成的這段 JSON 我將之標(biāo)記為了三部分:

  1. 第一部分,self,就是自身的訪問鏈接,這三個鏈接分別是 User 的構(gòu)造方法,以及前面提到的 3.3 和 3.4 的方法生成的。
  2. 第二部分,getOne 這個,是前面 3.1 中提到的方法生成的。
  3. 第三部分,users 這個,是前面提到的 3.2 方法生成的。

當(dāng)然,其實(shí)這塊還有很多其他的生成鏈接的玩法,但是我就不一一介紹了,小伙伴們可以參考官方文檔:https://docs.spring.io/spring-hateoas/docs/current/reference/html

從上面 Spring HATEOAS 中返回的 JSON 我們大致上可以看到它的特點(diǎn):

當(dāng)我們使用了 Spring HATEOAS,此時(shí),客戶端就會通過服務(wù)端返回的 Link Rel 來獲取請求的 URI(如果沒有使用 Spring HATEOAS,則客戶端訪問的 URI 都是提前在客戶端硬編碼的),現(xiàn)在我們就可以做到服務(wù)端在不破壞客戶端實(shí)現(xiàn)的情況下動態(tài)的完成 URI 的修改,從而進(jìn)一步解耦客戶端和服務(wù)端。

簡而言之,現(xiàn)在客戶端能干什么事情,在服務(wù)端返回的 JSON 中都會告訴客戶端,客戶端從服務(wù)端返回的 JSON 中獲取到請求的 URL,然后直接執(zhí)行即可。如果這個請求地址發(fā)生變化的話,客戶端也會及時(shí)拿到最新的地址。

可能上面的例子小伙伴們感受還不是很明顯,我再給大家看一段 JSON:

{
"tracking_id": "666",
"status": "WAIT_PAYMENT",
"items": [
{
"name": "book",
"quantity": 1
}
],
"_Links": {
"self": {
"href": "http://localhost:8080/orders/666"
},
"cancel": {
"href": "http://localhost:8080/orders/666"
},
"payment": {
"href": "http://localhost:8080/orders/666/payments"
}
}
}

這是電商系統(tǒng)下單之后等待支付的過程中返回的 JSON,這里的 links 給出了三個:

  • self:訪問這個鏈接可以查看當(dāng)前訂單信息(GET 請求)。
  • cancel:訪問這個鏈接可以取消當(dāng)前訂單(DELETE 請求)。
  • payment:訪問這個鏈接可以支付當(dāng)前訂單(POST 請求)。

這個例子就很直白了,就是在返回的 JSON 中,直接告訴你接下來能做哪些操作,對應(yīng)的 URL 分別是什么,前端拿到之后直接操作,如果這些操作路徑發(fā)生了變化,前端也會立馬拿到最新的路徑。

這就是 Spring HATEOAS 的好處。總之一句話,Spring HATEOAS 提倡在響應(yīng)返回的 Link 中給出對該資源接下來操作的 URL。這種方式解耦了服務(wù)端 URI,也可以讓客戶端開發(fā)者更容易地探索 API。

三、 REST 的優(yōu)缺點(diǎn)

雖然我們現(xiàn)在都鼓勵設(shè)計(jì) REST 風(fēng)格的 API,然而 REST 也不全是優(yōu)點(diǎn),事物總是具有兩面性,REST 的優(yōu)缺點(diǎn)分別如下。

3.1 優(yōu)點(diǎn)

  1. 首先,REST 足夠簡單,有一定 Web 開發(fā)經(jīng)驗(yàn)的小伙伴都可以快速上手 REST。
  2. REST 風(fēng)格的接口測試起來也非常方便,利用瀏覽器自帶的一些 REST 插件或者是 POSTMAN 之類的工具,就可以非常方便的實(shí)現(xiàn) REST 接口的測試。
  3. 不需要中間代理,簡化了系統(tǒng)的結(jié)構(gòu)。
  4. HTTP 對防火墻比較友好。

3.2 缺點(diǎn)

  1. REST 只支持請求-響應(yīng)的通信方法,不支持服務(wù)端推送消息到客戶端。
  2. 給請求取一個合適的名字比較困難,特別是有多個相類似的接口時(shí),例如有多個添加接口、多個更新接口等。
  3. 由于沒有中間代理,所以請求/響應(yīng)的時(shí)候,服務(wù)端和客戶端都必須在線。
責(zé)任編輯:武曉燕 來源: 江南一點(diǎn)雨
相關(guān)推薦

2009-10-26 13:36:10

BSM

2013-08-29 11:38:53

企業(yè)App

2010-09-01 15:27:40

DHCP工作流程

2017-03-31 09:47:17

2016-07-19 16:44:17

2022-09-09 07:35:23

循環(huán)依賴Spring構(gòu)造器

2015-04-08 10:40:09

2023-04-20 19:59:20

網(wǎng)絡(luò)AIGC數(shù)字化

2015-10-22 16:01:52

無線網(wǎng)絡(luò)華三通信

2014-02-14 14:36:00

2013-07-22 10:48:54

2012-07-20 10:38:00

桌面虛擬化

2009-03-25 09:45:15

美國軟件公司工作環(huán)境

2009-11-30 10:51:27

安全殺毒軟件

2018-09-16 15:40:06

大數(shù)據(jù)平臺數(shù)據(jù)倉庫架構(gòu)

2020-08-18 09:15:49

IT技術(shù)數(shù)據(jù)庫

2009-08-05 15:37:50

什么是RESTRESTful的實(shí)現(xiàn)

2023-12-06 07:13:16

RESTAPI客戶端

2017-02-20 10:51:18

APM
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

av男人的天堂av| 欧美精品久久久久久久久久| 一区精品在线| 国产精品久久久国产盗摄| 91精品久久久久久久久久不卡| 欧美一区二区三区免费大片 | 国产欧美日韩另类视频免费观看| 国产精品白嫩初高中害羞小美女| 99久久久免费精品| 成人资源在线| 欧美日韩日日夜夜| 日韩精品 欧美| 免费av不卡| 91年精品国产| 91九色蝌蚪成人| 中文字幕手机在线视频| 综合久久精品| 中文字幕av一区二区| 亚洲欧美日韩偷拍| 日韩黄色三级| 久久久久国产免费免费| 91色在线视频| 99成人精品视频| 亚洲国产日韩欧美一区二区三区| 日韩在线视频导航| 瑟瑟视频在线观看| 风间由美中文字幕在线看视频国产欧美| 91黄视频在线| 国产精品一区二区免费在线观看| 日本在线观看免费| 国产午夜精品美女毛片视频| 成人一区二区在线| 国产一区二区麻豆| 日韩一区精品视频| 2020欧美日韩在线视频| 久操视频免费在线观看| 日韩一区电影| 亚洲片国产一区一级在线观看| 欧美又粗又长又爽做受| 精品国产午夜福利| 国产精品99一区二区| 91精品欧美一区二区三区综合在 | 欧美极品jizzhd欧美18| 亚洲激情播播| 亚洲精品色婷婷福利天堂| 不许穿内裤随时挨c调教h苏绵| 高清久久一区| 欧美一区二区三区性视频| 亚洲精品久久久久久宅男| 国产精品刘玥久久一区| 国产精品视频第一区| 青青草成人激情在线| 日产精品久久久久久久性色| 99精品国产视频| 国产视频一区二区不卡| 深夜福利视频网站| 99精品欧美一区二区三区小说 | 天海翼精品一区二区三区| 精品久久久久久久久久久久久久久| 欧美激情第3页| 日本电影久久久| 678五月天丁香亚洲综合网| 午夜激情影院在线观看| 麻豆国产一区二区三区四区| 91精品国产福利在线观看| 麻豆精品国产传媒| 国产香蕉精品| 亚洲色图25p| 天堂资源在线视频| 久久久久电影| 欧美精品videosex牲欧美| 欧美成人aaaaⅴ片在线看| 亚洲在线国产日韩欧美| 国产精品第一区| 91在线精品入口| 国产suv精品一区二区6| 国产视频一区二区三区四区| 欧美一区二区三区少妇| 国产女人aaa级久久久级| 国产欧美日韩三级| 色涩成人影视在线播放| 蜜桃视频在线观看www社区| 亚洲青青青在线视频| 日韩人妻一区二区三区蜜桃视频| 日韩三级免费| 日韩欧美国产网站| 亚洲天堂av一区二区| 国产精品白丝av嫩草影院| 亚洲天堂av网| 欧美国产精品一二三| 麻豆精品av| 国产一区二区三区欧美| 中文字幕av播放| 国产精品一区亚洲| 成人性生交大片免费看视频直播| 亚洲精品一区二区三区区别 | 成人免费看aa片| 国产精品成人一区二区不卡| 国模精品系列视频| 成人免费毛片xxx| 亚洲精品日韩久久| 成人免费在线视频网址| 四虎精品成人影院观看地址| 亚洲欧美在线aaa| 一区二区精品在线| av不卡高清| 欧美日韩国产综合久久| 一本色道久久hezyo无码| 成人免费在线观看av| 欧美精品久久久久久久久久| 在线观看一二三区| 久久综合九色综合欧美98 | 黄色网在线播放| 欧美性猛交xxxx| 亚洲综合中文网| 日韩精品不卡一区二区| 777午夜精品福利在线观看| 免费在线一区二区三区| 日韩av电影一区| 久久久久久九九九九| 午夜dj在线观看高清视频完整版| 在线观看免费一区| 中文字幕 亚洲一区| 亚洲综合色网| 成人黄色大片在线免费观看| 精品无人乱码| 黑人巨大精品欧美一区二区三区 | 成人久久久久久久久| 91亚洲精品视频在线观看| 久久精品国产成人| 亚洲精品国产精品乱码视色| 26uuu国产日韩综合| 日韩网站在线免费观看| 婷婷视频一区二区三区| 欧美一卡二卡三卡四卡| 天堂资源在线视频| 日韩不卡一区二区| 日韩精彩视频| 狠狠久久伊人中文字幕| 一区二区三区天堂av| 久久久久精彩视频| 国产三级精品视频| 看欧美ab黄色大片视频免费| 香蕉人人精品| 日韩美女视频免费看| 中文字幕有码视频| 国产午夜精品久久久久久久 | 亚洲伊人婷婷| 精品176极品一区| 日韩中文字幕国产精品| 国产精品久久影视| 亚洲欧美日韩一区二区 | 日韩欧美国产另类| 国产精品无码永久免费888| 欧美亚洲视频一区| www久久久| 欧美日韩福利视频| 日本免费不卡视频| 欧美性色视频在线| 91中文字幕永久在线| 日韩精品福利网| 一本色道久久99精品综合| 亚洲欧美在线综合| 精品自在线视频| 天堂中文网在线| 日韩欧美精品在线观看| 日韩女同一区二区三区| 久久精品国产网站| 国产青草视频在线观看| 国产精品白丝av嫩草影院| 欧美一乱一性一交一视频| 高清日韩av电影| 午夜精品久久久久久久99樱桃| 免费看毛片的网站| 久久久久国产精品一区二区 | 欧美久久视频| 久热国产精品视频一区二区三区| 搜成人激情视频| 操日韩av在线电影| 性xxxx视频| 欧美日韩成人在线一区| 久久9999久久免费精品国产| 美女网站在线免费欧美精品| 激情视频在线观看一区二区三区| 黑森林国产精品av| 中文字幕视频一区二区在线有码| 国产精品一区二区av白丝下载 | 国产精品51麻豆cm传媒| 专区另类欧美日韩| av无码一区二区三区| 麻豆视频观看网址久久| 黄色一级片黄色| 欧美日韩在线观看视频小说| 亚洲在线第一页| 欧美18av| 高清亚洲成在人网站天堂| 东凛在线观看| 亚洲国产精品资源| 国产又粗又猛又爽又黄的视频一| 五月婷婷综合网| 黑人操日本美女| 国产日韩影视精品| 在线看黄色的网站| 国产乱码精品一区二区三| 亚洲熟妇av一区二区三区| 午夜精品免费| 成年人免费观看的视频| 亚洲福利网站| 国产一区二区高清不卡 | 蜜桃视频在线观看一区| 丝袜人妻一区二区三区| 婷婷伊人综合| 日本一区精品| 久久午夜影院| 成人高清在线观看| **国产精品| 国产精品美腿一区在线看| 欧美巨大xxxx做受沙滩| 俺去啦;欧美日韩| eeuss影院在线播放| 精品亚洲夜色av98在线观看| 亚洲国产精品久久久久久久| 欧美日韩精品一区二区三区蜜桃| 午夜婷婷在线观看| 午夜精品久久久久久久蜜桃app| 国产探花在线播放| 亚洲三级电影全部在线观看高清| 伊人网伊人影院| av男人天堂一区| yjizz视频| 国产69精品久久777的优势| 亚洲欧美天堂在线| 国精产品一区一区三区mba视频| 熟女人妇 成熟妇女系列视频| 国产一区导航| 男人操女人逼免费视频| 亚洲国产国产亚洲一二三| 成年人看的毛片| 亚洲成色精品| 中文字幕无码精品亚洲35| 99亚洲视频| 日本wwww视频| 久久中文在线| 日日噜噜噜噜久久久精品毛片| 日本欧洲一区二区| 欧美男女交配视频| 久久99精品网久久| 性久久久久久久久久久久久久| 精品一区二区三区免费| 一区二区三区四区毛片| 国内精品久久久久影院薰衣草| 182午夜在线观看| 狠狠色伊人亚洲综合成人| 亚洲精品乱码久久久久久动漫| 精品制服美女丁香| 自拍视频第一页| 波多野结衣一区二区三区| 欧美色图另类小说| 亚洲深爱激情| 韩国一区二区av| 免费在线观看视频一区| xxxx在线免费观看| 国产麻豆精品在线| 艳妇乳肉亭妇荡乳av| 久久综合国产精品| 国产wwwwxxxx| 亚洲制服丝袜在线| 国产精品久久久久久99| 91福利视频在线| 91肉色超薄丝袜脚交一区二区| 日韩一区二区在线看片| 男人天堂网在线视频| 亚洲欧美日韩网| 欧美成人精品一区二区男人看| 欧美另类老女人| 欧美成人免费电影| 国产一区二区色| 高清一区二区三区| 日韩高清三级| 欧美日韩视频| 女性隐私黄www网站视频| 极品少妇xxxx偷拍精品少妇| 蜜桃色一区二区三区| 国产日韩综合av| 久久精品免费在线| 色av成人天堂桃色av| 国产同性人妖ts口直男| 亚洲精品日韩欧美| 影音先锋在线播放| 久久久成人的性感天堂| heyzo在线播放| 国产精品一区二区三区免费视频 | 国精产品一区一区三区mba桃花| 制服丝袜av在线| 亚洲欧洲www| 亚洲天堂男人av| 欧美tk丨vk视频| 在线视频三区| 91成品人片a无限观看| av日韩一区| 日韩av电影免费播放| 亚洲国产黄色| 亚洲高清在线不卡| 日本一区二区免费在线观看视频| 男人操女人的视频网站| 色噜噜狠狠色综合中国| 黄色av一区二区三区| 日韩在线激情视频| 日韩精品影片| 国产尤物91| 好看不卡的中文字幕| 国产精品v日韩精品v在线观看| 99re在线视频这里只有精品| 日韩在线中文字幕视频| 欧美日韩在线播放一区| 免费在线稳定资源站| 98精品国产自产在线观看| 高清一区二区| 亚洲一区二区在线看| 亚洲一区国产| av网页在线观看| 亚洲一级二级三级| 精品久久久久中文慕人妻| 少妇激情综合网| 精品三区视频| 日本欧洲国产一区二区| 一本色道久久| 男男做爰猛烈叫床爽爽小说| 亚洲最大色网站| 亚洲国产精品无码久久| 麻豆成人在线看| 99精品国产九九国产精品| 亚洲国产日韩美| 日韩和欧美的一区| 一区二区精品免费| 色爱区综合激月婷婷| 久久精品色图| 国产成人免费av电影| 精品乱码一区二区三区四区| 久久久福利视频| 亚洲一区图片| 色婷婷在线影院| 一本一本久久a久久精品综合麻豆| 天天操天天射天天| 欧美亚洲免费电影| 精品中文一区| 日韩一级理论片| 中文字幕在线不卡| 国产内射老熟女aaaa∵| 欧美成人激情在线| av综合网址| 色综合久久久久无码专区| 26uuu另类欧美| 久草热在线观看| 久久久精品美女| 成人激情自拍| 国产a级一级片| 日本一区二区三区高清不卡| 在线免费看91| 欧美片一区二区三区| 欧美精品中文| 成人性视频欧美一区二区三区| 日本一区二区三区在线观看| 中文字字幕在线观看| 欧美成人午夜剧场免费观看| 亚洲乱码一区| 午夜肉伦伦影院| 亚洲国产高清在线观看视频| 国产男女无套免费网站| 久久人人看视频| 精品国产网站| 老女人性生活视频| 日韩欧美成人精品| 日本www在线观看视频| 国产高清精品一区二区| 媚黑女一区二区| 久久中文免费视频| 日韩av在线免费观看| jizzyou欧美16| 日韩成人手机在线| 国产日韩欧美一区二区三区乱码| 国产男女猛烈无遮挡| 欧美性受xxx| 五月综合激情| 国产亚洲无码精品| 亚洲国产aⅴ成人精品无吗| 蜜桃视频在线观看网站| 91沈先生在线观看| 亚洲自拍另类| 欧美成人精品激情在线视频| 日韩精品一区二区视频| av在线亚洲一区| 虎白女粉嫩尤物福利视频| 亚洲欧美日韩电影| 你懂的免费在线观看| 91久久大香伊蕉在人线| 日韩av中文字幕一区二区| 免费在线观看av网址| 中文字幕亚洲欧美在线| 美腿丝袜亚洲图片|