国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

gRPC服務(wù)的響應(yīng)設(shè)計(jì)

共 8455字,需瀏覽 17分鐘

 ·

2021-11-19 09:44

1. 服務(wù)端響應(yīng)的現(xiàn)狀

做后端服務(wù)的開發(fā)人員對(duì)錯(cuò)誤處理總是很敏感的,因此在做服務(wù)的響應(yīng)(response/reply)設(shè)計(jì)時(shí)總是會(huì)很慎重。

如果后端服務(wù)選擇的是HTTP API(rest api),比如json over http,API響應(yīng)(Response)中大多會(huì)包含如下信息:

{
?"code":?0,
?"msg":?"ok",
?"payload"?:?{
????????...?...
?}
}

在這個(gè)http api的響應(yīng)設(shè)計(jì)中,前兩個(gè)狀態(tài)標(biāo)識(shí)這個(gè)請(qǐng)求的響應(yīng)狀態(tài)。這個(gè)狀態(tài)由一個(gè)狀態(tài)代碼(code)與狀態(tài)信息(msg)組成。狀態(tài)信息是對(duì)狀態(tài)代碼所對(duì)應(yīng)錯(cuò)誤原因的詳細(xì)詮釋。只有當(dāng)狀態(tài)為正常時(shí)(code = 0),后面的payload才具有意義。payload顯然是在響應(yīng)中意圖傳給客戶端的業(yè)務(wù)信息。

這樣的服務(wù)響應(yīng)設(shè)計(jì)是目前比較常用且成熟的方案,理解起來(lái)也十分容易。

好,現(xiàn)在我們看看另外一大類服務(wù):采用RPC方式提供的服務(wù)。我們還是以使用最為廣泛的gRPC為例。在gRPC中,一個(gè)service的定義如下(我們借用一下grpc-go提供的helloworld示例[1]):

//?https://github.com/grpc/grpc-go/blob/master/examples/helloworld/helloworld/helloworld.proto
package?helloworld;

//?The?greeting?service?definition.
service?Greeter?{
??//?Sends?a?greeting
??rpc?SayHello?(HelloRequest)?returns?(HelloReply)?{}
}

//?The?request?message?containing?the?user's?name.
message?HelloRequest?{
??string?name?=?1;
}

//?The?response?message?containing?the?greetings
message?HelloReply?{
??string?message?=?1;
}

grpc對(duì)于每個(gè)rpc方法(比如SayHello)都有約束,只能有一個(gè)輸入?yún)?shù)和一個(gè)返回值。這個(gè).proto定義通過(guò)protoc生成的go代碼變成了這樣:

//?https://github.com/grpc/grpc-go/blob/master/examples/helloworld/helloworld/helloworld_grpc.pb.go
type?GreeterServer?interface?{
?//?Sends?a?greeting
????SayHello(context.Context,?*HelloRequest)?(*HelloReply,?error)
????...?...
}

我們看到對(duì)于SayHello RPC方法,protoc生成的go代碼中,SayHello方法的返回值列表中多了一個(gè)Gopher們熟悉的error返回值。對(duì)于已經(jīng)習(xí)慣了HTTP API那套響應(yīng)設(shè)計(jì)的gopher來(lái)說(shuō),現(xiàn)在問(wèn)題來(lái)了! http api響應(yīng)中表示響應(yīng)狀態(tài)的code與msg究竟是定義在HelloReply這個(gè)業(yè)務(wù)響應(yīng)數(shù)據(jù)中,還是通過(guò)error來(lái)返回的呢?這個(gè)grpc官方文檔似乎也沒(méi)有明確說(shuō)明(如果各位看官找到位置,可以告訴我哦)。

2. gRPC服務(wù)端響應(yīng)設(shè)計(jì)思路

我們先不急著下結(jié)論!我們繼續(xù)借用helloworld這個(gè)示例程序來(lái)測(cè)試一下當(dāng)error返回值不為nil時(shí)客戶端的反應(yīng)!先改一下greeter_server[2]的代碼:

//?SayHello?implements?helloworld.GreeterServer
func?(s?*server)?SayHello(ctx?context.Context,?in?*pb.HelloRequest)?(*pb.HelloReply,?error)?{?
????log.Printf("Received:?%v",?in.GetName())
????return?&pb.HelloReply{Message:?"Hello?"?+?in.GetName()},?errors.New("test?grpc?error")
}

在上面代碼中,我們故意構(gòu)造一個(gè)錯(cuò)誤并返回給調(diào)用該方法的客戶端。我們來(lái)運(yùn)行一下這個(gè)服務(wù)并啟動(dòng)greeter_client[3]來(lái)訪問(wèn)該服務(wù),在客戶端側(cè),我們得到的結(jié)果如下:

2021/09/20?17:04:35?could?not?greet:?rpc?error:?code?=?Unknown?desc?=?test?grpc?error

從客戶端的輸出結(jié)果中,我們看到了我們自定義的錯(cuò)誤的內(nèi)容(test grpc error)。但我們還發(fā)現(xiàn)錯(cuò)誤輸出的內(nèi)容中還有一個(gè)"code = Unknown"的輸出,這個(gè)code是從何而來(lái)呢?似乎grpc期待的error形式是包含code與desc的形式。

這時(shí)候就不得不查看一下gprc-go(v1.40.0)的參考文檔[4]了!在grpc-go的文檔中我們發(fā)現(xiàn)幾個(gè)被DEPRECATED的與Error有關(guān)的函數(shù):

在這幾個(gè)作廢的函數(shù)的文檔中都提到了用status包的同名函數(shù)替代。那么這個(gè)status包又是何方神圣?我們翻看grpc-go的源碼,終于找到了status包,在包說(shuō)明的第一句中我們就找到了答案:

Package?status?implements?errors?returned?by?gRPC.?

原來(lái)status包實(shí)現(xiàn)了上面grpc客戶端所期望的error類型。那么這個(gè)類型是什么樣的呢?我們逐步跟蹤代碼:

在grpc-go/status包中我們看到如下代碼:

type?Status?=?status.Status

//?New?returns?a?Status?representing?c?and?msg.
func?New(c?codes.Code,?msg?string)?*Status?{
????return?status.New(c,?msg)
}

status包使用了internal/status包中的Status,我們?cè)賮?lái)看internal/status包中Status結(jié)構(gòu)的定義:

//?internal/status
type?Status?struct?{
????s?*spb.Status
}

//?New?returns?a?Status?representing?c?and?msg.
func?New(c?codes.Code,?msg?string)?*Status?{
????return?&Status{s:?&spb.Status{Code:?int32(c),?Message:?msg}}
}

internal/status包的Status結(jié)構(gòu)體組合了一個(gè)*spb.Status類型(google.golang.org/genproto/googleapis/rpc/status包中的類型)的字段,繼續(xù)追蹤spb.Status:

//?https://pkg.go.dev/google.golang.org/genproto/googleapis/rpc/status
type?Status?struct?{
?//?The?status?code,?which?should?be?an?enum?value?of?[google.rpc.Code][google.rpc.Code].
?Code?int32?`protobuf:"varint,1,opt,name=code,proto3"?json:"code,omitempty"`
?//?A?developer-facing?error?message,?which?should?be?in?English.?Any
?//?user-facing?error?message?should?be?localized?and?sent?in?the
?//?[google.rpc.Status.details][google.rpc.Status.details]?field,?or?localized?by?the?client.
?Message?string?`protobuf:"bytes,2,opt,name=message,proto3"?json:"message,omitempty"`
?//?A?list?of?messages?that?carry?the?error?details.??There?is?a?common?set?of
?//?message?types?for?APIs?to?use.
?Details?[]*anypb.Any?`protobuf:"bytes,3,rep,name=details,proto3"?json:"details,omitempty"`
?//?contains?filtered?or?unexported?fields
}

我們看到最后的這個(gè)Status結(jié)構(gòu)包含了Code與Message。這樣一來(lái),grpc的設(shè)計(jì)意圖就很明顯了,它期望開發(fā)者在error這個(gè)返回值中包含rpc方法的響應(yīng)狀態(tài),而自定義的響應(yīng)結(jié)構(gòu)體只需包含業(yè)務(wù)所需要的數(shù)據(jù)即可。我們用一幅示意圖來(lái)橫向建立一下http api與rpc響應(yīng)的映射關(guān)系:

有了這幅圖,再面對(duì)如何設(shè)計(jì)grpc方法響應(yīng)這個(gè)問(wèn)題時(shí),我們就胸有成竹了!

grpc-go在codes包[5]中定義了grpc規(guī)范要求的10余種錯(cuò)誤碼:

const?(
?//?OK?is?returned?on?success.
?OK?Code?=?0

?//?Canceled?indicates?the?operation?was?canceled?(typically?by?the?caller).
?//
?//?The?gRPC?framework?will?generate?this?error?code?when?cancellation
?//?is?requested.
?Canceled?Code?=?1

?//?Unknown?error.?An?example?of?where?this?error?may?be?returned?is
?//?if?a?Status?value?received?from?another?address?space?belongs?to
?//?an?error-space?that?is?not?known?in?this?address?space.?Also
?//?errors?raised?by?APIs?that?do?not?return?enough?error?information
?//?may?be?converted?to?this?error.
?//
?//?The?gRPC?framework?will?generate?this?error?code?in?the?above?two
?//?mentioned?cases.
?Unknown?Code?=?2

?//?InvalidArgument?indicates?client?specified?an?invalid?argument.
?//?Note?that?this?differs?from?FailedPrecondition.?It?indicates?arguments
?//?that?are?problematic?regardless?of?the?state?of?the?system
?//?(e.g.,?a?malformed?file?name).
?//
?//?This?error?code?will?not?be?generated?by?the?gRPC?framework.
?InvalidArgument?Code?=?3

????...?...

?//?Unauthenticated?indicates?the?request?does?not?have?valid
?//?authentication?credentials?for?the?operation.
?//
?//?The?gRPC?framework?will?generate?this?error?code?when?the
?//?authentication?metadata?is?invalid?or?a?Credentials?callback?fails,
?//?but?also?expect?authentication?middleware?to?generate?it.
?Unauthenticated?Code?=?16

在這些標(biāo)準(zhǔn)錯(cuò)誤碼之外,我們還可以擴(kuò)展定義自己的錯(cuò)誤碼與錯(cuò)誤描述。

3. 服務(wù)端如何構(gòu)造error與客戶端如何解析error

前面提到,gRPC服務(wù)端采用rpc方法的最后一個(gè)返回值error來(lái)承載應(yīng)答狀態(tài)。google.golang.org/grpc/status包為構(gòu)建客戶端可解析的error提供了一些方便的函數(shù),我們看下面示例(基于上面helloworld的greeter_server[6]改造):

func?(s?*server)?SayHello(ctx?context.Context,?in?*pb.HelloRequest)?(*pb.HelloReply,?error)?{
????log.Printf("Received:?%v",?in.GetName())
????return?nil,?status.Errorf(codes.InvalidArgument,?"you?have?a?wrong?name:?%s",?in.GetName())
}

status包提供了一個(gè)類似于fmt.Errorf的函數(shù),我們可以很方便的構(gòu)造一個(gè)帶有code與msg的error實(shí)例并返回給客戶端。

而客戶端同樣可以通過(guò)status包提供的函數(shù)將error中攜帶的信息解析出來(lái),我們看下面代碼:

ctx,?_?:=?context.WithTimeout(context.Background(),?time.Second)
r,?err?:=?c.SayHello(ctx,?&pb.HelloRequest{Name:?"tony")})
if?err?!=?nil?{
????errStatus?:=?status.Convert(err)
????log.Printf("SayHello?return?error:?code:?%d,?msg:?%s\n",?errStatus.Code(),?errStatus.Message())
}
log.Printf("Greeting:?%s",?r.GetMessage())

我們看到:通過(guò)status.Convert函數(shù)可以很簡(jiǎn)答地將rpc方法返回的不為nil的error中攜帶的信息提取出來(lái)。

4. 空應(yīng)答

gRPC的proto文件規(guī)范要求每個(gè)rpc方法的定義中都必須包含一個(gè)返回值,返回值不能為空,比如上面helloworld項(xiàng)目的.proto文件中的SayHello方法:

rpc?SayHello?(HelloRequest)?returns?(HelloReply)?{}

如果去掉HelloReply這個(gè)返回值,那么protoc在生成代碼時(shí)會(huì)報(bào)錯(cuò)!

但是有些方法本身不需要返回業(yè)務(wù)數(shù)據(jù),那么我們就需要為其定義一個(gè)空應(yīng)答消息,比如:

message?Empty?{

}

考慮到每個(gè)項(xiàng)目在遇到空應(yīng)答時(shí)都要重復(fù)造上面Empty message定義的輪子,grpc官方提供了一個(gè)可被復(fù)用的空message:

//?https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/empty.proto

//?A?generic?empty?message?that?you?can?re-use?to?avoid?defining?duplicated
//?empty?messages?in?your?APIs.?A?typical?example?is?to?use?it?as?the?request
//?or?the?response?type?of?an?API?method.?For?instance:
//
//?????service?Foo?{
//???????rpc?Bar(google.protobuf.Empty)?returns?(google.protobuf.Empty);
//?????}
//
//?The?JSON?representation?for?`Empty`?is?empty?JSON?object?`{}`.
message?Empty?{}

我們只需在.proto文件中導(dǎo)入該empty.proto并使用Empty即可,比如下面代碼:

//?xxx.proto

syntax?=?"proto3";
??
import?"google/protobuf/empty.proto";

service?MyService?{
?rpc?MyRPCMethod(...)?returns?(google.protobuf.Empty);
}

當(dāng)然google.protobuf.Empty不僅僅適用于空響應(yīng),也適合空請(qǐng)求,這個(gè)就留給大家可自行完成吧。

5. 小結(jié)

本文我們講述了gRPC服務(wù)端響應(yīng)設(shè)計(jì)的相關(guān)內(nèi)容,最主要想說(shuō)的是直接使用gRPC生成的rpc方面的error返回值來(lái)表示rpc調(diào)用的響應(yīng)狀態(tài),不要再在自定義的Message結(jié)構(gòu)中重復(fù)放入code與msg字段來(lái)表示響應(yīng)狀態(tài)了。

btw,做API的錯(cuò)誤設(shè)計(jì),google的這份API設(shè)計(jì)方面的參考資料[7]是十分好的。有時(shí)間一定要好好讀讀哦。

參考資料

[1]?

helloworld示例:?https://github.com/grpc/grpc-go/tree/master/examples/helloworld

[2]?

greeter_server:?https://github.com/grpc/grpc-go/blob/master/examples/helloworld/greeter_server/main.go

[3]?

greeter_client:?https://github.com/grpc/grpc-go/tree/master/examples/helloworld/greeter_client

[4]?

gprc-go(v1.40.0)的參考文檔:?https://pkg.go.dev/google.golang.org/grpc#section-readme

[5]?

codes包:?https://pkg.go.dev/google.golang.org/[email protected]/codes#Code

[6]?

greeter_server:?https://github.com/grpc/grpc-go/blob/master/examples/helloworld/greeter_server/main.go

[7]?

google的這份API設(shè)計(jì)方面的參考資料:?https://cloud.google.com/apis/design/errors

[8]?

改善Go語(yǔ)?編程質(zhì)量的50個(gè)有效實(shí)踐:?https://www.imooc.com/read/87

[9]?

Kubernetes實(shí)戰(zhàn):高可用集群搭建、配置、運(yùn)維與應(yīng)用:?https://coding.imooc.com/class/284.html

[10]?

鏈接地址:?https://m.do.co/c/bff6eed92687



推薦閱讀


福利

我為大家整理了一份從入門到進(jìn)階的Go學(xué)習(xí)資料禮包,包含學(xué)習(xí)建議:入門看什么,進(jìn)階看什么。關(guān)注公眾號(hào) 「polarisxu」,回復(fù)?ebook?獲?。贿€可以回復(fù)「進(jìn)群」,和數(shù)萬(wàn) Gopher 交流學(xué)習(xí)。

瀏覽 47
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 免费的黄色片| 久本草精品| 国产人妻精品一区二区三区不卡| 成人无码精品| 在线免费观看黄色小视频| 在线免费看黄视频| 一级a一级a爰片免费免免中国A片 一级一级a免一级a做免费线看内裤 | 欧美色精品| 三级AV在线免费观看| 久久人妻熟女中文字幕av蜜芽| 日韩在线中文字幕视频| 日韩欧美精品在线| 亚洲婷婷精品国产成人| 婷婷开心色四房播播免费| 久久国产免费| 黄色小视频免费观看| 国产嫩苞又嫩又紧AV在线| 久久免费视频3| 日本一区二区三区四区| 青青草免费在线视频| 黄页网站免费在线观看| 一区二区成人电影| 久草资源在线观看| 国产av日韩av| 俺也来俺也去WWW色| 日韩精品欧美一区二区三区| 日本一区二区不卡| 午夜视频在线播放| 日韩无码影视| 黄片国产| 一本道精品在线| www.伊人大香蕉| 91自摸| 婷婷五月天激情四射| 午夜久久| 操比在线| 国产A片网站| 欧美成人手机在线观看| 怡红院成人AV| 蜜桃久久久久久久| 精品无套| 日韩欧美一级| 色综合色| 中文字幕亚洲在线观看| 欧美一级婬片AAAA毛片| 最近中文字幕在线中文字幕7| 中文字幕第72页| 久久久极品| 一道本不卡视频| 黄色3A片在线观看| 躁BBB躁BBB躁BBBBBB日| 在线播放你懂的| 国产乱视频| 无码一卡| 中文字幕第69页| 欧美精品系列| 久久偷拍网| 老熟女伦一区二区三区| 18禁看网站| 凸凹翔田千里无码| 国产免看一级a一片成人aⅴ| 国产美女一级特黄大片| 欧美日韩国产尤物主播精品| 69精品| 亚洲资源站| 丁香五月天堂| 另类日韩| 在线观看视频91| eeuss国产| 免费观看一区二区三区| 黄色片大全| 香蕉操逼| 久久久成人影片| 俄罗斯老熟妇与子伦| 大香蕉网站视频| 开心色播五月天| 亚洲AV一二三| 国产色秘乱码一区二区三区| 肏少妇女情人大骚逼直播一区二区 | 四色影视| 亚洲日韩精品无码| 日本中文字幕在线观看视频 | 丁香花在线高清完整版视频| 国产A级成人婬片1976| 欧美五月在线网址| 不卡无码中文字幕一区| 丹麦电影《下午》| 大乳奶一级婬片A片| 日韩三级小说| 狠狠操综合网| 久草这里只有精品| A级无码| 超碰在线观看91| 人人操大香蕉| 99精品人妻| 亚洲无码视频在线看| 一区二区三区网| 日韩AV免费电影| 黄色AV免费在线观看| 美女黄色网| www.日本色| 中文字幕熟女| 亚洲v在线观看| 黄片无码免费| 免费观看操逼| 成人精品电影| 亚洲乱码在线观看| 91人妻人人澡人人澡人人精品 | 国产欧美日韩在线观看| 青青草成人在线| 黄片AAA| 国产对白在线| 久久女人| 欧美视频一区| 亚洲成人少妇老妇a视频在线| 乱轮少妇| 免费人成年激情视频在线观看| 午夜成人福利视频在线观看| 中文字幕88页| 人人澡人人爽欧一区| 超碰在线日韩| 91福利影院| 无码综合| 超碰综合| 夜色88V精品国产亚洲| 91性爱视频在线观看| 特黄色视频| 搡老熟女-91Porn| 大香蕉东京热| 成人在线A片| 丁香五月天啪啪| 国产精彩视频| 九九这里有精品| 人妻视频网站| 欧美日韩国产在线观看| 亚洲欧美日韩在线| 无码不卡视频在线观看| 天天天做夜夜夜夜爽无码| www五月天com| 亚洲成人77777| 国产真人无码| 男女福利视频| 玖玖激情| 国产麻豆性爱视频| 中国老女人操逼视频| 欧美精品无码| 欧美在线一区二区三区| 色色天堂| 青草娱乐| 国产免费操逼| 玖热精品| 北条麻妃精品青青久久价格| 91久久精品国产91久久公交车| 婷婷激情五月综合| 亚洲中文字幕播放| 婷婷二区| 99热这里只有精品999| 天天天日天天天天天天天日歌词| 久热免费视频在线观看| 国产亚洲中文| 蜜臀久久久99久久久久久久| 天天爱综合| 丁香五月婷婷六月| 欧美成人在线网站| 日本成人视频| 国产又爽又黄免费视频免费观看| 五月激情婷婷基地| 91国产人妻| 精品日韩中文字幕| 中文字幕精品视频在线观看| 99久久婷婷国产综合精品hsex| 黄色网址在线免费观看| 三级片无码在线播放| 婷婷一区二区| 色眯眯久久爱| 天天夜夜爽| 欧美va亚洲va| 学生妹内射| 亚洲成人视频免费在线观看| 91网站免费观看| 国产av中文字幕| 色色婷婷五月天| 麻豆MD传媒MD0071| 97人妻一区二区精品免费视频| 国产黄片在线视频| 夜夜撸天天干| 日本精品在线视频| 久久精品视频免费| 青误乐在线播放| 成人资源站| 一级黄色片免费观看| 在线观看亚洲一区| 亚洲欧洲免费| 臭小子啊轻点灬太粗太长了的视频| 国产在线小视频| 国产操屄网| 日韩第三页| 成人黄色无码视频| 成人无码区免费A片在线软件| 黄色美女网站| 揉BBB搡BBB搡BBB| 9l视频自拍九色9l视频成人 | 在线视频99| 无码一区二区在线观看| 国产av中文字幕| 欧美日日| 精品成人Av一区二区三区| 91吴梦梦无码一区二区| 18禁无码永久免费网站大全| 91啪啪视频| 亚洲av影院| 日韩性爱视频在线播放| 国产精品小电影| 欧美日韩亚洲中文字幕| 免费AV片| 亚洲视频中文字幕| 夜夜撸夜夜操| 天天看毛片| 97精品在线视频| 欧美激情一区二区| 国产三级片网| 男人的天堂aa| 久久久久久久久久8888| 五月丁香影院| 亚洲夜夜爱| 日韩无码A| 欧美人妻中文字幕| 青草青草| 欧美日本成人网站入口| 爱爱爱爱网| 97中文字幕在线| 无码免费视频在线观看| 99国产视频| 啪啪视频m3u8| 波多野结衣一级婬片A片免费下载 囯产精品久久久久久久久免费无码 | 欧美操B视频| 波多野结衣高清av久久直播免 | www.婷婷六月天| 2025中文字幕| 高清无码免费在线视频| 狼色AV| 国产成人精品av| 西西888WWW大胆无码| 中文字幕网在线| 超碰综合| 91国产视频在线观看| 特黄网站| 欧美在线日韩在线| 国产手机拍视频推荐2023| 亚洲成人网在线观看| 国产码在线成人网站| 亚洲网站在线免费观看| 北条麻妃精品在线| 美女黄片| 欧美性极品少妇精品网站| 懂色av懂色av粉嫩av| 亚洲无线视频| www.骚逼| 中日韩精品A片中文字幕| 最新中文字幕av| 日韩免费视频一区二区| 欧美成人看片| 亚洲群交视频| 日韩AV免费在线| 五月天婷婷乱伦| 91久久人澡人妻人人澡人人爽| 国产精品国三级国产a11| 国产高清无码免费| 黄p网站| 国产精品无码中文在线| 超碰国产在线| 狠狠色狠狠操| h片在线免费观看视频| 猫咪AV成人永久网站| 成人123区| 激情五月俺也去| AV免费播放| 黑人粗暴偷拍一区二区| 亚洲AⅤ无码一区二区波多野按摩| 欧美一级A片免费看| 俺来也操逼| 五月丁香激情在线| 内射一区| 最美孕交vivoestv另类| 少妇人妻av| 成人视频免费| 91丨九色丨蝌蚪丨肥女| 午夜福利100理论片| 五月开心婷婷| 亚洲无码免费视频在线观看| 三级片视频网址| 麻豆乱码国产一区二区三区 | 久色天堂| 久久久亚洲| 亚洲一级婬片A片AAAA网址| 日本成人高清视频| 俺去日| 91视频免费在线看| 国产AV| 五月天激情小说| 国产av网| 日韩一级在线播放| 国产精品91久久久| 亚洲日韩欧美中在线| 成人福利| 无码中文综合成熟精品AV电影| www尤物| 大香蕉伊人| 在线观看18s| 中文字幕在线不卡| 懂色一区二区二区在线播放视频| 囯产精品99久久久久久WWW| 欧美三级片视频| 午夜国产在线视频| 18av在线观看| av不卡免费观看| 欧美日韩中文字幕在线视频| 国产成人无码A片免费看| 国产女人水真多18毛片18精品 | 久热草| 欧美日韩成人| 一区二区三区www污污污网站| 美女黄片| 中日韩精品A片中文字幕| 亚洲美女视频在线观看| 88AV视频| 国产A片网站| 日韩一级黄色视频| 天天爽夜夜操| 无码a区| 婚闹不堪入目A片| 在线看片A| H版视频| 欧美国产综合| 最新一区二区| 在线黄色视频网站| 国产免费小视频| 一区二区三区国产精品| 黄a在线观看| 在线免费三级| 黄网免费观看| 天天玩夜夜玩天天玩国产99| 天堂资源在线观看| 亚洲成人视频在线观看| 一个人看的视频www| 99久久久久| 亚洲一区亚洲二区| 先锋影音资源av| 国产精品在线免费| 婷婷五月在线观看| 亚洲色激情| 日韩欧美高清第一期| 精品中文一区二区三区| 日韩在线中文字幕视频| AV一二区| 在线无码中文| 北条麻妃一区二区三区在线| 美腿丝袜中文字幕精品| 久久人妻无码中文字幕系列 | 国产精品91视频| 中文资源在线√8| 91视频18| 国产成人三级在线播放| 日韩肏逼| 噜噜| 日本a级视频| 日日夜夜天天综合| 曰韩毛片| 欧美+日产+中文| 国产VA| 亚洲香蕉视频网站| 先锋影音AV资源网| 伊人色综合网| 久草免费在线视频| 国产精品秘国产精品88| yw·163.爆乳尤物com| 久久久久女人精品毛片九一| 久久久噜噜噜久久中文字幕色伊伊| 欧美在线视频你懂的| 久在线观看| 中文字幕东京热| 无码一区二区三区在线| 日韩性爱在线视频| xxx综合网| 欧美性爱XXXX黑人XYX性爽| 伊人网视频在线观看| 中文字幕在线免费观看电影| 最新中文字幕在线观看| 色天堂在线观看视频| 性感91影院| 亚洲中文字幕观看| 午夜啪啪网站| 91精品免费视频| 夜夜嗨AV一区二区三区啊| 黄色美女网站| 天天日天天噜| 特级444WWW大胆高清| 日韩欧美小电影| 激情丁香五月| 狠狠干狠狠爱| 69午夜| A片视频免费| 亚洲网站免费在线观看| 超碰p| 亚洲精品麻豆| 操操操操操操| 日本成人高清视频| 无套免费视频欧美| 2025AV天堂网| 一区二区三区国产精品| 偷拍综合网| 囯产精品一区二区三区AV做线| 热逼视频| 成人电影无码| 91免费在线视频观看| 在线播放JUY-925被丈夫上司侵犯的第7天| 人人妻人人澡人人DⅤD| 日韩精品人妻中文字幕| 日本免费不卡视频| 天天澡天天爽日日AV| 欧美成人内射| 国产亚洲综合无码| 操大香蕉| 欧美色图另类图片| 天天影视综合网免费观看电视剧国产| 99视频精品全部免费看| 亚洲精品A片| 91亚洲在线| 国产亲子乱婬一级A片借种 | 越南小嫩嫩BBWBBw| 欧美一级欧美三级在线观看| 国产毛片久久久久久国产毛片| 黄片免费看视频| 欧美一区二区三区在线播放| 日韩一区二区三区视频| 国产美女AV| 91色视频在线观看| 黄色福利在线观看| 99热日韩| 丁香婷婷男人天堂| 婷婷五月天综合| 国产福利在线导航| 亚洲日韩AV在线| 日韩无码视频网站| 玖玖热在线视频| 日本色色色| 日韩在线你懂的| 2025四虎在线视频观看| 亚洲无码成人视频| 日韩无码人妻一区| 成人毛片网站| 思思热视频在线观看| 二级黄色毛片| 国产黄网| 9l视频自拍蝌蚪9l成人蝌蚪| 日韩中文字幕一区二区| 91精品婷婷国产综合久久竹菊| 9l视频自拍蝌蚪9l成人| 一级黄色av| 欧美成人一级| 免费在线黄色视频| 中国免费毛片| 无码一道本| 大香久久| 色婷婷AV在线| 日韩人妻丰满无码区A片| 久久99人妻无码精品一区| 无码欧美人XXXXX日本无码| 免费激情网站| 中文字幕欧美视频| 先锋影音男人资源站| 国产无码专区| 偷拍亚洲欧美| 久久久91人妻无码精品蜜桃ID | 亚洲日韩色色| 午夜av在线| 91丨熟女丨对白| 色色色色AV| 国产无码一区二区| 亚洲专区中文字幕| 影音先锋AV资源在线| 懂色成人av影院| 亚洲AV电影网| 久久天堂AV综合合色蜜桃网| 久久草草热国产精| 口爆在线观看| 最新国产精品| 无码人妻精品一区二区蜜桃网站| 91亚洲视频| 蜜桃av秘无码一区二区三欧| 日本黄色视频大全| 超碰中文在线| 欧美日韩免费看| 91精品在线免费观看| 午夜福利av电影| 免费av在线| 五月伊人激情| 99国产在线观看免费视频| 日本色情视频网站| 黄色视频网站在线| 无码一区二区在线观看| 东京热日韩无码| 汇聚全球淫荡熟女| 人妻av在线| 黄视频在线观看免费| 高清无码内射视频| 大香蕉久久| 人人草在线视频| 艹逼在线观看| 免费观看的av| 亚洲日色| 国产精品一卡二卡| 欧美日韩精品一区二区三区视频播放| 西西444WWW无码大胆在线观看| 成人在线视频免费观看| 亚洲无码电影网站| 亚洲在线成人视频| 乱人伦欲国语对白| 亚洲精品无码视频| 色婷婷AV国产精品| 日韩AV无码专区亚洲AV| 秘蜜桃色一区二区三区在线观看| 大香蕉伊人在线手机网| 国精产品一区二区三区黑人和中国| 蜜臀99久久精品久久久懂爱 | 欧美激情在线观看| 国产免费AV在线观看| 8050午夜一级免费| 精品久久视频| 中文字幕精品无码一区二区| 91人妻人人澡人人爽人人爽| 苍井空一区二区三区四区| 日本AI高清无码在线观看网址 | www.99在线| 国产精品系列视频| 国产一区二区不卡| 国产一区二区视频在线观看| av在线中文| 大香蕉熟女| 人人操人人摸人人射| 第一页在线| 91人妻在线视频| 天堂va欧美va亚洲va在线 | 亚洲码AV波多野| 成人影视亚洲| 精品一区在线| 欧美精品第一页| 一区二区三区精品无码| 国产天堂av| 亚洲欧美在线综合| 日韩天天操| 91天堂网| 天天爱综合| 天天综合天天| 久久艹综合网| 97在线鲁碰免费视频| 91高清视频| 日韩高清av| 欧美一级特黄AAAAAA片| 日本一级黄色| 精品乱子伦一区二区在线播放| 全部视频午夜寂寞| 天天干天天添| 亚洲自拍电影| 天天色色色| 97精品人妻一区二区三区香蕉| 一区二区三区高清不卡| 亚洲黄色无码视频| 免费A片视频| 天天爽视频| 无码区一区二区三区| 99re超碰| 美女扣逼网站| 操逼资源| 水果派成人播放无码| 国产精品成人视频| 亚洲欧美日韩国产| 91无码在线视频| 51妺嘿嘿午夜福利在线| 国产日韩中文字幕| 在线成年人视频| yy午夜福利| 躁BBB躁BBB躁BBBBBB日| 国产精品9| 成人爽a毛片一区二区免费| 久色悠悠| 黄色无码av| 黄色视频免费网站| 精品无人区无码乱码毛片国产 | 日本A在线播放| 国产欧美综合在线观看| 99精品偷自拍| 丝瓜视频污APP| 91AV在线播放| 亚洲精品福利视频| 九哥草逼网| 国产在线精品观看| 极品av| 91欧美精品成人综合在线观看| 神马午夜激情| 成人无码小电影| 加勒比DVD手机在线播放观看视频 日韩精品一区二区三区四区蜜桃视频 | 国产一区二区三区在线观看免费视频免费视频免费视频 | 欧美一区| 一区二区亚洲| 北条麻妃无码在线播放| 草草在线视频| 精品1区| 成人网站高清无码| 91精品国产成人做爰观看奶头| 国产高清无码免费在线观看| 欧美性一区| 第四色网站| 激情小视频国产在线播放| 超碰人人操| 嫩BBB嫩BBB嫩BBB| 三级小说| 啊啊啊网站| 国产激情视频在线播放| 91精品丝袜久久久久久久久粉嫩| 俺去也在线视频| 91人妻无码精品一区二区三区| 午夜偷拍视频| 蜜桃精品无码| 久久久无码AV| 国产一级A片免费看| 超碰护士| 日本无码区| AV天堂影视在线观看| 日韩中文视频| 69AV在线| 亚洲人妻中文字幕| 射久久| 国产白丝在线| 黄色视频视频| 亚洲天天| 欧美午夜视频| 美女网站在线观看| 久一精品| 无码精品电影| 91精品国产aⅴ一区二区| 久久国际精品| 国产91精品久久久天天| 一卡二卡三卡| 国产内射精品| 美女乱伦视频| 暖暖高清无码| 黄色三级av| 免费国产在线视频| 日韩动态视频| 麻豆国产在线| 亚洲男同Gay一区二区| 国产欧美日韩在线播放| 亚洲婷婷在线视频| 中国精品77777777| 日韩av免费在线| 在线观看小视频| 久久青草免费视频| 亚洲3p| 新超碰97| 欧美做受高潮白| 国产人妻AV| 在线观看免费黄网站| 88色色| 午夜免费小视频| 可以看的毛片| 日韩四区| 高潮喷水视频| 青青草原在线免费| 亚洲人妻影院| 五月婷婷激情五月| 无码人妻A片一区二区青苹果| 国产乱码一区二区三区的区别| 久草性爱| 一区二区无码免费| 亚洲天堂在线观看免费| 欧美一级性爱视频| 国产精品va| 色欲av伊人久久大香线蕉影院| 亚洲色图一区二区三区| 97色在线| 成人免费网站| 亚洲日韩国产AV无码无码精品 | 亚洲成人电影一区| www高清无码| 天天摸天天干| 亚洲一区二区AV| 艳妇乳肉豪妇荡乳AV无码福利| 波多野结衣国产| 亚洲高清无码在线播放| 高H视频在线观看| 亲子乱AⅤ一区二区三区| 亚洲免费视频在线播放| AV电影在线观看| 影音先锋成人在线| 国产av资源| 欧美淫秽视频| 国产精品秘入口18禁网站| 亚洲福利久久| 大香蕉精品一区| 国产AV综合网| 亚洲无码在线精品| 欧美日韩第一区| 色福利视频| A片网站在线观看| 亚洲日韩免费视频| 日本一区免费| 91色在线观看| 影音先锋二区| 国产精品v| 女生被操网站| 婷婷久久综合| 另类老妇性BBBWBBW| 成人国产精品在线观看| 广西少妇BBwBBwBBw| 亚洲福利网| 久热人妻| 欧美在线中文| 香蕉AV777XXX色综合一区| 乖我硬了让老子cao你小视频| 美女自慰网站在线观看| 九九这里有精品| 国产黄色自拍视频| 无码乱伦| 国产A级成人婬片1976| 无码任你操| 成人黃色A片免费看| 亚洲在线观看中文字幕| 91成人视频在线免费观看| 国产成人免费做爰视频| 国产一级a毛一级a做免费图片 | 亚洲欧洲久久电影| 无码一区二区av| 91综合在线观看| 亚州视频在线观看| 国产精品无码中文在线| 西西人体大胆裸体A片| 久久久久亚洲AV成人网人人软件| 五月丁香中文字幕| 欧美成人精品一区二区| 亚洲天堂天天| 欧美成人福利视频| 亚洲乱伦av| 成人在线综合| 91狠狠综| 四虎成人视频| 农村A片婬片AAA毛片| 中文视频免费播放| WW免费视频| 性爱视频99| 182av| 精品成人一区二区三区| 黄页网站免费在线观看| 婷婷涩嫩草鲁丝久久午夜精品| 人妻性爱| 日韩欧美a片| 精品无码一区二区三区在线| 天天看A片| 四虎精品一区二区| 成人午夜免费视频| 欧美性交一区二区| 精品女同一区二区三区四区外站在线| 91在线无码精品秘入口电车| 色视频在线播放| 无码操B| 天天av天天av天天爽| 亚洲精品成人| 按摩性高湖婬AAA片A片中国| 午夜在线无码| 韩日一区二区三区| 国产午夜无码视频在线观看| 久久66| 日本人人操人人摸| 亚洲日韩AV电影| 自拍偷拍激情视频| 国产乱伦对白| 日韩成人在线播放| 国产三级片网站| 秋霞网一区二区| 97成人在线视频| 国产免费高清| AV在线直播| 北条麻妃视频| 黄色视频高潮| 亚洲青青| 免费成人大片| 亚洲性爱在线观看| 无毛无码| 久9久9久9久9久9久9| 超碰人妻97| 久久久成人免费电影| 91人人妻| 国产不卡精品| 草逼123| 超碰福利在线| 亚洲天堂2017| 色人阁人妻中文字幕| 国产女人水真多18毛片18精品 | 91网站在线观看视频| 青草国产视频| 婷婷五月天激情小说| 奶头和荫蒂添的好舒服囗交漫画| 91一级A片在线观看| 日中文字幕| 国产亚洲激情| 大香蕉视频在线观看| 蜜桃av久久久亚洲精品| 大香蕉综合在线观看| 尤物视频官网| 亚洲激情网站| 一级片黑人| 五月天天| 深夜福利18| 91麻豆成人| 性爱视频亚洲| 九九五月天| 大香蕉精品在线视频| 男人先锋| 微拍福利一区二区| 最新免费一区二区三区| 欧美午夜精品成人片在线播放| 精品91| 操b在线免费观看| 黄色视频日本免费| 亚洲无码成人在线观看| 五月丁香婷婷综合| 亚洲成人电影AV| 亚洲无码AV在线观看| 牛牛影视av| 久久久成人电影| 色综合社区| 四虎AV在线| 日韩国产av| 蜜桃网一区二区| 怡春院在线视频| 国产福利一区二区| 色男人天堂| 国产精品男女| 日韩亚洲天堂| 黃色一级A片一級片| 在线观看国产欧美| 蜜桃视频com.www| 精品人妻午夜一区二区三区四区| 九九九九精品| 人人操天天干| 人人干97| 内射免费看| 麻豆精品一区二区三区| 亚洲码成人| 亚洲精品在线观看视频| a片在线电影网| 久草视频在线免费看| 欧美黄色毛片| 国产口爆| 一区二区三区四区无码在线 | 国产欧美在线免费观看| AV怡红院| 无码精品人妻一区二区三刘亦菲| 亚洲男女av| 日韩欧美精品在线| 91成人免费电影| 秋霞无码一区二区三区| 久色99| 成人三级片在线| 五月天婷婷操逼视频| 国产亚洲99久久精品熟女| 色天天综合网| 亚洲精品乱码久久久久久按摩观| 久久久久亚洲AV无码专区| 亚洲综合在线网| 中文人妻| 伊人伊人网| 无码人妻精品一区二区三区99仓| 色aV牛牛在线观看| 国产秘精品区二区三区日本| AV在线资源网| 自慰喷水流白浆中文字幕| 影音先锋91久久网| 欧美黄色三级片| 波多野吉衣视频| 国产精品国产精品国产专区不52| 3344gc在线观看入口| 久久手机电影| 欧美女人日逼视频| 欧美黄色片在线观看| 精品国产乱码久久久久夜深人妻| 天堂在线观看av| 伊人东京热| 亚洲AV秘无码一区在线| 亚洲网站免费| 国产精品无码一区二区三区免费| 2017天天干天天射| 亚洲小黄片| 土耳其电影《爱与罚》| 亚洲日逼网| www.污| 98无码人妻精品一区二区三区 | 熟妇人妻久久中文字幕| 91精品无码一区二区| 91人妻无码精品一区二区毛片|