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

快手二面:你有沒有調用過第三方接口?碰到過哪些坑?

開發 前端
在執行第三方接口調用任務時,如果遇到程序響應遲滯直至超時,或者直接拋出諸如Connection refused、Host is unreachable、SocketTimeoutException之類的網絡異常情況,這明確指示了無法成功建立起與目標服務器的通信連接。

在我們的業務開發中,調用第三方接口已經成為常態,比如對接一些ERP系統、WMS系統、一些數據服務系統等,它極大地擴展了我們應用的功能和服務范圍。然而,實際對接過程中,我們往往會在這一環節遇到各種意想不到的問題,本文將深入探討幾種常見的第三方接口調用難題及其應對策略。

調用第三方系統接口遇到的大坑.png調用第三方系統接口遇到的大坑.png

接口訪問不到

在執行第三方接口調用任務時,如果遇到程序響應遲滯直至超時,或者直接拋出諸如Connection refused、Host is unreachable、SocketTimeoutException之類的網絡異常情況,這明確指示了無法成功建立起與目標服務器的通信連接。產生此問題的根源可能源自于多種因素,其中包括但不限于網絡狀況不佳、服務器尚未啟動、域名解析錯誤或接口地址有誤等。

為應對這類問題,首要步驟是自查本地網絡環境是否正常。一旦確定自身網絡并無故障,可行的操作之一是運用ping命令對目標域名進行探測,以驗證域名能否被正確解析并得到響應。若域名無法解析,則可能表明對方服務器DNS配置存在問題;即使域名可以解析,但如果ping測試結果顯示響應異?;虺瑫r,說明目標服務端存在潛在故障。在這種情況下,及時與對方的技術團隊取得聯系,共享診斷信息,共同協作進行問題排查是一種有效的解決策略。

接口突然沒有返回數據/數據異常

原本正常的接口突然開始返回空數據,或者是返回的數據結構與預期不符,比如缺少必要的字段、數據格式錯誤、數據內容無效等,導致客戶端無法正常解析和使用。

面對這類接口突然無響應或無法返回數據的問題,首先,我們需要從源頭著手,全面核查請求參數和認證憑證的有效性。這包括仔細審查發送至接口的請求數據是否完整準確,以及確保使用的Token、Key等身份認證信息處于有效狀態。同時,必須密切關注接口供應商是否有未提前公告的變更,如API版本升級、接口廢棄等情況。

在代碼實現層面上,為了能快速響應這類異常,我們應當對關鍵數據字段設置嚴格的監控與預警機制。例如,可以植入手動埋點并通過企業通訊工具(如釘釘消息、電子郵件提醒)實現即時告警。一旦監測到核心數據未能如期返回,系統應能立即發出警報,使開發人員能夠在第一時間獲知并處理此類問題,以防止其對整體業務流程造成干擾或經濟損失。

以一個實際應用場景為例,當我們在上游系統中使用訂單號向下游WMS系統查詢出入庫訂單詳情時,若發現特定訂單號未能返回預期的訂單信息,那么通過預先設定的監控和告警系統,我們將在第一時間接收到警告信息。在此基礎上,應迅速與第三方系統的技術支持團隊取得聯系,查明原因并解決問題。同時,對于這類無法匹配的數據,應在業務流程中設立防護機制,及時攔截處理,以免對核心業務造成負面影響。

接口超時/異常,不穩定

由于網絡抖動,或者第三方系統不穩定,部署,服務器負載不均、并發訪問量過大等等問題,可能會導致調用接口時花費的時間超出預期設定的超時時間,從而引發TimeoutException;或者接收到HTTP狀態碼表明出現異常,如500 Internal Server Error、404 Not Found等。這種坑使我們平常最容易遇見的也是最頭疼的所在,因此需要我們給予足夠的重視。

對于這類異常,首先我們在調用接口時設置合理的超時時間,我們以使用Retrofit2調用http接口為例,設置其請求超時時間以及讀取超時時間:

import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import java.util.concurrent.TimeUnit;

// 創建 OkHttpClient 實例并設置超時時間
OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .connectTimeout(30, TimeUnit.SECONDS) // 連接超時時間為30秒
    .readTimeout(30, TimeUnit.SECONDS)      // 讀取超時也為30秒
    .build();

// 創建 Retrofit 實例,使用自定義的 OkHttpClient
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://your-api-url.com/")
    .client(okHttpClient) // 使用上面設置超時時間的 OkHttpClient
    .addConverterFactory(GsonConverterFactory.create()) // 使用Gson轉換器
    .build();

// 創建你的API接口實例
YourApiInterface apiService = retrofit.create(YourApiInterface.class);

有關Retrofit2的說明以及使用介紹,請參考:求求你別再用OkHttp調用API接口了,快來試試這款HTTP客戶端庫吧

同時,這對此類異常,我們還用做好接口重試機制。我們可以從以下幾種方案中考慮重試:

固定間隔重試

設置一個固定的等待時間間隔,在每次失敗后等待該間隔再進行下一次嘗試。比如我們可以使用定時任務框架如Quartz、Spring Task Scheduler、ElasticJob、xxl-job來定期執行重試任務。

這種方案實現簡單,但是可能不適用于所有場景,特別是當失敗是由于瞬時問題(如網絡抖動)時,固定間隔可能過長或過短。

關于SringBoot自帶的定時任務的使用講解,請參考:玩轉SpringBoot:SpringBoot的幾種_定時任務_實現方式

指數退避重試

每次失敗后,等待時間間隔按指數級增長(例如,第一次失敗等待1秒,第二次等待2秒,第三次等待4秒,以此類推)。比如我們可以使用Spring Retry,Guava的Retryer,Resilience4j等去實現指數退避重試。

我們以Spring Retry為例:

import org.springframework.retry.annotation.Backoff;  
import org.springframework.retry.annotation.Retryable;  
import org.springframework.stereotype.Service;  
  
@Service  
public class MyService {  
  
    @Retryable(value = {MyCustomException.class}, maxAttempts = 3, backoff = @Backoff(delay = 1000))  
    public void myMethod() {  
        // 這里是可能會失敗的操作  
        // 如果拋出 MyCustomException 異常,方法會被重試,最多重試3次  
        // 每次重試之間會有1秒的延遲(使用指數退避策略的話,延遲會逐漸增加)  
          
        // 假設某些條件下會拋出異常  
        if (someCondition()) {  
            throw new MyCustomException("Operation failed");  
        }  
          
        // 如果操作成功,則正常返回  
    }  

    @Recover  
    public void recoverMyMethod(MyCustomException e) {  
        // 當 myMethod 的重試次數耗盡后,會調用這個方法  
        // 你可以在這里記錄日志、發送通知或執行其他恢復操作  
        System.err.println("Operation failed after retries. Cause: " + e.getMessage());  
    } 
     
}

這種方案能夠自適應地調整重試間隔,減少連續失敗的可能性。但是缺點也很明顯,在長時間運行的系統中,如果問題持續存在,重試間隔可能會變得非常長,可能一不小心,會一直執行下去。

接口變更,版本迭代兼容性

第三方系統對API進行版本升級或服務調整屬于常見現象,這種情況下,原有的接口可能面臨無法繼續使用的問題,或者返回的數據結構、格式可能發生變動,部分接口隨著版本升級可能存在不向下兼容的情況,調用舊版接口在新版環境下可能失效。針對此類狀況,最佳實踐是始終保持對服務提供商通告的關注,一旦得知有關更新信息,應迅速作出響應,及時調整并更新調用接口的方式。在代碼層面,有必要預先設計并實現一套接口版本管理和兼容性處理機制,以確保無論接口如何演變,系統都能夠平滑地適應和處理。

接口變更時,采用接口參數動態化是一種有效的應對策略,其核心理念是讓客戶端調用接口時具備更強的靈活性和適應性,特別是在接口新增、刪除或修改參數的情況下,比如采取Map,JSON接受參數(當然不是很推薦。。。。)。

并且,對接口進行嚴密的異常監測同樣至關重要,通過實時監控接口調用的異常狀況,能夠在問題發生的第一時間發現并上報。及時與第三方系統的技術支持團隊溝通協調,并采取相應的補救措施,能夠最大限度地減少接口變動對業務連續性的影響,確保系統穩定高效運行。

API限制

在一定時間段內頻繁調用接口,然后突然所有請求都開始失敗,返回的錯誤提示可能是調用頻率過高、超出配額等。這是由于大多數第三方API為了防止濫用,會對調用次數、頻次或流量進行限制。我們應密切關注接口文檔中的調用限制說明,并在代碼中采取限流措施,如設置合適的請求間隔、使用令牌桶算法或漏桶算法控制請求速度。當然也要做好接口監控告警策略。

針對此類問題,我們可以采取以下一些技術方案實現:

設置請求間隔(固定延遲)

在每次請求后,添加固定的延遲時間,比如每次請求后等待1秒(Thread.sleep(1000)),這種方式實現簡單,但可能不夠靈活,特別是當API的調用限制在不同時間段內變化時。

令牌桶算法(Token Bucket)

令牌桶算法是一種計算機網絡流量整形和速率限制算法。它允許突發流量,但長期平均輸出流量不會超過設定的速率。適用于允許短時間內的高流量,但長期需要控制平均流量的場景。我們可以使用Google的Guava庫中的RateLimiter來實現令牌桶算法。

import com.google.common.util.concurrent.RateLimiter;  
  
@Service  
public class ApiService {  
  
    private final RateLimiter rateLimiter = RateLimiter.create(1.0); // 每秒生成一個令牌  
  
    @Autowired  
    private RestTemplate restTemplate;  
  
    public String callApi() {  
        if (!rateLimiter.tryAcquire()) { // 嘗試獲取令牌,如果沒有則返回false  
            throw new RuntimeException("Rate limit exceeded");  
        }  
        return restTemplate.getForObject("http://example.com/api", String.class);  
    }  
}

漏桶算法(Leaky Bucket)

漏桶算法是另一種流量整形和速率限制算法。它將流量視為水倒入一個固定容量的桶中,如果桶滿了,水就會溢出(即請求被拒絕)。桶底有一個漏洞,水以一定的速度從桶中漏出,從而控制平均流量。適用于需要嚴格控制流量,不允許突發流量的場景。漏桶算法通常需要自己實現,但也可以使用現有的庫,比如Bucket4j。

import io.github.bucket4j.Bandwidth;  
import io.github.bucket4j.Bucket;  
import io.github.bucket4j.Refill;  
  
@Service  
public class ApiService {  
  
    private final Bucket bucket = Bucket.builder()  
            .addLimit(Bandwidth.classic(10, Refill.greedy(10, TimeUnit.SECONDS))) // 每10秒添加10個令牌  
            .build();  
  
    @Autowired  
    private RestTemplate restTemplate;  
  
    public String callApi() {  
        try {  
            bucket.asScheduler().consume(1); // 消耗一個令牌  
        } catch (InterruptedException | InsufficientTokensException e) {  
            throw new RuntimeException("Rate limit exceeded", e);  
        }  
        return restTemplate.getForObject("http://example.com/api", String.class);  
    }  
}

滑動窗口算法:

滑動窗口算法用于跟蹤在特定時間窗口內的請求數量。當窗口內的請求數達到限制時,新的請求將被拒絕或延遲。窗口可以隨著時間的推移而滑動,以適應不同的時間間隔。

import java.util.LinkedList;  
import java.util.Queue;  
import java.util.concurrent.TimeUnit;  
  
@Service  
public class ApiService {  
  
    private final long windowSizeInMilliseconds;  
    private final int maxRequestsPerWindow;  
    private final Queue<Long> window = new LinkedList<>();  
  
    public ApiService(long windowSizeInMilliseconds, int maxRequestsPerWindow) {  
        this.windowSizeInMilliseconds = windowSizeInMilliseconds;  
        this.maxRequestsPerWindow = maxRequestsPerWindow;  
    }  
  
    public synchronized boolean tryAcquire() {  
        long currentTime = System.currentTimeMillis();  
        // 移除窗口外的時間戳  
        while (!window.isEmpty() && currentTime - window.peek() > windowSizeInMilliseconds) {  
            window.poll();  
        }  
        // 如果窗口內的請求數已達到上限,則不允許新的請求  
        if (window.size() >= maxRequestsPerWindow) {  
            return false;  
        }  
        // 在窗口內添加當前請求的時間戳  
        window.offer(currentTime);  
        return true;  
    }   
}

分布式限流

如果應用部署在多個實例或節點上,需要實現分布式限流以確保全局的調用頻率不超過限制。可以使用Redis等分布式緩存系統來共享令牌或記錄請求計數。

錯誤碼定義混亂,字段結構不一致

我們常常會遇到接口文檔與實際錯誤碼定義、字段結構不一致的問題,例如文檔中標明錯誤碼400代表參數錯誤,但實際上可能收到的是404錯誤響應;又或者返回的數據結構與文檔描述不相吻合,這使得我們難以精準識別并恰當處理結果。針對此類問題,應當采取以下策略:

首先,構建自定義錯誤處理機制,創建專門的錯誤處理類,對所有可能出現的錯誤碼進行統一且明確的處理。這樣,無論接口返回何種錯誤碼,都能確保有一套標準的邏輯進行響應和記錄。

其次,針對那些與文檔描述不符或者含義模糊不清的錯誤碼和字段,應及時與第三方系統的技術團隊展開溝通交流,明確其真實含義和用途。這樣的互動有助于確保接口對接的精確性,避免因對錯誤碼或字段理解不準確而引發的系統內部錯誤。

對于接口文檔與實際不符的情況,一方面要通過定制化的錯誤處理機制增強系統的容錯性與一致性,另一方面要強化與第三方系統的溝通協作,確保對接接口的清晰性和準確性,從而有效避免潛在問題對自身系統產生的不良影響。

返回的數據格式不統一

對于同一個系統,接口返回的數據格式在不同場景下可能有所差異,例如有的時候返回JSON對象,有的時候卻是字符串或其他格式,例如xml等。

針對這類問題,我們需要編寫包容性較強的解析邏輯,確保在任何情況下都能準確解構并處理返回數據。創建多個數據模型類對應不同格式的數據,根據接口返回的內容決定使用哪個模型類進行反序列化。針對不同的數據格式編寫適配器,確保數據能統一轉換為應用程序可處理的格式。

作為接口服務提供者,我們應當怎么做?

作為第三方系統接口的開發者,在設計和開發對外接口時,應當遵循一系列最佳實踐,以避免給調用方帶來上述提及的問題,我們應當注意以下幾個方面:

1. 詳盡清晰的接口文檔:

? 完整撰寫并持續更新接口文檔,包括接口路徑、請求方法、請求參數、響應格式、錯誤碼含義、版本變更記錄等。

? 錯誤碼定義應規范有序,避免混淆,確保每個錯誤碼都有明確的解釋和處理建議。

? 字段定義應清晰明確,注明必填項、可選項、數據類型和字段意義,避免字段命名混亂或含義不明。

2. 版本控制與兼容性:

? 設計接口版本管理機制,當接口有重大變更時推出新版本,并確保老版本接口在一定期限內仍可訪問,以便調用方平穩過渡。

? 發布新版本前,主動告知調用方接口變更內容和遷移計劃,給予充足的準備時間。

3. 穩定性與性能:

? 高效穩定的服務器架構,設置合理的超時和限流策略,避免接口超時、無響應或數據異常。

? 保證服務的高可用性,采用負載均衡、集群部署等方式確保接口穩定運行。

4. 錯誤處理與反饋:

? 在接口設計時,對各種可能的錯誤場景都要有明確的錯誤碼和錯誤消息返回,幫助調用方快速定位問題。

? 提供健全的異常處理機制,確保在接口內部出現問題時,也能返回有意義的錯誤信息。

5. 接口測試與驗證:

? 提供詳盡的接口測試案例,確保接口的實際行為與文檔描述一致。

? 對于重大變更,可以提供沙箱環境或預發布環境,讓調用方提前進行聯調和驗證。

6. 變更通知與溝通:

? 在接口有任何變更(包括功能調整、參數修改、下線等)時,通過郵件、公告、API文檔更新等方式提前通知調用方。

? 開放技術支持渠道,及時解答調用方在對接接口過程中遇到的問題,提供必要的協助和支持。

作為第三方系統接口的開發者,可以最大程度地保證接口質量,降低調用方對接難度,同時也提升了自身服務的用戶體驗和市場競爭力。不然,別人在對接時,真的會在心里時不時的來一句”MMP“。。。

責任編輯:武曉燕 來源: 碼農Academy
相關推薦

2023-04-16 19:34:01

2015-11-05 16:44:37

第三方登陸android源碼

2013-08-12 16:04:19

第三方移動應用

2023-09-14 10:55:16

2019-07-30 11:35:54

AndroidRetrofit

2014-07-23 08:55:42

iOSFMDB

2011-06-07 14:36:24

iOS5WWDC

2019-09-03 18:31:19

第三方支付電商支付行業

2017-12-11 15:53:56

2016-10-21 14:09:10

2009-12-31 14:38:34

Silverlight

2014-07-22 10:56:45

Android Stu第三方類庫

2010-05-25 11:09:31

SVN工具

2017-05-16 13:24:02

LinuxCentOS第三方倉庫

2024-04-03 12:57:29

2009-01-14 12:45:05

MSNIM蘋果

2021-12-06 09:44:30

鴻蒙HarmonyOS應用

2021-09-26 10:43:08

注冊Istio集成

2022-01-14 09:57:14

鴻蒙HarmonyOS應用

2021-03-03 09:42:26

鴻蒙HarmonyOS圖片裁剪
點贊
收藏

51CTO技術棧公眾號

免费看的黄色欧美网站| 欧美大片网站| 久久免费电影网| 日韩美女在线观看| 日韩欧美123区| 国产区精品视频在线观看豆花| 欧美视频在线看| 天天综合中文字幕| 无码精品在线观看| 久久精品国产精品青草| 97精品国产97久久久久久| 国产精品天天干| 中文字幕一区日韩精品| 色网综合在线观看| 2019日韩中文字幕mv| 国产福利电影在线| 国产成人午夜电影网| 国产精品成人av在线| 日本少妇吞精囗交| 国产高清一区二区| 亚洲欧洲偷拍精品| 亚洲美女精品视频| 国产成人免费| 精品露脸国产偷人在视频| 中文字幕一区二区三区有限公司| 男女网站在线观看| 高清不卡在线观看| 成人免费网站在线| 91久久国产综合久久91| 亚洲私人影院| 久久综合伊人77777尤物| 舐め犯し波多野结衣在线观看| 日韩高清一区| 91精品啪在线观看国产60岁| 国产v亚洲v天堂无码久久久| 一二三四视频在线中文| 亚洲一区二区三区免费视频| 色呦呦网站入口| av在线二区| 国产日韩v精品一区二区| 久久久99爱| 污视频在线免费观看| 成人小视频在线| 91视频在线免费观看| 97在线视频人妻无码| 青青草国产成人av片免费| 日本一本a高清免费不卡| 免费观看一区二区三区毛片| 亚洲午夜极品| 久久久久中文字幕2018| 国产午夜福利片| 国内精品久久久久久久影视麻豆| 欧美日本中文字幕| 黄色一级片中国| 国内精品美女在线观看| 欧美激情精品久久久久久免费印度| 欧美国产日韩综合| 欧美日韩一视频区二区| 欧美黑人狂野猛交老妇| 久久久精品视频免费| 亚洲高清自拍| 97国产真实伦对白精彩视频8| 久久夜色精品亚洲| 久久激情综合| 国产精品永久在线| 91禁在线观看| 国产成人av影院| 精品欧美一区二区在线观看视频| 欧美zozo| 国产精品国产自产拍在线| 一区二区三区精品国产| 中文字幕免费高清电视剧网站在线观看 | 九色丨蝌蚪丨成人| 日韩精品视频在线免费观看| 国产吞精囗交久久久| 禁断一区二区三区在线| 最新国产精品拍自在线播放 | 九色在线观看视频| 中文字幕av资源一区| 熟妇熟女乱妇乱女网站| 丰满的护士2在线观看高清| 午夜视频在线观看一区| 国产xxxxx视频| 4438五月综合| 亚洲精品www久久久久久广东| 受虐m奴xxx在线观看| 日韩av密桃| 欧美激情在线狂野欧美精品| 天堂中文字幕在线观看| 美女性感视频久久| 国产女主播一区二区| 国产三级在线观看| 亚洲精品乱码久久久久久久久 | 播放一区二区| 日韩一二三区不卡| 熟妇高潮精品一区二区三区| 日韩成人a**站| 久久久女女女女999久久| 波多野结衣高清视频| 国产在线精品视频| 欧美日韩在线一二三| 黄色片免费在线观看| 欧美性少妇18aaaa视频| 手机在线国产视频| 香蕉国产成人午夜av影院| 久久九九国产精品怡红院 | 欧美日韩久久不卡| 奇米777第四色| 99久久婷婷这里只有精品| 国内精品久久久久伊人av| 在线中文字幕网站| 26uuu欧美| 2019日韩中文字幕mv| 精品176极品一区| 日韩精品中文字幕视频在线| 欧美国产日韩在线观看成人| 日韩电影在线看| 精品国产乱码久久久久久88av | 男生操女生视频在线观看| 国内精品免费| 欧美老少配视频| 一级淫片免费看| 久久久久久久久久美女| 国产亚洲黄色片| 欧美电影在线观看一区| 丝袜情趣国产精品| 国产精品熟女视频| k8久久久一区二区三区| av片在线免费| 精品视频在线观看免费观看| 中文字幕亚洲专区| 国产精品久久久久久人| 成人av在线播放网址| 91九色国产ts另类人妖| 欧美韩国日本| 亚洲天堂第一页| 久久99精品波多结衣一区| 国产99久久久精品| 午夜啪啪福利视频| www.久久久久爱免| 精品久久久91| 中文字幕在线播放日韩| 国产精品你懂的在线| 狠狠热免费视频| 国产精品一区二区av日韩在线| 欧美亚洲在线视频| 亚洲欧美自偷自拍| 动漫精品一区二区| 男女黄床上色视频| 麻豆久久婷婷| 性欧美大战久久久久久久免费观看| 成人国产二区| 亚洲日本aⅴ片在线观看香蕉| 波多野结衣高清在线| 日本一区二区三区dvd视频在线| 九九热在线免费| 久久国产精品亚洲人一区二区三区| 国产美女扒开尿口久久久| 日本福利专区在线观看| 欧美三区在线视频| 成人高潮免费视频| 国产盗摄视频一区二区三区| 色欲色香天天天综合网www| 国产成人福利av| 欧美中文在线视频| 成人三级黄色免费网站| 欧美吞精做爰啪啪高潮| 九九这里只有精品视频| 国产成人在线观看免费网站| 午夜免费福利小电影| 国产麻豆一区二区三区精品视频| 国产成人精品在线观看| 精品麻豆一区二区三区| 日韩欧美第一区| www亚洲视频| 国产精品色眯眯| 色综合久久久无码中文字幕波多 | 国产一级片黄色| 天天综合网91| 国产精品三区四区| 高清电影一区| 久精品免费视频| 四虎影视精品成人| 欧美日韩国产精品自在自线| 免费在线观看av网址| 久久久五月婷婷| 亚洲乱码国产一区三区| 欧美黄在线观看| 欧美一区视久久| 精品国模一区二区三区欧美| 26uuu另类亚洲欧美日本一| 福利视频在线播放| 精品国产乱码久久久久久老虎| 国产高清中文字幕| 一区二区三区精品视频| 日韩一区二区a片免费观看| 国产精品69久久久久水密桃| 成人黄色片视频| 欧美二区视频| 亚洲综合第一| 日韩成人av在线资源| 亚洲一区国产精品| 成人看片网页| 欧美精品久久久久a| 亚洲1卡2卡3卡4卡乱码精品| 亚洲黄色有码视频| a视频免费在线观看| 一本一道综合狠狠老| 欧美黑人一级片| 国产精品久久三| 国产免费看av| av在线这里只有精品| 亚洲一区二区三区四区精品| 久久久一二三| 免费av观看网址| 欧美精品成人| 91制片厂免费观看| 精品久久国产| 久久国产精品免费一区| 欧美三级一区| 91久久精品国产91久久| 怡红院成人在线| 欧美在线视频导航| 成人一级福利| 欧美激情小视频| 26uuu亚洲电影在线观看| 中文综合在线观看| 户外极限露出调教在线视频| 亚洲国产成人在线播放| 亚洲精品18p| 欧美一区二区精品| 99精品视频免费看| 欧美高清你懂得| 一起草av在线| 欧美日韩黄色一区二区| 中日韩av在线| 欧美日韩中字一区| 一级aaaa毛片| 欧美精品乱码久久久久久按摩| 自拍偷拍第八页| 欧美午夜宅男影院| 中文字幕 视频一区| 精品1区2区3区| 亚洲图片在线播放| 欧美日韩久久久久久| 国产精品久久影视| 在线电影一区二区三区| 国产免费不卡视频| 欧美一区二区三区播放老司机| 国产乱人乱偷精品视频a人人澡| 欧美日本视频在线| av无码精品一区二区三区宅噜噜| 91麻豆精品91久久久久同性| 国产特级黄色片| 日韩美女一区二区三区四区| 粉嫩av一区二区夜夜嗨| 亚洲第一视频网| 西西人体44www大胆无码| 亚洲精品视频免费在线观看| 免费国产在线视频| 一区二区亚洲欧洲国产日韩| 香蕉视频网站在线观看| 欧美成人剧情片在线观看| 香蕉成人app免费看片| 韩剧1988免费观看全集| 在线一区av| 成人黄色大片在线免费观看| 日本在线视频一区二区三区| 久久国产精品一区二区三区四区| 国产一区二区亚洲| 欧美日韩视频免费在线观看| 激情另类综合| 国产福利影院在线观看| 黄网站免费久久| 亚洲欧美高清在线| 久久久久久久久久美女| 操她视频在线观看| 一区二区激情小说| 久草视频一区二区| 91精品国产综合久久久久久漫画| 国模人体一区二区| 在线丨暗呦小u女国产精品| 麻豆视频在线| 欧美亚州一区二区三区| 永久免费观看精品视频| 国产自产精品| 三上亚洲一区二区| 国产精品无码av在线播放| 蜜臀av国产精品久久久久| 黄色国产在线视频| 国产欧美日韩在线观看| 成人免费看片98| 欧美最新大片在线看| 亚洲成人一级片| 一区二区三区黄色| 国产在线xxx| 成人久久一区二区三区| 天天躁日日躁狠狠躁欧美| 中文字幕一区二区三区最新| 99精品福利视频| 国产精品熟女一区二区不卡| 2021中文字幕一区亚洲| 欧美三级免费看| 欧美日韩精品高清| 欧洲亚洲精品视频| 九九九久久久久久| 国精品产品一区| 免费日韩av电影| 国产在线欧美| 中文字幕国产高清| 国产日韩精品一区| 国产区一区二区三| 亚洲丁香久久久| 精灵使的剑舞无删减版在线观看| 国产精品欧美亚洲777777| 欧美午夜18电影| 日韩免费在线观看av| 国产一区二区三区久久悠悠色av| 韩国女同性做爰三级| 福利精品视频在线| 欧美特级特黄aaaaaa在线看| 欧美成人激情在线| 国产极品一区| 五月天综合网| 久久高清免费观看| 精品黑人一区二区三区观看时间| 一区二区三区**美女毛片| 国产精品欧美激情在线| 日韩在线免费视频| 91tv亚洲精品香蕉国产一区| 欧美裸体网站| 久久久久在线| 特大黑人巨人吊xxxx| 欧美日韩在线一区| 人人妻人人玩人人澡人人爽| 欧美国产视频一区二区| 亚洲3区在线| 欧美在线观看视频免费| 国产不卡免费视频| 欧美精品一区二区成人| 欧美一区二区三级| 日本高清在线观看| av电影成人| 亚洲日产国产精品| 538国产视频| 欧美日韩亚洲一区二区| 婷婷在线免费视频| 热久久免费视频精品| 综合干狼人综合首页| 中文字幕欧美人妻精品一区| 国产日本欧洲亚洲| 在线观看视频中文字幕| 日韩亚洲第一页| 欧美一区一区| www.av毛片| 337p粉嫩大胆色噜噜噜噜亚洲| 午夜婷婷在线观看| 国产一区二区三区直播精品电影| 日韩在线观看不卡| 性做爰过程免费播放| 国产精品香蕉一区二区三区| 久久精品视频9| 亚洲美女av在线| jizz亚洲女人高潮大叫| 三年中文高清在线观看第6集 | 3d动漫啪啪精品一区二区免费 | 欧美疯狂做受xxxx高潮| 国内精品麻豆美女在线播放视频 | 国产精品资源网站| 在线看成人av| 亚洲人av在线影院| 久久电影天堂| 青春草国产视频| 久久精品人人做| 国产精品九九九九| 97色在线观看| 日本一区二区高清不卡| wwwxxxx在线观看| 色综合咪咪久久| 日本不卡视频| 精品国产免费人成电影在线观... 精品国产免费久久久久久尖叫 | 亚洲欧洲日韩国产| 国产一区二区三区免费观看在线| 免费在线看黄色片| 久久久精品国产免大香伊| 国产精品国产一区二区三区四区| 性欧美办公室18xxxxhd| 精品一区二区三区在线| 精品人妻一区二区乱码| 色先锋久久av资源部| 四虎影院观看视频在线观看| 秋霞在线观看一区二区三区| 国产河南妇女毛片精品久久久 | 波多野结衣久久久久| 亚洲精品国产品国语在线| 四虎国产精品永久在线国在线| 久久久久久久中文| 亚洲人成在线观看一区二区| 天堂中文在线资| 99国产在线|