亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

SMP語(yǔ)言接口與API實(shí)戰(zhàn):從定義到調(diào)用,避開(kāi)鑒權(quán)與冪等那些坑

SMP語(yǔ)言接口與API實(shí)戰(zhàn):從定義到調(diào)用,避開(kāi)鑒權(quán)與冪等那些坑 直接說(shuō)個(gè)我自己的經(jīng)歷。前陣子用SMP軟件制作平臺(tái)做一個(gè)小工具需要把第三方天氣數(shù)據(jù)接進(jìn)來(lái)當(dāng)時(shí)心想不就是發(fā)個(gè)HTTP請(qǐng)求解析一下JSON嘛能有多難。結(jié)果花了大半個(gè)晚上在排查一個(gè)401鑒權(quán)錯(cuò)誤最后發(fā)現(xiàn)不是密鑰不對(duì)而是我在SMP里把接口參數(shù)名拼錯(cuò)了——服務(wù)端要求的字段叫city_code我寫(xiě)成了cityCode。那一刻我才意識(shí)到接口這東西定義階段省一分鐘調(diào)用階段要還一小時(shí)。這一講是接口API屬于SMP語(yǔ)言基礎(chǔ)知識(shí)系列里偏工程化的一節(jié)知識(shí)門檻不高但涉及的習(xí)慣和細(xì)節(jié)特別多。我會(huì)從SMP語(yǔ)言內(nèi)部怎么定義接口講起再聊到SMP程序怎么調(diào)用真實(shí)的HTTP API最后把冪等性、錯(cuò)誤碼、鑒權(quán)這些容易踩坑的點(diǎn)單獨(dú)拎出來(lái)說(shuō)透。不管你是剛開(kāi)始學(xué)SMP還是已經(jīng)在用別的語(yǔ)言寫(xiě)后臺(tái)、寫(xiě)自動(dòng)化腳本這講的內(nèi)容應(yīng)該都能幫得上。1. SMP里的接口到底指的是什么——先把這個(gè)概念錨定住先說(shuō)一個(gè)很多初學(xué)者會(huì)懵的地方在C語(yǔ)言或者單片機(jī)的語(yǔ)境里說(shuō)到接口大家往往想到的是GPIO、UART、SPI這類物理引腳或者頭文件里聲明的函數(shù)接口。但在SMP語(yǔ)言里接口不是一個(gè)物理概念也不是簡(jiǎn)單的函數(shù)聲明它是一組約定用來(lái)約束兩個(gè)軟件模塊之間怎么通信、傳什么數(shù)據(jù)、按什么順序執(zhí)行。1.1 從生活里的插座說(shuō)起我上課講接口的時(shí)候喜歡用插座來(lái)類比。墻上那個(gè)插座就是接口定義它規(guī)定了電壓是220V、頻率50Hz、插孔形狀是兩腳還是三腳。任何電器只要按照這個(gè)規(guī)范去做插頭插上去就能用不需要關(guān)心墻里面是哪個(gè)發(fā)電廠供的電。SMP里的接口也是這個(gè)意思。你在A模塊里定義了一個(gè)接口相當(dāng)于立了一個(gè)標(biāo)準(zhǔn)B模塊只要遵守這個(gè)標(biāo)準(zhǔn)去調(diào)用就能拿到服務(wù)不需要知道A模塊內(nèi)部是怎么實(shí)現(xiàn)的——是查了數(shù)據(jù)庫(kù)還是調(diào)了別的服務(wù)對(duì)B來(lái)說(shuō)都是黑盒。1.2 SMP接口的三個(gè)組成要素在SMP語(yǔ)言里一個(gè)完整的接口定義通常包含三個(gè)要素接口名全局唯一的標(biāo)識(shí)類似部門的門牌號(hào)。命名上我建議一律使用小駝峰加領(lǐng)域前綴比如userService_getInfo、orderService_create這樣在工程大了以后按前綴就能快速定位歸屬模塊。入?yún)⒁?guī)則規(guī)定調(diào)用方必須傳哪些字段、每個(gè)字段的類型和取值范圍。比如查詢用戶信息入?yún)⒗镏辽僖幸粋€(gè)userId類型為字符串或整數(shù)不允許為空。返回值規(guī)則規(guī)定成功時(shí)返回什么結(jié)構(gòu)、失敗時(shí)返回什么錯(cuò)誤碼。這一步最容易被忽略但恰恰是穩(wěn)定性的根基。一個(gè)定義了但沒(méi)約定失敗行為的接口就像插座上沒(méi)有保險(xiǎn)絲——大多數(shù)時(shí)候沒(méi)事一出問(wèn)題就是大事。1.3 接口定義與函數(shù)定義的區(qū)別有些同學(xué)會(huì)問(wèn)接口不就是一個(gè)函數(shù)嘛我在SMP里直接寫(xiě)一個(gè)公開(kāi)函數(shù)不就行了。區(qū)別在兩點(diǎn)。第一函數(shù)是實(shí)現(xiàn)細(xì)節(jié)接口是契約承諾。你可以今天把一個(gè)函數(shù)里查數(shù)據(jù)庫(kù)的邏輯改成查緩存函數(shù)的簽名不變調(diào)用方無(wú)感知但如果接口的入?yún)⒔Y(jié)構(gòu)變了所有調(diào)用方都必須跟著改因?yàn)槠跫s變了。第二接口往往是跨模塊甚至跨系統(tǒng)邊界的而函數(shù)通常是進(jìn)程內(nèi)的。SMP里的接口很可能最終映射為一個(gè)HTTP端點(diǎn)或者一個(gè)進(jìn)程間消息它天然帶有網(wǎng)絡(luò)傳輸?shù)奶攸c(diǎn)有延遲、有失敗、有并發(fā)。這些在普通函數(shù)調(diào)用里是不用考慮的。所以我在寫(xiě)SMP代碼時(shí)有個(gè)習(xí)慣先把接口定義單獨(dú)寫(xiě)在一個(gè)文件里像簽合同一樣把所有字段、類型、邊界條件列清楚再去寫(xiě)實(shí)現(xiàn)邏輯。先有契約后有代碼。2. 定義一個(gè)可用的SMP接口——聲明、實(shí)現(xiàn)、綁定三步走有了概念之后看實(shí)際操作。SMP語(yǔ)言里定義一個(gè)接口大致走三步接口聲明、接口實(shí)現(xiàn)、接口綁定。下面用一個(gè)最簡(jiǎn)單的獲取用戶昵稱場(chǎng)景來(lái)演示。2.1 第一步接口聲明文件接口聲明只描述要什么和給什么不寫(xiě)任何邏輯。SMP的聲明語(yǔ)法大致長(zhǎng)這樣interface userService_getNickName { // 入?yún)⒍x input { userId: string empty // 用戶ID必填 scene: string default // 場(chǎng)景標(biāo)識(shí)可選 } // 成功返回 success { nickName: string level: int } // 錯(cuò)誤碼約定 error { 10001: userId不能為空 10002: 用戶不存在 } }注意看這里我把錯(cuò)誤碼也寫(xiě)進(jìn)了聲明里這是很多半路轉(zhuǎn)SMP的人不習(xí)慣的地方。但恰恰是這個(gè)習(xí)慣讓后續(xù)的調(diào)用方省了無(wú)數(shù)對(duì)接成本。調(diào)用方看到錯(cuò)誤碼表等于提前拿到了接口會(huì)怎么拒絕我的完整清單寫(xiě)容錯(cuò)邏輯就有據(jù)可依。2.2 第二步接口實(shí)現(xiàn)文件聲明只是一紙合同實(shí)現(xiàn)才是真正的干活的人。SMP要求實(shí)現(xiàn)文件通過(guò)implement關(guān)鍵字顯式聲明自己實(shí)現(xiàn)的是哪個(gè)接口這樣跑冒煙測(cè)試的時(shí)候平臺(tái)能自動(dòng)檢查有沒(méi)有只聲明未實(shí)現(xiàn)的接口。implement userService_getNickName { process(input) { if input.userId empty { return error(10001) } userData db.query(select nick_name, level from t_user where user_id ?, input.userId) if userData null { return error(10002) } return success({ nickName: userData.nick_name, level: userData.level }) } }這里有一個(gè)關(guān)鍵設(shè)計(jì)真正的查詢動(dòng)作被封裝在process方法內(nèi)部外部調(diào)用方完全看不到db.query的存在。將來(lái)就算你把用戶表從MySQL遷到了Redis緩存只要接口的入?yún)⒑头祷刂挡蛔兯姓{(diào)用方一行代碼都不用改。這就是接口封裝帶來(lái)的維護(hù)紅利。2.3 第三步接口綁定與暴露SMP里的接口可以只在平臺(tái)內(nèi)部模塊間調(diào)用也可以通過(guò)綁定配置暴露成外部的HTTP API。綁定這一步通常在平臺(tái)的配置文件里完成不需要寫(xiě)代碼api_bindings: - interface: userService_getNickName http_method: GET http_path: /api/v1/user/nickname param_mapping: userId: query.userId這個(gè)配置的意思是外部系統(tǒng)通過(guò)GET /api/v1/user/nickname?userIdxxx就能訪問(wèn)到我們SMP模塊里的userService_getNickName接口。參數(shù)映射表解決了外部字段名和內(nèi)部字段名不一致的問(wèn)題比如外部都叫userId內(nèi)部可能叫oid映射一下就好了不用為了對(duì)接去改代碼。我實(shí)際項(xiàng)目中常用的做法是內(nèi)部接口命名偏向語(yǔ)義化外部路徑統(tǒng)一加/api/v1/前綴并且全部小寫(xiě)這樣外部對(duì)接方看到URL就能猜到功能看到版本號(hào)就知道能不能隨便升級(jí)。接口路徑一旦發(fā)布出去就盡量不要改了——因?yàn)檎{(diào)用方可能已經(jīng)把它寫(xiě)死在他們的代碼里你一改他們的程序就斷了。3. 調(diào)用真實(shí)世界的HTTP API——SMP里的請(qǐng)求、解析與鑒權(quán)三件套定義好了接口給自己用接下來(lái)更常見(jiàn)的場(chǎng)景是SMP程序要去調(diào)用別人家的API比如大模型問(wèn)答API、天氣API、支付API。這一步里有三個(gè)基本功必須扎實(shí)發(fā)請(qǐng)求、解析返回、帶上鑒權(quán)信息。任何一個(gè)出問(wèn)題整個(gè)鏈路就斷了。3.1 發(fā)起HTTP請(qǐng)求的標(biāo)準(zhǔn)姿勢(shì)SMP語(yǔ)言內(nèi)置了http庫(kù)封裝了常見(jiàn)的請(qǐng)求方法。一個(gè)標(biāo)準(zhǔn)的GET請(qǐng)求長(zhǎng)這樣resp http.get(https://api.example.com/v1/weather, { headers: { Authorization: Bearer config.apiKey }, params: { city: shenzhen }, timeout: 5000 // 毫秒 })我要特別強(qiáng)調(diào)一下timeout這個(gè)參數(shù)。很多剛學(xué)SMP的人不設(shè)置超時(shí)時(shí)間或者干脆設(shè)成0表示永不超時(shí)。這在測(cè)試環(huán)境沒(méi)問(wèn)題一旦上了生產(chǎn)只要下游服務(wù)慢一次你的SMP模塊就跟著卡死所有調(diào)用你的上層應(yīng)用也連鎖卡死。所以我的經(jīng)驗(yàn)是外部請(qǐng)求一律設(shè)置超時(shí)內(nèi)部服務(wù)之間通信可以稍微放寬一點(diǎn)但任何HTTP調(diào)用都必須有一個(gè)上限。3.2 JSON解析與字段提取的坑拿到響應(yīng)之后第一件事是判斷狀態(tài)碼第二件事才是解析body。SMP的json庫(kù)用法如下if resp.statusCode ! 200 { log.error(請(qǐng)求失敗狀態(tài)碼, resp.statusCode) return error(20001) } body json.parse(resp.body) // 很多API的返回格式是固定的code / message / data if body.code ! 0 { log.error(業(yè)務(wù)錯(cuò)誤, body.message) return error(20002) } nickName body.data.nickName解析本身不難難在字段不一定存在。假如上游API調(diào)整了返回結(jié)構(gòu)把data.nickName改到了data.user.nickName你的解析代碼在運(yùn)行時(shí)就會(huì)拿到一個(gè)空值。所以我在項(xiàng)目里定了條規(guī)矩凡是解析外部API返回的字段一律做兩層防御——先判斷層級(jí)存在性再判斷類型符合性。SMP里可以這樣優(yōu)雅地處理nickName body.data?.user?.nickName ?? 未知用戶?.的意思是如果前面的對(duì)象為空后面的就不取值??的意思是如果結(jié)果是空就用默認(rèn)值兜底。這兩兄弟是防御式編程的利器我?guī)缀踉诿恳粋€(gè)外部API調(diào)用里都會(huì)用到。3.3 鑒權(quán)方式Bearer Token 與 API Key熱搜詞里出現(xiàn)的openrouter api key、deepseek api如何調(diào)用、智譜api其實(shí)都屬于這一類大模型廠商把模型能力封裝成HTTP API用API Key來(lái)標(biāo)識(shí)調(diào)用者身份。鑒權(quán)頭最常見(jiàn)的兩種寫(xiě)法// 方式一Bearer Token headers: { Authorization: Bearer sk-xxxxxxxxxxxx } // 方式二自定義Header headers: { X-API-Key: your-api-key-here }不同的服務(wù)商要求的頭部名稱不同有的是Authorization有的是api-key有的還要求同時(shí)傳app_id和api_secret。這些信息在服務(wù)商的文檔里都會(huì)寫(xiě)明但容易被忽略的是密鑰的換行問(wèn)題。我曾經(jīng)排查過(guò)一個(gè)詭異的問(wèn)題在SMP里配置了密鑰單獨(dú)測(cè)試請(qǐng)求完全正常但只要在循環(huán)里連續(xù)調(diào)用偶爾就報(bào)401。后來(lái)發(fā)現(xiàn)密鑰字符串末尾多了一個(gè)不可見(jiàn)的換行符——是從配置文件里復(fù)制的時(shí)候帶進(jìn)去的。SMP的trim()函數(shù)一用問(wèn)題立刻消失。從那以后所有密鑰配置我都要先過(guò)一遍trim()。3.4 OpenRouter這類聚合平臺(tái)的特殊之處熱搜里有人搜索openrouter api key說(shuō)明有人正準(zhǔn)備用這類聚合平臺(tái)。聚合平臺(tái)的思路是它幫你接入了多個(gè)大模型你只需要持有它一個(gè)Key就能統(tǒng)一調(diào)用不同廠商的模型。這類平臺(tái)的接口調(diào)用方式通常是resp http.post(https://openrouter.ai/api/v1/chat/completions, { headers: { Authorization: Bearer config.openrouterKey, Content-Type: application/json }, body: json.encode({ model: deepseek/deepseek-chat, messages: [ {role: user, content: 你好介紹一下SMP語(yǔ)言} ] }), timeout: 60000 })注意model字段聚合平臺(tái)要求在模型名前加廠商前綴比如deepseek/deepseek-chat、openai/gpt-4o這是為了方便區(qū)分哪個(gè)廠商的哪個(gè)模型。如果沒(méi)加前綴平臺(tái)會(huì)直接報(bào)錯(cuò)錯(cuò)誤信息里往往會(huì)出現(xiàn)像熱搜里那樣的The supported api model names are ...——這種報(bào)錯(cuò)一出現(xiàn)我第一反應(yīng)就是去看model字段十有八九是格式不對(duì)。4. 接口冪等性與重試機(jī)制——好的接口經(jīng)得起重復(fù)調(diào)用熱搜詞里有一條接口冪等性這絕對(duì)值得單獨(dú)講。冪等性這東西日常開(kāi)發(fā)里容易背概念但在SMP里真的寫(xiě)一次就忘不掉。4.1 用轉(zhuǎn)賬例子理解冪等假設(shè)你的SMP模塊對(duì)外提供一個(gè)創(chuàng)建訂單接口。調(diào)用方因?yàn)榫W(wǎng)絡(luò)超時(shí)沒(méi)收到響應(yīng)于是按我們的建議重試了一次。如果接口不是冪等的那么訂單就被創(chuàng)建了兩次用戶被扣了兩次錢——這是生產(chǎn)事故不是bug。冪等的意思是同一個(gè)操作無(wú)論你執(zhí)行一次還是執(zhí)行一百次結(jié)果都一樣。而創(chuàng)建訂單天然不是冪等的因?yàn)槊看螆?zhí)行都會(huì)產(chǎn)生一條新訂單。解決方案也很經(jīng)典在入?yún)⒅屑尤胍粋€(gè)唯一請(qǐng)求IDrequestId。interface orderService_create { input { requestId: string empty // 調(diào)用方生成的UUID productId: string amount: float } // ... }實(shí)現(xiàn)層這樣做判斷implement orderService_create { process(input) { // 先查一下這個(gè)requestId有沒(méi)有處理過(guò) exists db.query(select id from t_order where request_id ?, input.requestId) if exists ! null { // 已經(jīng)處理過(guò)直接返回上次的結(jié)果不再重復(fù)創(chuàng)建 return success({orderId: exists.id, dup: true}) } orderId doCreateOrder(input) return success({orderId: orderId, dup: false}) } }這段代碼的精髓在于先查再插的邏輯同一個(gè)requestId第二次進(jìn)來(lái)時(shí)不會(huì)重復(fù)創(chuàng)建訂單而是把第一次的結(jié)果原樣返回。調(diào)用方看到dup字段就知道這是一次重復(fù)請(qǐng)求不用再額外處理。4.2 冪等判斷的并發(fā)窗口問(wèn)題上面那段偽代碼有一個(gè)隱藏風(fēng)險(xiǎn)如果兩個(gè)一模一樣的請(qǐng)求在極短時(shí)間同時(shí)到達(dá)兩個(gè)進(jìn)程都先執(zhí)行了db.query都沒(méi)查到記錄然后都執(zhí)行了doCreateOrder還是會(huì)創(chuàng)建兩條訂單。解決方式有兩個(gè)層面數(shù)據(jù)庫(kù)層面給request_id字段加唯一索引。這是兜底方案確保數(shù)據(jù)庫(kù)層面不可能出現(xiàn)兩條相同請(qǐng)求ID的記錄。應(yīng)用層面在SMP里用分布式鎖或原子操作來(lái)控制先查再插這個(gè)復(fù)合動(dòng)作的原子性。我只推薦一種組合應(yīng)用層用唯一索引兜底業(yè)務(wù)層用requestId做提前判斷。前者保證不出大事后者避免大量無(wú)意義的重復(fù)計(jì)算。4.3 重試策略要配合冪等設(shè)計(jì)外部API調(diào)用時(shí)重試也必須有策略不能一股腦地重試。我把重試分為兩種情況錯(cuò)誤類型是否該重試建議策略網(wǎng)絡(luò)超時(shí)、連接失敗可以重試最多3次間隔指數(shù)退避5xx服務(wù)器錯(cuò)誤可以重試最多2次間隔拉長(zhǎng)4xx客戶端錯(cuò)誤不該重試立即熔斷檢查參數(shù)特別是4xx錯(cuò)誤比如400參數(shù)錯(cuò)誤、401鑒權(quán)失敗如果你還傻傻地重試不僅白白浪費(fèi)請(qǐng)求額度還會(huì)讓服務(wù)商把你的Key暫時(shí)封禁。所以我在寫(xiě)重試邏輯時(shí)有一條鐵律400、401、403、404一律不重試。5. 一次400錯(cuò)誤的完整排查鏈路——從報(bào)錯(cuò)到定位的全過(guò)程熱搜里有一條值得分析的報(bào)錯(cuò)原文api error: 400 this models maximum context length is 1048576 tokens. however, your messages resulted in 1049000 tokens這個(gè)報(bào)錯(cuò)翻譯過(guò)來(lái)是模型最大上下文長(zhǎng)度是1048576個(gè)token但你這次請(qǐng)求的文本折算出來(lái)有1049000個(gè)token超了。這類問(wèn)題的排查思路比問(wèn)題本身更值得總結(jié)。5.1 明確錯(cuò)誤類型400里的分類邏輯HTTP 400表示請(qǐng)求不合法但具體的不合法原因在提示文本里。上面這個(gè)報(bào)錯(cuò)其實(shí)是內(nèi)容太長(zhǎng)類問(wèn)題。遇到400我的排查順序是這樣的看提示文本是否明確寫(xiě)出了問(wèn)題原因本例很明確token超限。檢查請(qǐng)求體大小尤其是messages數(shù)組里有沒(méi)有不小心塞入超長(zhǎng)文本。檢查模型名稱是否正確——有些400提示是不支持的模型名比如熱搜里另一條the supported api model names are deepseek-flash, deepseek-v4說(shuō)明你把模型名寫(xiě)錯(cuò)了。檢查參數(shù)格式比如JSON里某個(gè)字段類型不對(duì)。5.2 為什么1048576這么長(zhǎng)的上下文還會(huì)超限這看起來(lái)是個(gè)矛盾明明模型已經(jīng)支持100萬(wàn)token的上下文了怎么還能超原因很簡(jiǎn)單你這100萬(wàn)token的總量包含了系統(tǒng)提示詞、歷史對(duì)話、工具定義和當(dāng)前用戶問(wèn)題四個(gè)部分四者之和一旦超過(guò)上限就報(bào)錯(cuò)。很多人只盯著用戶問(wèn)題的字?jǐn)?shù)忽略了歷史對(duì)話會(huì)隨輪次逐漸膨脹。所以如果你的SMP程序是一個(gè)聊天機(jī)器人一定要做歷史消息裁剪// 取最近20條消息再估算一下token量如果太大就截掉更早的 history getHistory() maxHistory history.slice(-20) // token量粗估中文字符約1.5個(gè)token/字英文約0.3個(gè)token/字 totalTokens estimateTokens(maxHistory) while totalTokens 800000 { maxHistory maxHistory.slice(1) // 去掉最早的一條 totalTokens estimateTokens(maxHistory) }注意這個(gè)裁剪邏輯要放在請(qǐng)求發(fā)送前而不是等到服務(wù)端報(bào)400后才處理。一次成功的集成調(diào)用應(yīng)該在客戶端就把這種可預(yù)測(cè)的問(wèn)題提前消化掉。5.3 從熱搜里的真實(shí)報(bào)錯(cuò)學(xué)到的排查習(xí)慣再看另一條常見(jiàn)的報(bào)錯(cuò)模板{code:api_key_required,message:api key is required in authorization header}這條報(bào)錯(cuò)直白得感人你在Authorization頭里沒(méi)帶API Key。我看到這個(gè)的第一反應(yīng)是查三件事代碼里從來(lái)沒(méi)寫(xiě)headers配置低級(jí)遺漏。寫(xiě)了但變量名拼錯(cuò)了比如配置的是apiKey代碼里取的是apikey。寫(xiě)了但變量的值是空的配置文件加載失敗密鑰壓根沒(méi)讀進(jìn)內(nèi)存。我有個(gè)笨但有效的習(xí)慣在發(fā)起請(qǐng)求前一幀把請(qǐng)求對(duì)象完整地打印到日志里。注意密鑰本身要打碼sk-xxxx...后四位但其他信息全部打印。這樣一旦報(bào)錯(cuò)直接看日志就能確認(rèn)請(qǐng)求頭到底帶沒(méi)帶Key、URL是不是正確省去一層一層猜的功夫。5.4 免費(fèi)WebService接口的特別提醒熱搜里有一條免費(fèi)webservice接口這類接口尤其適合新手練手但我要提醒幾句。免費(fèi)的接口通常有嚴(yán)格的調(diào)用頻率限制比如每分鐘最多10次。你寫(xiě)循環(huán)測(cè)試的時(shí)候一定要在循環(huán)里加sleep控制節(jié)奏別一口氣發(fā)50個(gè)請(qǐng)求等著被限流。另外免費(fèi)接口的穩(wěn)定性不要抱太高期望——我見(jiàn)過(guò)免費(fèi)的天氣接口一到節(jié)假日就掛掛幾天都沒(méi)人修。所以在SMP里調(diào)用這類接口一定要把接口不可用當(dāng)成正常分支處理而不是直接讓整個(gè)程序報(bào)錯(cuò)崩潰。我在代碼里給這類接口單獨(dú)做了一層降級(jí)緩存調(diào)用成功就把結(jié)果緩存10分鐘調(diào)用失敗時(shí)如果緩存里有舊數(shù)據(jù)就用舊數(shù)據(jù)頂替而不是直接返回錯(cuò)誤給用戶。這樣即使上游免費(fèi)接口抽風(fēng)用戶感知不到任何異常。6. 設(shè)計(jì)接口時(shí)的工程紀(jì)律——寫(xiě)給正在把SMP用于真實(shí)項(xiàng)目的你最后一部分不講具體語(yǔ)法講紀(jì)律。接口這東西一頭連著文檔一頭連著代碼再一頭連著所有調(diào)用方。你的紀(jì)律性有多強(qiáng)你的接口質(zhì)量就有多高。6.1 接口設(shè)計(jì)清單發(fā)布前過(guò)一遍我自己的項(xiàng)目規(guī)范里有一張接口發(fā)布檢查清單每次上線新接口前逐條打鉤已經(jīng)用了很久[ ] 接口命名是否有明確的領(lǐng)域前綴會(huì)不會(huì)與其他模塊沖突[ ] 入?yún)⑹欠衩總€(gè)字段都定義了類型、是否允許為空、枚舉值是否列全[ ] 返回值是否區(qū)分了成功、參數(shù)錯(cuò)誤、業(yè)務(wù)錯(cuò)誤、系統(tǒng)異常四類情況[ ] 是否定義了冪等字段創(chuàng)建、下單、轉(zhuǎn)賬類接口必須有[ ] 是否設(shè)置了超時(shí)時(shí)間[ ] 是否對(duì)下游異常做了降級(jí)預(yù)案[ ] 字段命名是否統(tǒng)一風(fēng)格全駝峰或全下劃線禁止混用表格形式的檢查清單看著刻板但它確實(shí)幫我攔下過(guò)很多次想當(dāng)然。尤其那個(gè)字段命名混用的問(wèn)題幾乎是跨團(tuán)隊(duì)協(xié)作時(shí)最常見(jiàn)的內(nèi)耗來(lái)源——你定義的是order_id調(diào)用方按orderId傳然后兩邊各花半小時(shí)排查為什么取不到值。6.2 API文檔即代碼讓文檔跟著接口走SMP平臺(tái)一個(gè)很好用的特性是支持從接口聲明的注釋直接生成文檔。這就意味著你花了心思寫(xiě)的那份接口聲明本身就是文檔不需要再另維護(hù)一份Word或在線表格。我的習(xí)慣是在接口聲明的注釋里寫(xiě)清楚三件事這個(gè)接口解決什么問(wèn)題——一句話說(shuō)清。典型調(diào)用場(chǎng)景——讓后來(lái)的查詢者快速理解。注意事項(xiàng)——包括但不限于重復(fù)請(qǐng)求會(huì)返回duptrue、該接口依賴外部XX服務(wù)可能失敗。好的接口文檔不是字段清單的堆砌而是告訴后來(lái)的人這里有什么坑。6.3 接口版本管理朝前兼容比破而后立更重要一旦接口被多個(gè)調(diào)用方使用你改接口的任何入?yún)⒒蚍祷刂刀枷喈?dāng)于強(qiáng)制所有人同步升級(jí)。為了不被人背后罵建議從一開(kāi)始就引入版本管理。最輕量的做法是在接口名上加版本號(hào)后綴或字段標(biāo)志interface orderService_create_v2 { ... } interface orderService_create_v1 { ... }新版本接口和舊版本接口可以共存舊調(diào)用方繼續(xù)走v1新調(diào)用方接入v2等到確認(rèn)沒(méi)有任何調(diào)用方再使用v1了才考慮下線。這個(gè)灰度切換比一次性強(qiáng)制升級(jí)要平滑得多。還有一種做法是在HTTP路徑里帶版本號(hào)比如/api/v1/和/api/v2/同時(shí)存在。這種做法對(duì)外部調(diào)用方最友好路徑即是版本不用在業(yè)務(wù)字段里區(qū)分。6.4 接口設(shè)計(jì)的最終判斷標(biāo)準(zhǔn)最后分享一個(gè)我自己衡量接口設(shè)計(jì)好壞的土辦法把接口文檔發(fā)給一個(gè)從未參與開(kāi)發(fā)的人看讓他在不提問(wèn)的情況下按文檔寫(xiě)一個(gè)模擬調(diào)用。如果他一次就寫(xiě)對(duì)了說(shuō)明你的接口定義合格如果他反復(fù)來(lái)問(wèn)這個(gè)字段什么意思這個(gè)參數(shù)是必填嗎說(shuō)明文檔和定義還有改善空間。這個(gè)土辦法看起來(lái)浪費(fèi)時(shí)間其實(shí)價(jià)值極高。因?yàn)榻涌诘谋举|(zhì)是讓別人用起來(lái)舒服而不是讓自己寫(xiě)起來(lái)省事。很多工程師習(xí)慣站在實(shí)現(xiàn)者的角度定義接口——參數(shù)越少越好邏輯越簡(jiǎn)單越好。但從調(diào)用方的角度參數(shù)的意義清晰、邊界明確、錯(cuò)誤信息有指導(dǎo)性才是真正的好接口。我自己經(jīng)歷過(guò)的轉(zhuǎn)變是剛開(kāi)始寫(xiě)接口總覺(jué)得接口是給自己寫(xiě)的方便就行后來(lái)被幾個(gè)外部調(diào)用方配合過(guò)之后才明白接口是一個(gè)服務(wù)型產(chǎn)品調(diào)用方才是它的用戶。換到那個(gè)視角之后我對(duì)字段命名、文檔注釋和錯(cuò)誤信息的重視程度明顯上了一個(gè)臺(tái)階。寫(xiě)了這么多其實(shí)核心就一句話SMP語(yǔ)言里的接口和API說(shuō)到底是約束和服務(wù)的結(jié)合體。定義約束時(shí)越嚴(yán)謹(jǐn)提供服務(wù)時(shí)就越穩(wěn)定。希望這講的內(nèi)容能幫你少走一些彎路——至少別像我那次拼錯(cuò)參數(shù)名一樣在一個(gè)字段上浪費(fèi)大半個(gè)晚上。下次再遇到400、401這類報(bào)錯(cuò)的時(shí)候可以先按照我分享的排查順序走一遍大概率比你自己從頭猜要快。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
思思热一热婷婷热一热| 9I1性色影院| 国产探花日韩援交| 91黑丝美女| TS人妖另类精品视频系列| 男人的天堂啪啪| 天天久久久久久| 亚洲一区二区三区播放在线| 97在线青| 大色综合网| 国产久久一区二区| 防屏蔽在线视频| 变态综合色| 国产精品秘 福利姬在线观看| 天堂综合| 成视频在线观看免费看| 99超碰网| 久久久com| 五月婷婷青青草娱乐伊人| 丁香六月激情| 精品一二三区女同| 亚洲无码AV九九九| 久草毛片| 日夜啪电影| 欧美亚洲特P| 9久综合网| 久久大香蕉97| 久久久久9999妇女| 超碰成人免费| 九九九九九九视频免费| 秋霞鲁丝午夜无码一区二区三| 国产精品福利视频播放| 蜜臀久久99精品| 日日日日做夜夜夜夜无码| 性爱欧美五月| 天天流夜夜操| 中国AAAAAA黄色片| 午夜精品人妻二区三区| 久久精品亚洲东京热色播| 色哟哟 日韩精品| 99精品人人爽| 久久精品欧美一区蜜桃| 精品视频免费在线一区| 亚洲丝袜二区在线| 今日头条成人一区二区三区四虎精品| 国产操逼逼网| 欧美A片中文字幕| 日日玩天天干| 麻豆AV96熟妇人妻| 色官网在线| 青草精品视频日本久久久久网站在线| 怡红院成人av| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 99人人干| 天天干干天天干干| 91亚洲欧美| oumeizonghese,www| 8050午夜少妇无码| 欧美不卡五十路| 制服丝袜第二页| 色色色网站| 人人做,人人操,人人摸| 亚洲精品蜜桃久久久| 97亚洲性爱| 91在线超高颜值国产| 亚洲 欧美 日本 国内 首页| 综合网欧| 亚洲色图久久成人| 亚洲aV性爱| 八戒午夜福利理论片| 91亚洲最新在线| 岛国人妻少妇av在线观看| 国产操偷| 可以免费看黄片的视频| 999综合网| 中日韩久久久免费看| 91国产大片| 久久美女福利是上海美女| 日韩欧美性爱电影在线观看| 亚洲蜜臀精品视频久久| 2026国产精品视频| 97er欧美性| 992这里有精品| 中文字幕一区二区三区高清| 偷拍 欧美 日韩| 俺也射| 亚洲欧洲视频小说在线观看| 激情99| 日本操大逼| 亚洲欧洲自拍| 91亚洲丝袜熟女| 97超碰免费人人性爱| 99亚亚热| 人妻一区久久二区三区色播| 亚洲中文字幕妇伦久久| 爱爱动态120秒| 综合欧美激情网| 天天影视色香欲综合网小说| 欧美色图20P| 人妻 欧美 中文| 亚洲日产专区| 色玖玖| 国产 日韩 另类 视频一区爱| 亚洲中文字幕在线视频一区二区| 亚洲一区二区在线观看91| 亚洲综合色图欧美| 9久9久| 久久久女人| ...日韩成人一区二区三区字幕| 97精品视频网站| 午夜呻吟欧美| 中文字日本乱码| 国产四虎在线| 一区久久久二区| 久操视频免费在线观看| 亚洲精品 超碰| 999日韩中文精品观看视频。| 人妻激情偷乱视频一区二区三区| 色情成人五月天| 综合激情婷婷| 射 色综合| 中文字幕高清20页视频| 男人的天堂激情| 国产精品对白内射| 欧美日韩大陆黑人少妇99| 国产精品青青草| 蜜臀av中字字幕网站| 亚洲天堂,男人| 嗯啊不要啊在线| 精品四五区| 操人妻少妇中文| 精品91摸| 人人超碰在线观看黄| 日韩 成人 有码| 97精选久久| 激情久久日韩精品中文字幕麻豆| 啊v在线观看视频| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 東南亚性呦成人伦理资源在线视频| 欧美综合色| rivers-china.com| 亚洲天堂一区| 国产网红精品| 久久婷婷五月天| 91人妻人人妻| 久草在| 校园春色 亚洲| 人人妻人人爽| 中文字幕精品资源在线| 青青草操逼逼视频| www.一本大99| 亚洲欧美啪啪| 丁香色狠狠色综合久久小说| 亚洲国产精品有声| 亚洲色图大香| 久久久男人的天堂| 男人精品区| av一区二区三区四区| 亚洲精品美女久久久久久久久| 99热啪啪| 久久久男人的天堂| 又大又长又粗又爽又黄| 又黄又粗又硬又长又大| 欧美人妻一区二区| 26uuu性| 一区二区三区机械有限公司| 天天摸夜夜操视频| 偷拍 亚洲 欧美| 欧美亚洲素人制服精品| 亚洲一本大道中文字幕无码在线| 青青草吊丝| 941超碰| 精品91| 国产小u女在线观看| 久久亚州高清| 国产97免费视频| 一线黄色免费性爱片| 天天爽天天爽| 丰满人妻一区二区中文| 久久欲| 开心五月深爱五月| 龙兴卡官方查询| 超碰色综合| 国产欧美日韩在线不卡第一页| 天天操av懂色| 天堂亚洲欧美| 中文自拍欧美影视| 伊人96在线| 四虎国产精品永久入口| 97人妻色| 夜夜草天天| 亚洲熟妇自偷自拍另欧美| 啊啊啊啊在线播放| 免费啪啪av| 蜜色网色哟哟| 97国产人人| 99自拍视频在线| 91精品又粗又猛又爽| 黑人免费福利视频| 国产又黄又猛又粗又爽的网站| 亚洲在钱| 国产AV无码AV| 久久宗合亚洲| 操逼www.| nuu12国产麻豆精品| 欧美一级A片不卡视频。| 九X超碰| 免费操逼91| 99在线精品观看99| 精品福利| 九九久久久久久爱| 激情婷婷综合久久| 久久的网站啊啊啊啊啊| 天天摸夜夜添无码小视频| 97亚洲性爱| 丁香婷婷五月| 日韩不卡一二三四| 国产成人免费观看在线视频| 欧美日韩97在线| 91高清无码下载| 欧美熟女丝袜| 97摸视频| 国色综合天| 丁香九月激情| 欧美精品成人一区二区在线观看 | 亚洲 欧美 日韩 国产一区二区| 男人的天堂在线有码| 亚洲不雅视频1区二区| 亚洲图片婷婷五月天| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 天天看高清麻豆| 国产野战露脸在线播放| 操老熟女AV| 日亚韩精品视频二区三| 骚货操死你| 女同在线视频一区| 久久国产热视频97电影| 天天综合欧美黑人| 日本天堂网| 亚洲密乳AV| 久9爱经典视频| 亚洲五月天激情| 白嫩少妇| 亚洲国产精品久久久男人的天堂| 精品一区二区成人动漫| 思思热国产高清| 久久神马影院| 狠狠操综合| 久久久久久久精| 欧美综合色站| 青青草操逼逼视频| 99国产精品视频尤物| 色97综合中文字幕| 精品人妻一区二区免费蜜桃| 我要看免费韩日黄片| 日韩电影在线观看网址| 一本一道久久综合久久| 久久人妻97久久久久久久| 曰韩精品视频一区二区| 欧美日韩97| 欧美日韩人妻少妇 一区二区三区| 人人爱操| 一本色道久久天天射天天干| 亚洲高清色综合| 欧美色日本| 婷婷综合五月| 在线国产福利网址导航| 天啪| 久久久啊啊啊| 99re在线视频| 欧美人妻色| 能看的AV| 欧美日本国产日韩激情视频| 成年人网站在线免费观看| 很狠操| 久久久久久久九九九九九九| 亚洲 综合 欧美| 美女极品一区二区三区| 日韩熟女无码| 成人性生活高清视频在线播放| 青娱乐蜜桃臀AV色婷| www.狠狠操| 偷窥自拍A片| 曰韩操B| 亚洲人体视频在线观看| 韩国一级做a久久久久| 成人精品水蜜桃久久久久久久| 天天爽夜夜欢视| 亚洲少妇喷视频看| 亚洲五月天激情| 操逼天美3区| 国产午夜精品理论片一二三区区| 欧美日韩97| 亚洲情色 自拍| 亚州色阁| 色眯眯av| 2017天天透天天通天天擦| 国产精品久久久777| 一本一道人妻久久一区二区三区 | 日本网色| 国产又大又硬又长又粗| 91精品国产日韩欧美综合| 26uuu久久| 激情小说亚洲色图| 国产品精品自在在线午夜免费| 人人妻人人爽| 熟妇色99| 97欧美超碰| 97天天| 亚洲色电影在线| 97久久综合网| 日韩内| 91综合网在线| 97超碰香蕉| 日本道不卡| 国产激情视频一区区三区| 国产国产亚洲一二三久久| 可乐操亚洲蜜911| 色偷偷综合91久久噜噜| 不卡六六在线91| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 中文字幕在线日亚州9| 国产小u女在线观看| 温婉少妇玩3p| 深田咏美亚洲精品福利社| 性爱乱伦一区| 96精品在线| 用力操死我| 四虎视频在线观看| 欧美论理片| 大色网久久| 91美女小视频| 99e久久国产精品| 日韩国产欧美伦理在线| 久久一区二区三区入口| 玖色AV| 超碰综合色| 欧美性五月| 色香欲综合| 色y情视频免费看| 亚洲成人无码影院| 国产这里只有精品| 爆乳免费黄网站| 人妻 制服 日韩 中文 在线| 人人澡人人澡人人| 精品视频一区二区| 激情综合二| 99色热| 欧美久久婷婷| 日本黄色精品| 嫩呦国产一区二区三区AV| 天堂8在线新版官网| 国产熟女少妇一区| 東南亚性呦成人伦理资源在线视频 | 无套内射性感少妇视频| 一及黄久一点| 人人妻人人爽一区二区三区| 一本大道不卡一二三区| 嗯嗯啊在线视频| 亚洲区限制级| 啊啊啊操死我| 丁香五月性| 75大香蕉| 日韩啪啪视频| 色色色欧美| 亚洲精品国产精品乱码不卡| 天天综合网~91| 不卡av在线中文字幕| 久久久婷| 久久久成人免费av电影| 九月丁香婷婷色| 91neishe| 91精品国产91久久久久久久久久久久| 亚洲成人免费中文字幕| 欧美白嫩女HD| 97视频免费在线观看| h无码动漫在线观看| 亚洲性天堂| 久久男女激情视频网站| 日韩久久.一级黄色片| 人妻久久久| 东京热不卡视频| 张柏芝国产一区在线观看| 新版天堂中文资源8在线| 性生活久久久久久久久久| 国产精品久久泡妞网站| 99这里只有精品国产| AV一二区| 91伊人| 亚洲五月婷| 欧美一级专区免费大片| 少妇无码av专区线| AV丝袜少妇| 欧美综合网| 黑丝少妇在线观看| 久久精品久| 99精品无码| 亚洲熟女一区二区| 国产成人久久久精品免费AV| 超碰在线综合97| 黄色网址在线免费观看| 97超碰色中文字幕| 最新日韩黄片| 欧美色图小说综合| 5月婷婷6月六月丁香| 日韩电影天堂视频一区二区| 91人妻素女| 91国产丝袜美女| 午夜视频好爽啊| 九九九九九九九九九九精品视频| 人人看人人爰人人操| 日本啊啊啊啊啊视频| 伊人网免费视频| 大香蕉伊人在线成人AV在线观看| 永久免费av无码网站国产app| 欧美在线色图| 亚瑟国产精品久久无码| 日日日色色色色色| 丁香六月婷| 欧美91在线| 色婷婷在线视频精品导航| www.亚洲成人一区| 偷拍片久久| 国产精品久久久三级无码| 91久久精品美女高潮喷水| 午夜免费福利视频一区| 97欧美在线| 欧洲Au麻豆| 国产女人和拘做爰视频| 天操天操夜操夜月月年年操操| 久久久久国产精品片区无码直播| 少妇久久久久久久久| 欧美日韩黄色片一区二区三区四区人与兽做爱 | 97爱| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 草草影院日本第一页| 欧美九一精品久久久熟妇| 久久精品99| 一区AV| 91成人久久| 67914亚洲精品| 亚洲色婷婷久久久综合日本| 熟妇国产免费一区| 日本大片日本一区二区免费高清| 国产AAAAAABBBBB| 久久精品成人一区二区三区蜜臀| 极品色社| 自怕偷自怕亚洲精品| 妇女乱色二区| 国产男女无套97| 一级A片女人高潮叫床| 欧美日韩中文字幕人妻| 日日噜噜夜夜久久亚洲一区二区| 精品亚洲国产成人精品| 狠狠干91| 九九九久久久W精品| 夜夜嗨av午夜成人| 激情色播| 白天啪啪晚上啪啪视频| 欧美天天综合网| 色网1| 青娱乐导航AV| 99热亚洲| 熟女人妇一区二区三区| 日本1区2区不卡视频| 日本ZZ高免费A级视频| 亚洲天堂自拍| 免费的av网| 美女自卫慰黄网站免费| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 亚洲欧美另类激情小说| 风间由美日韩欧美久久| 亚洲性猛| 99精品伊人| 1024亚洲中文字幕久在线看片你懂的 | 欧美 熟女 日韩| www超碰| 亚洲欧综合另类无码一区| 国产黄色剧情影片麻豆免费播放| 天天狂操夜夜狂日| 国产农村妇女毛片精品久久| 后入式福利| 男人的亚洲天堂| 嗯嗯嗯啊啊啊操的我好爽 | 一级岛国大片| 国产精品一二三| 久久久99999久网站| 蜜臀在线免费观看在线免费观看| 丁香五月电影| 开心婷婷五月| 久久午夜伦| 成人短视频在线观看| 一级黄色牲爱A级片| 超碰无码加勒比| 亚洲AV成人精品网站在AV| 青娱乐91| 久久久久久久9999| 日本不卡一二区| 欧美啪啪啪91| 欧美日日人人天天| 外国免费性情大片| 亚洲97在线观看| 97在线观| 亚洲婷婷丁香在线| 色综合国产在线观看| 最新亚洲黄色免费电影| 性色AV网站| 欧美区亚洲区偷拍区| 黄色大片免费在线| 亚洲第2页| 91强热人妻| 不卡免费av在线播放| 操逼逼无码| 婷婷丁香五月激情啪啪| 激情综合五月| 91色女| 91伊人大香蕉| 九草九九九| 天美传媒麻豆一区二区三区国产精| 久久久久幕乱码| 骚逼自拍99| 超碰在线在公开超碰在线在公开| 水滴偷拍| 国产成人91一区二区三区| 91人妻最真实刺激绿帽| 日韩国产成人自拍视频| 五月激情在线| 欧美狠狠操| 射丝袜大香蕉| 久久久久久综合久久伊人蜜月| 国产女大学生AV| 国产精品嫩草久久久久| 97久久久| 欧美日韩国产人人| 好爽视频在线观看视频 | 亚洲成人在线乱码色午夜| 国产精品乱码久久久久| 无码一区二区精品视频久久久春药| 成人AV超碰免费在线| 性色av蜜臀av色欲aV| 国产成人综合网| 男人的天堂2018.| 97超碰这里只有精品| 蜜臀一二三区| 9久久久久| 性久久| 啊啊啊好爽快点啊啊啊嗯嗯| 欧美色997| 熟女熟妇一区二区三区视频| www久久国产精品| 极品尤物在线观看| 成人久久精品| 国产蜜臀精品一区二区尤物| 亚洲一曲日韩精品| 红杏大香蕉| 亚洲综合一| 国产91亚洲精品一区二区三区| 亚洲精美粉嫩嫩泬在线观看| 伊人综合色网| 国产精品伦理| 超碰精品国产无码| 日韩性爱播放| 亚洲综合性网址| 国产黄色剧情影片麻豆免费播放| 色色综合网站| 精品二区三四区五电影 | 九九九九一级| 91成人高清在线观看| 欧美激情综合| 亚洲在钱| 午夜福利精品| 四虎免费看黄| 欧美成熟性爱精品| 欧洲无码一区二区| 最新制服中文第一页| 最新日韩黄片| 成人一级二级| 国产网站在线播放| 暖暖精品二区三区观看| 屁股久久久久久久| 日韩偷拍色图| 精品999999| 少妇一线天久久久久久| 性高潮久久久久久久久久久| 亚洲日韩国产欧美综合v| 成人热久久精品| 成人免费视瓶| 18一区二区三区| 97精品久久| 久久久蜜桃一区二区三区| 超碰 国产熟女精品一区| 色色香蕉| 99蜜桃臀久久久欧美精品网站| 亚洲av国产av综合av卡| 亚洲色性情三级| 日韩欧美操逼xxx| 色爱欲亚洲| 国产成人自拍视频视频| 1024手机看片欧美日韩| 99re公开精品免费视频| 欧洲亚洲综合| 五月丁香婷婷综合| 大香蕉中文| 天天综合AV| 乱伦日本中文自拍| 夜夜嗨绯色| 把腿张开老子CAO烂你| 色婷婷一区二区三区久久午夜| 少妇高潮对白在线观看| 噜噜噜亚洲精| 天天影视网综合少妇| 大色综合| 欧美少妇性乱| 国产av美女被艹的乱叫| 青青草中日韩在线| 婷婷激情五月| 国产精品美女视频诱惑| 日韩在线人妻网站| 91爆操视频| 啊啊啊啊嗯嗯在线久久久| 999狠狠综合| 黄视频免费| 亚洲诱惑天堂| 亚洲 欧美都市激情| 91福利网在线观看| 九九九九九用不成了| 欧洲熟妇xxXx欧美老妇裸体| 亚洲在线欧美| 无码男人天堂| 婷婷九月| 人人模人人看| 密臀AV在线| 狠狠色噜噜狠狠狠狠狠色综合久久| 一区二区三区麻豆| 欲香欲色天天天综合和网| 日韩性爱视频免费在线 | www.色婷婷色综合| 无遮挡男女激烈动态图| 欧美青青草视频| 欧美天天插| 黄色区免费观看中文字幕| 超碰人妻久久| 囯产精品强| Av色五月| 天天干天天狼在线视频| 高清有码一区二区| 蜜桃网熟妇| 操香逼| 免费看日本操逼视频| 国产无马在线| 亚洲色婷婷综合久久一区二区三区| 手机不卡视频不卡在线一二三区| 探花一区在线| 一个国产在线综合网站| …亚洲黄色厕厕女女在线播…| 超碰97久久国| 嗯……啊…嗯嗯…啊…好舒服| 99日精品欧美国产| 北约熟女超碰| 中文字幕av亚洲精品| 我爱操| 久久99精品国产| 亚洲欧洲小说图片视频| a在线观看| 性久久| 欧美性爱第一页久久| 91爱剪切久久| 在线观看啊啊啊啊啊| 熟女网站最新| 欧美另类自拍 | 国产成人无码久久精品| 韩国黄片aaaa| 无码高清操逼网址| 精品无码秘 人妻一区二区| 99热一区二区三区四区| 九久久精品| 超碰在97| 色偷综合| 综合大香蕉美。| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 日韩少妇无吗| 操操操操操操| 欧美爆操91| 夜夜爽妓女| 亚洲国产一区二区三区在线| 亚洲91少妇| 国产91美女高潮| 国产精品一区二区在钱播放| 麻豆精品久久久久久久| 亚洲精品 大香蕉| 四虎影院成年人片| 国产精品呦一区二区三区| 无码高清少妇久久| 日本精品一级二级三级| 试看日韩黄片| 日韩一级久久毛片| A 在线网址| jk白丝没脱就开始啪啪| 岛国色情视频在线观看| 欧美一级特黄淫片在线观看| 一本大道不卡一二三区| 亚洲制服aⅴ中文字幕| 超碰97人妻免费在线| 欧美日韩啪啪电影| 亚洲字幕一区二区| 天天视频综合在线观看视频| 在线观看中文av字幕| 亚洲最大AV网| av九九| 色综合久久久久| 亚洲骚女一区二区三区| yiren97| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 九九99久久| 天天操av懂色| 插老姨肥穴| 日本性一区| 无码二级三级| 曰韩人妻中文字幕在线| 国产欧美精选激情视频| 国产三级电影免费观看| 免费视频无码| 欧美 综合| 2020中文字幕在线| 日韩一级二级三级免费看完整版| 欧美AB在线| 亚洲AV麻豆Aⅴ无码电影一| 芊芊操逼视频无码| www.久久99| WWW4虎| 中文字幕第23区| 草久在线| 操婢日韩| 97色碰| 天堂国产AV| 啊啊啊操死我了| 综合久久97| 国产精品久久久久无码A√| 欧美综合区| 色色色网站| 怡红院成人av| 91制服丝袜中文字幕| 久久久久久久久久va| 国产一区二区三区精品观看啪| 久久国产精品一级二级三级| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 摸奶性爱视频网站在线免费播放| 丰满人妻一区二区三区大胸懂色| 大香蕉操久久| 麻豆人妻偷人精品无码视频| 26UUU欧美日本| 91干熟女| 欧美日动态视频| 视频不卡中文字幕| 亚洲综合一区二区| 伊人操操| 97日韩欧美| 国产日韩欧美三级片| 美女91在线观看| 欧美懂色综合网| 人妻日日干| 东京热一区二区三区四区五区六区| 精品一区二区三区蜜桃臀www| 啊啊啊啊啊啊啊啊在线观看| 老司机射| 国产极品久久久| 国产传媒日韩| 99色天堂| julia ann久久| 国产精品直播在线观看直播| 一区二区 韩日AV| 老熟妇一区二区三区| 特级特黄一级毛片免费| 久久啊哟| 伊人久久AV诱惑悠悠| 这里都是精品在线观看| 日本久久999| 久久成人国产精品| 99999精品视频| 久热最新在线杭州| 人人扣人人操| 妇女乱色二区| 国产精品爱欲| 天堂精品小草| 中文AV制服乱伦| 成 人 影视 一区 二区 三区 四区| 欧美春色| 色噜噜狠狠色综无码久久合欧美| 欧美与日韩97| 国产精点久久久成人| 日本久久999| 免费精品人妻一区二区三| 久久久久ab| 欧洲色综合| 日本 欧美 国产一区| 啊操爽品善一区二区三区| 亚洲一区操| 人妻酒店出差被中出免费在线播放| 国模无码人体一区二区三| 99国内精品| 翔田千里AV无码秘 三区| 青娱乐 成人娱乐在线| 2020久久免费视频| 91色鬼| JuliaAnn丝袜熟女系列| 又大又黄国产| 亚洲成人性爱网站在线播放| 大香伊人在线一区| 人妻丰满熟妇一区二区三| 亚洲免费97免费| 乱伦图av| 91精品在线播放| 玖玖视频在线资源一区二区三区| 久久夜夜| 五十路熟女工口 | 91欧美经典| 五月丁香久久| 精品欧美不卡在线播放| 中文字幕日韩人妻视频一区二区三区交换夫妻| 国产一区免费午夜视频| 91国产在线精品| 无码国产精品午夜不卡(| 少妇贴图| 人妻一区二区三区| av绯色| 亚洲欧洲日韩中文字幕一区| 久久久久久中文字幕中文字幕最新| 九九综合九九综合| 精品国产91久久久久久一区黄无| 青青在线视频日韩欧美| 国产精品九9| 日韩精品在线观看观看| 热G综合热G中文| 欧美日韩情色一区二区| 久久久久亚洲熟妇熟女| 91男人天堂网| 欧美亚性天堂| 天天激情综合站| 欧美日日人人天天| 不卡人妻少妇精品毛片一区23区视频 | 九九玖玖精品| 盗摄女人妻在线| 日韩欧美日韩| 欧美日韩国产人人| 男人的天堂亚洲| ji熟女.com| 欧色网址| 白丝jkav| 东京热亚洲一区二区| 天天日天天搞天天干| 91热| 欧美国产一区二区三区麻豆传媒| 日韩探花精品在线视频| 美女91网站| 亚洲素人综合| 国产污视频麻豆传媒一区二区| 国产呦精品一区二区三区下载| 超碰97久久| 色婷婷一区二区三区久久午夜| 九九天堂| 久久这里只精品99re66图| 男女猛烈无遮掩视频免费软件| 91综合天天看| 国产熟女精品区| 97人人爱人人做人人乐| 色婷婷视频| 日本一区二区成人在线| 日韩强奸av| 9丨久久九九九| 久久中文字幕女同性恋一区| 青青草视频导航官网| 人妻丝袜无 码视频专区| 免费在线黄片视频| 色综合V| 小说区 图片区色 综合区| 91久| 97射欧美| 加勒比五月天| 91麻豆天美传媒HD| 不卡超碰护士AV在线免费播放| 国产做?爰片久久毛片?片美国| 蜜乳成人AV| 国产肏逼网站| 欧美人黑A片无码免视费| 蜜汁欧美| 日韩综合色网| 任我爽在线视频免费观看| 二级久久网| 一区麻豆 高清中文字幕| 红杏大香蕉| 超碰99在线| 婷婷激情五月天小说网| 色嗨嗨在线| 中国zzijzzijzzwww精品| 极品综合| 久久久久久一日韩字幕无码| 啪啪啪东京| 欧美日韩午夜精品一区二区三区 | 91天堂视频| 无码一区二区三区四区五区六区七区八区九区十区视频 | 国产精品91ai| 97中文字幕色| 青娱乐 成人娱乐在线| 亚洲欧美大香蕉| 久热9| 婷色五月| 激情文学网伊人| 日韩亚洲美州欧洲综三区一品在线| 免费AV播放| 99综合| 日韩精品 资源| 欧美综合骚| 亚洲男人的天堂AV| 天天干人妻| 超碰伊人在线| 久久久九| 超碰在线一区二区三区| 黄色视频高清无码网站| 网站A V在线| 超碰无码加勒比| 十八禁成人网站在线观看| 中文字幕在线观看二区三区| 久热9| 日本美女性生活久久久久久久 | 91精品国产日韩欧美综合| av爱爱爱| 亚洲激情在线观看一区| 操逼天美3区| 久久无码电影| 丁香五月偷拍| 一品道视频一区二区三区| 99久久这里只有精品| 黄总AV色图| 精品欧美日韩在线观看| 久久粉色| 极品另类| 亚洲色系另类精品国产| 留下AⅤ黄色片| 久超碰在| 密臀AV在线| 怡红院亚洲怡春院av| 麻豆精品.欧美精品.日韩精品.| 91操操操操| 欧美96精品在线| 麻豆国产视频精品观看| 日本免费专区| 六月天婷婷| 成人A片男人的天堂| 精品人妻一二三四区视频| 精品人妻一区二区三区免费视频| 少妇被c 黄 免费观看| 手机在线中文字幕国产| 999国产精品999| 射丝袜高跟鞋99| 啊啊啊啊啊啊啊网址在线观看| 射综合网| 国产精品ⅴ无码大片在线看.| 9久久精品| 青青草日本无码| 一二视频神马久久传媒| 欧美一区二区男人天堂| 国语av最新自产拍在线观看| 久妇网| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 亚洲中文sv| 亚洲一区日韩精品| 中文字幕在线观看视频www| 久久免费精品96| 人妻少妇久久中文字幕一区二区 麻豆| 色狠狠 - 百度| 亚洲国产综合久久久性感熟妇| 久久久久幕乱码| se吧提供国产乱老熟视频胖女人| 99视频精品| 97就爱干| 东京热视频网| 黄色一区二区秘书性感| 亚洲A曰本VA欧美VA视频| 国产乱码精品一区二区三区四川| 超碰亚洲97| 久久久久久中文| 国产精品盗摄 偷窥盗摄| 久久女人一区二区三区| 九九九九九九免费视频| 久久久久久久久久久免费精品 | 日韩无码服务区| 免费自拍三级综合| 97二区四区| 欧美精品系列| 欧亚性爱在线视频| 中文字幕视频在线观看一区二区| 亚洲天堂少妇| 国产操逼逼网| 国产丰满少妇久久久精品影院| 日本精品一区二区不卡| 国产高清成人传媒影视| 亚洲91网站| 日韩黄片影院| 亚洲精品丝袜-不卡成人免费……| 91国产丝袜美女| 蜜乳av一区二区| 色哟哟-国产专区| 校园激情狠狠四射| 极品尤物自安慰| 天天色怡春院| 26uuu欧美日韩| 国模限制级电影| 亚洲天堂男人| 国产不卡精品91| 97这里只有精品| 人人操人人插人人摸人人干| 东京热av男人的天堂| 免费av在线播放二区| 精品人妻一区二区三区-国产精品| 亚洲精品熟妇1区2区3区。| 中文字幕成人理论在线| 欧美一区二区三区成人性生活| 色官网色综合| 精品一区二区久久| 九九热九九| 欧洲精品二区| 久久国产视频性吧| 九久9精品| 在线啊啊啊啊| 2019天天干| 日韩熟女精品无码专区一区二区 | 东京热大香焦| 特级丰满少妇一级AAAA爱毛片| 色777999综合| 97五月天| 欧洲在线性爱视频| 在线观看A啊啊啊| 国产精品视频自拍在线| 亚洲日韩欧美一区二区| 日韩成人性日韩成人性爱视频在线免费观看 | 美女诱惑在线一区| 亚洲一卡2卡3卡4卡乱码网站| 欧美爱国产综合、| 熟女精品一区二区三区| 夜夜骑夜夜操| 97爱免费插| 三男一女不戴套的A片| 一牛一区二区三区久久| 亚洲少妇综合在线播放| 国产精品天干天干综合网麻豆| 婷婷激情五月天小说网| 中文字幕青青草| 精品国产网站| 欧美成人A天堂片在线观看| 人妻大香蕉| 欧美亚性天堂| 都市久久精品激情亚洲| 丁香7月婷婷| 中文字暮97| 久久久久久久亚洲Av无码| 人妻美腿丝袜日韩| 狼人综合婷婷激情四射 | 色综合99999| 精品一区二区啪啪啪| 国产AAAAAABBBBB| 九九免费影片| 999久久久九| 欧美黑人精品一区二区| 欧美色偷偷| 久久久精品视频欧州站| 伊人影院在线理论播放| 亚洲精品啪视频| 欧美色999| 欧美青青草视频| 18一区二区三区| 五月丁香社区婷婷日韩欧美精品影院| 天堂无码| 后入式五六区| 亚洲男人的天堂一区二区| 不卡一区二区日本视频| 亚洲欧美不卡线| 曰本道人妻久久久在线不卡色视频| 欧美日韩99精品麻豆传媒| 久久久久久国产手机AV| 97欧美综合| 欧洲亚洲综合| 综合久欧洲| 国产乱人伦AVA麻豆软件.| 中国农村熟妇毛片视频| 欧美78P| 久久久男人的天堂| 亚州色站 日韩电影| 人妻久久久久久| 黄片无码在线制服| yiqicaoav| 精品人妻一区二区三区四区| 无码人妻精品一区二区三区九九| 18一区二区三区| 五月丁香| 精品超碰国产| 国产极品美女高潮无套在线观看| 女欧美一区二三区| 狼人狠干| 国产美女91| 欧美成人国产精品| 久久大线蕉一区| 亚洲国产精品乱码在线观看| 岛国色情视频在线观看| 青青草中文字幕| 羞答答AV中文字| 色阁阁AV综合网| 91超碰碰在线| 美女诱惑在线一区| 青青操在线亚洲视频观看欧美在线 | 国产女人视频三四五区| 久久国产乱子伦精品免费女,网站| 亚洲欧美天| 国产女主播视频在线观看| 天堂精品小草| 国产日韩精品一区二区三区| 久热色情精品| 五月天色综合| 久久婷婷影院| 午夜男人一级A片7777| 手机在线看片免费人成视频| 乱欲一区二区| 中文字幕交换人妻| 人人操人人插 - 百度 - 百度| 亚洲欧美一区二区网址| 热99这里有精品综合久久| 99视频自拍区| www.91视频网| 超碰色老头| 1024精品在线| 九热中文字幕| 免费成人自拍视频在线| AV中文字幕三四五| 男人天堂2030| 欧美综合网在线| www亚洲欧美| 丁香九月婷婷| 欧美AAAA黄片| 蜜臀久久99精品久久久电影| 男人的天堂 在线一区| 亚洲色图殴美色图激情乱伦| 91色拍| 99re在线| 日韩av无码网站| 亚洲欧洲中文日韩女优乱码| 精品毛片av一区二区| 激情网色| 日韩去日本高清在| 久热这里| 澳门人妻久久| 中文幕97| 日韩高清一二三| 亚洲 欧美 日韩另类 麻豆| 97超碰欧美精品| 亚洲无无码αⅴ每日更新| 中国少妇XXXX做受| 2020国产精品| 9999伦理视频| 人妻黑丝袜电影| 91精品导航| 欧美偷拍区|