亚洲有码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
返回資訊列表
男人天堂.AB| 偷拍欧美激情| 成人小说视频在线精品欧美| 国产精品白领在线观看 | 欧美偷| 亚州 综合 色图| 天天做日日做天天欢。| 日韩三A大片在线观看| 少妇高潮一区二区三区在线| 超碰地址97| www.夜夜操| 区一二区日韩亚洲乱码av电影| 精品人妻一区二区视频| 欧美日韩另类激情图片| 欧洲精品区| www.AV有限公司一区| 国产激情片在线观看| 亚洲无码精品AV久久久| 青青五月天| 国产一区二区三区,在线观看观看| 97天天摸天天碰| 亚洲国产婷婷在线播放| 大学生口爆吞精| 精品久久无码午夜福利| 国产成人亚洲精品无| 蜜汁欧美| 爱爱60秒免费视频| 欧美亚洲一区二区久久久婷精品大包诱| 国产操偷| 日韩欧美中文日韩欧美色| 九九综合九九综合| 91激情| 人人妻人人爽一区二区三区| 天天久久久久久| 成人热久久精品| 久草精品国产蜜臀| 日韩黄片视频试看| 国产精品女生av| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 久九9精品| 91欧美性| 熟妇一区,二区,三区。| 激情视频图片| 夜夜爽夜夜操| 人人操人人操人人人操| 国产精品麻豆视频网站| 欧美麻豆成人同性GⅤ在线| 性色av蜜臀av色欲aV| 欧美日韩性爱电影在线| 超碰无码加勒比| 亚洲欧洲日本精品中文a∨| 日韩成年人性爱视频| 清纯唯美亚洲| 亚洲色 国产 欧美 日韩| 尤物网址| 2024人人操人人摸| 美女91av| 婷婷激情四射| 99久久亚洲精品无码毛片潘甜甜| 欧美系列在线一区二区| 日韩精品 资源| 日本97久久久精品| 91超碰人人操| 夫妻四区五区六区| 亚欧操逼片在线观看| a啊啊啊啊啊啊啊啊一区二区| 天天综合~91| 亚洲av资源| 91美女网站| 91伊人久| 久久久久久大| 欧美色图片欧美色图| 欧美顶级黄色大片免费| 偷拍 欧美 日韩| 午夜福利国产欧美日韩夜夜| 淫荡少妇免费| 91蜜臀熟女| 美女大乳久久久久久久女人18| 熟妇艹鸡八| 91色s| 婷婷伊人五月| 国产激情视频在线观看| 99青青草国产视频| 久久97视频| 热思思免费视频| 国产精品自产拍在线观看社区| 女人久久久| 日本操逼视频免费| 丁香五月色| 欧美亚洲成人在线一区二区三区| 亚洲欧美另类图片| 操B在线观看| 人妻在线臀日韩| 九七人妻在线| 国产妇女精品视频青青草| 亚洲色91C| a'v在线资源| 亚洲二区精品在线观看| 成人久久精品| 熟妇综合一区二区三区| 色综合色色| 物业黑人 AV一区| 伊人一级免费黄片| 大香蕉免| 2017av无码免费无线播| www.99热| 蜜桃传媒视频第一区入口在线看| 黄在线| 婷婷激情一区二区三区俺也去| 精品视频一区二区| 国产欧美亚洲精品a第2页| 精彩视频日韩| 欧美日韩精品一区二区三区高清| 日韩免费三级黄片电影| 夜夜骑天天燥| 男人的天堂一区三区| 夜夜嗷嗷一区二区| 国产高清无码一区三区二区| 91性生活久久久| 一级性爱视频免费观看| 欧美精品丝袜久久久中文字幕| 中文字幕一品色图| 懂色AV蜜臀无码精品APP| 成人一区二区三区四区| 天堂无码精品国产久| 亚洲情色图片区| 最近2018中文字幕在线高清第一页| 亚洲性爱高潮影院| 亚洲欧美另类激情小说| 天天日日日射| 一级毛片久久久久久久女人18| 亚洲精品欧美专业| 久久性爱精品一区| 一级黄碟| 92人人操人人| 黑人精品欧美一区二区蜜桃| 亚洲精品一区中文字幕乱码| 夜夜性| 久久婷婷伊人| 天天综合亚洲综合| 色爱综合网欧美| av最新免费中文字幕| 欧美日韩国产电影| 中文精品一区二去| 丁香7月婷婷| 亚洲日本成人动漫| 亚洲天堂五月天国产| 亚洲不卡av在线| 操操操五月天婷婷丁香影院| 岛国不卡超碰护士AV在线播放| 一区二区三区 日韩欧美| 熟女熟妇一区二区三区视频| 97色伦欧美| 国产精品国产亚洲区艳妇糸列| 久草毛片电影怡| 国产大学生口爆吞精合集| 国产AV线| 色噜噜综合在线| 日韩AV无码网站| 激情四射五月天| 色婷婷五月综合激情中文字幕| 九九草| 搞中出视频在线观看| 操逼国产免费| 97超碰超碰| 91AV天堂| 久久黄色网址| 伊人女女资源在线观看| 黄色视频高清无码网站| 日韩干B| 嗯啊不要啊啊在线观看视频| 午夜国产成人福利视频| 国产精品午夜福利亚洲综合网| 色九九综合AV| 中国AAAAAA黄色片| 18+91网站| 久草精品国产蜜臀| 熟女精品一区二区三区| 黄片直播三级黄片两女一男| 国产成年女人免费视频播放a| 国产精品午夜精品| 九99久久| 国产午夜视频| 欧美一级欧美三级在线观看| 亚洲少妇色| 亚洲综合中文字幕有码 | JIZZJIZZ国产精品喷水| www.av在线视频| 97在线视频观看| 亚洲少妇免费视频\| 欧美操逼视频二区| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 中文字幕第7页| 69综合网| 人人干人人搞人人摸| 91人妻视频| 国产一区二区三区影片| av无码av无码专区| 人妻在线大香蕉| 五月丁香综合啪啪| 日韩操人| 天天拍天天操| 91蜜臀在线久久久久| 六九九九| 中文字幕乱码人妻一区二区三区,99精品| 一区二区三区 丝袜 高跟 美腿 | 亚洲自拍天堂| 狠狠操夜夜| 性爱视频无打码在线观看| 激情另类激情| 99re99在线视频| 亚洲精品97在线| 欧美一级黄色18片免费看| 日韩三A大片在线观看 | 粉嫩绯色AV一区二区在线| 欧亚性爱在线视频| 在线岛国新天堂8| 免费观看日本操逼视频| 亚洲欧美国产中文视频| 黄色免费网| 亚州操操穴网| 涩爱AV在线| 91久青| 日韩一级二级| 人人摸人人干| 综合熟妇一区二区三区| 狠狠爱夜夜干| 蜜桃臀一区二区三区久久| 亚洲国产中文字幕| 久久久久久免费电影| 人妻激情在线视频| 大香蕉中文aV在线| 干B| 人人爱人人操人人性| 日韩精品字幕| 欧美日韩性爱电影在线| 国产欧美一级在线观看| 日韩一区二区三区四区五区| 日韩av影片在线观看| 中文字幕av亚洲在线| 99热最新网址| 亚洲、日韩、综合、另类| 九九九九九九成人| 国产av色网| 97天天| 九九九热| 欧美日韩性爱无码| 95人妻爽爽人人做人人澡| 亚洲A色| 亚洲精品久久久久久久久豆丁网| 天天天天天天天天综合| 97免费视频在线观看| 国产美女在线精品免费看| 嫩草一区二区在线观看| 久九干| 亚洲在线观看| 亚洲欧洲综合成人av一区| 精品人人插人人操| 欧美精品另类人妖xxxx| 俺也射| 亚洲国产综合图区中文字幕| 国产网红精品| 懂色AV一区二区三区| 国产中文日韩欧美一区二区三区人妻丝袜美腿| 国产999精品久久久| 性色生活片久久毛片婬片免费放女人一级毛片| 久久久中文| 91国产美女丝袜足交精品视频 | 日本天天人人狠狠在线日美女| 大香蕉综合| 欧美亚洲系列| 日韩天天本| 亚洲情色欧美| 国产区性爱在线视频秋霞豆| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 97超碰总站| 亚洲操操操无码| 午夜一区二区三区国产| 国产精品午夜高潮呻吟久久av| 久久超碰久| 懂色av中文字幕一区二区三区天美| 啊啊嗯嗯好爽| 色老汉色| 嗯嗯啊啊好爽| 亚洲色图激情小说| 精品国产乱子伦一区二区三区,精品一| 日本成人A片网站| 日日日日日| 日本道人妻久久久在线不卡色视频| 欧美偷拍区| 很黄很污的免费网站| 国产2.3.4区| 日本精品中文字幕视频| 99爱久久视频频| 欧美97在线欧| 国产久久久9999| 97超碰欧美精品| 中文自拍欧美影视| 激情婷婷丁香| av国产无码| 啊嗯嗯啊好大好爽| 欧美国产日韩高清在线| 东北女人性交| 老鸭窝亚洲毛片| 97亚洲综合在线| 久久激情视频| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 岛国在线国产| 影音综合网| 欧美1区二区三区公司| 精品国产自在在线99| 97色碰| 插入综合网| 91熟女视频| 一本一道人妻久久一区二区三区| 一区二区三区四区五区久久久久久| 国产日韩无码一区二区三区久久区| 亚洲AV资源| 欧美九九99久久精品| 久久精品人人做人人看| 日韩中文字幕宗合在线| 五月婷婷色| 欧美日韩制服| 麻豆乱码久久精| 92性色国产午夜福利在线661| 国产精品肉丝自拍| 久久久免费的精品| 91狠狠| 久久內射| 精品色色| 色操逼网| 老熟女91视频| 久久AV色| 精品国产乱码久久久久久久久1| av亚欧| 东北女人| 亚洲一区深夜| 天天干天天燥| 无码78| 欧美午夜色妇色鬼| 丝袜美腿诱惑亚洲欧美视频在线观看 | 97超碰亚洲| 国产AV无码AV| 试看日韩黄片| 男人天堂无码| 五十路熟女工口| 日本成人电影资源网| 欧美97爱| 亚洲国产青青| 校园春色综合色| 亚洲国产麻豆一区二区三区| 乱伦一二三区| 色老牛| 熟妇人妻一区二区| 男人的天堂啪啪| 激情 欧美 亚洲 小说| 东京热,男人的天堂| 午夜欧美J进J出白浆流出久久久| 91neishe| 午夜国产成人福利视频| 视频黄色国产一级| 明星性猛交ⅹxxx乱大交| 麻豆色99999| 久久久久久久久久久久黄色 | av在线人气| 婷婷综合网| 夜夜青青无码影院| 加勒比人妻综合| 中文字幕97色| 嗯啊啊啊轻点视频 | 亚洲不卡三级手机播放| 久久男人的天堂| 91亚洲黄色网| 啊嗯嗯啊好大好爽| 嫩草91| 97超碰久久色| 熟女高潮合集-永久久久-成人AV| 玖玖97综合 | 99天天超碰| 97天天搞在线| 任你艹| 精品少妇一区二区三区在线视频| 性爱乱伦网址| 第一高清av中文字幕| 嫖老熟女A片一二三区| 成人av在线播放| 蜜乳视频网站| 日韩成人精品| 日本道久久综合色色| 国产白丝精品在线观看| 美女裸体无遮挡永久免费观看网站 | 人人澡人人干| 国产呦精品系列在线观看| 97在线观| 久久亚洲国产成人| 人人么人人操| 成人麻豆av电影网站| 人人操人人摸人人看人人干| 精品久久久久久中文| 国产AV激情无码久久无码| 秋霞一级A片黄色视频| 亚洲欧洲精品视频发布| 97人妻免费中文字幕| 亚洲欧美激情在线视频| 欧美 亚洲 偷拍自拍| 中文字幕在线观看二区三区| 国产精品久久久亚洲一区| 精品一区二区三区蜜桃臀赵总| 尻女朋友一夜| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 95人妻爽爽人人做人人澡 | 激情综合网五月婷婷| 激情小说五月天| 天天天天干| 久久国产精品,久久国产| 射丝袜大香蕉| 我爱操| 亚洲爽图| 天天日天天搞天天干| 国产一区二区三区精品观看啪| av资源在线播放天堂| 嗯嗯嗯嗯啊啊啊好紧好大| 97视频观看| 日韩不卡一二三四| 少妇色| 国产一区二区三区久久久精品| 亚洲蜜桃V妇女| 99色热| 夜夜福利| 97在线视频免费看| 日韩Va亚洲va欧美Ⅴa久久| 五月综合色| 欧美熟妇人体| 少妇熟女一区二区三区| 北约熟女超碰| 久久久久久91香蕉国产| 免费男人的天堂| 国产传媒午夜理伦精品| 大香蕉亚洲中文| 99精品丰满人妻| 污色区网站| 亚洲熟女av日韩熟女| 亚洲色性情三级| 欧美激情内射| 色情乱伦AV| 97色五月天完| 日天天九九天堂666| 在线a亚洲视频播放在线| 91Chinese在线| 97久久久久久久精| 国产日韩美女小穴视频网站不卡| 在线强奷到舒服的无码视频 | 久久精品一区二区三区蜜桃臀| 日韩欧美加勒比| 激情五月丁香五月| AV99热18这里只有精品| 国产精品久久久久久高清无码免费看| 亚洲性爱免费电影| 91色爽欧美| 国产在线综合福利网站| 床上啊啊啊一区二区三区| 国产精品白丝AV| 天天色天天干天天爱| 欧美午夜色妇色鬼| 狠狠久久手机视频精品| 久久熟女人| 人爽不卡视频| 97色色色| 天天操女人| 久久久91| 久久国产精品91| 亚洲国产美女久久久久| 玖玖综合.com| 超碰95| 欧美夜夜狠| 91成人18| 嗯嗯,好大,好爽,好骚| yw尤物av无码点击进入麻豆| 亚洲精品欧洲精品| 午夜亚洲WWW湿好大| 日韩少妇丰满亚洲| 久操凹凸视频| 人妻天天爽夜夜爽2| 精品超碰国产| 超碰97COm中文| 欧州色图区| 92久久| 久久综合久久综合人久久夜精品| 97色亚洲| 久久一二三四五六七八九区区| 久久久亚洲高清不打码| 亚洲日韩久久精品一区| 熟女乱伦二区| 亚洲人天堂| 老熟女区| 久久美女福利是上海美女| 欧美,日韩,中文,另类| 密桃99999| 久操精品| 99re在线视频国产| 亚洲第一黄色av网站| 任我爽在线视频免费观看 | 蜜臀无码一区二区| 性吧在线视频| 欧美天堂在线| 夜夜骑操视频| 99久久这里只有精品| 26uuu成人影片| 日韩精彩视频| 国产999精品久久久久久| 日本成人A片网站| 欧美色91| 91草草草| 国产在线不卡导航| 国产欧美日韩一区二区三区| 花花AV导航| 人人搡人人肉久久精品| 中文字幕精品资源在线| 久久久久久网址| 男人的天堂在线| 99热99re超碰精品| 婷婷丁香五月激情啪啪| 99亚洲国产精品色一区二区三区| 丁香六月婷婷综合| 日韩中文字幕国产| 男人的天堂网页| 亚洲丰满很很操| 九九热免费国产视频婷婷伊人五月 | 亚洲精品成人激情在线| 国产一区二区三区免费视频在性观看| 欧美色图20P| 日本不卡二三区| 日韩在线视频1234| 狠狠色婷婷| 亚洲乱码国产乱码精网站| a片久久久久久久久久久久| 久久久少妇诱惑精品视频| 天天日天天射天天干| 操逼操网| 人妻干天天| 欧洲在线性爱视频| 亚州性色| 国产精品伦理| 亚洲和欧美裸体美女双飞视频| 78综合网| 国产视频三区四区| 色婷婷狠狠18禁| 免费看久久久性性| 美女一区二区国产精品| 一类av片在线看| 日韩中文字幕视频| 一区在线精品中文字幕| 亚洲日韩天堂| 69一区二区三区| 亚洲丝袜二区在线| 激情四射婷婷六月天| 狠狠躁日日躁夜夜躁A| 亚洲色 国产 欧美 日韩| 日婷婷| 涩涩涩综合| 国产无码成人无码| 日韩欧洲操屄视频| 久操凹凸视频| 波多野结衣被操50分钟免费视频| 久操com| 亚洲无992tv| 亚洲欧美日韩中文播放| 三级日韩一区二区三区| 亚洲男人综合| 色就色综合| 日韩人妻 中文字幕| 欧美亚洲| 另类天堂| 99操视频| 久久久久久久久久久97| 秋霞午夜视频一区二区| 人妻爽爽啪视频| 麻豆传媒一区二区在线观看| 99精品综合久久久久五月天| 偷拍导航视频网站| TS人妖另类精品视频系列| 日B操| 久操在97| 一卡二卡三卡| 九九九九热| 久久久久久久九九九九九九| 日本一区二区不卡精品| 婷婷综合激情| 天天综合欧美综合| 中文字幕无码不卡啪啪| 国产视频第二页| 伊人一区二区在线播放| 激情抓乳插进去啪啪啪日韩| 国产成人亚洲精品无码古代早漏男| 日韩欧美经典在线观看| 日韩精品99999| 伊人一区二区三区| 狠狠爱夜夜| 涩综合导航| 久久久久9| 男人的天堂欧美| 亚洲国产亚洲天堂| 日韩欧美亚欧在线视频| 免费黄色A片| 屌逼麻豆| 999久久芭蕾| 亚洲人天堂| 中日韩欧美精品无码AⅤ一区二区| 久久久久成人蜜桃精品| 欧亚日韩三区| 大学生美女口爆| 日韩人妻无码专区| 插老姨肥穴| 人妻久久一区二区三区| 亚洲国产高清福利视频| 欧美亚洲激情小说| 色欧美色交综合| 中文字幕,人妻,日韩| 99综合| 91网站在线播放| 肏逼视频日本| 精品一区二区啪啪啪| 人妻 欧美亚洲| 肉动漫无遮挡h在线观看| 婷婷色综合| 97在线视频观看免费| 人人做,人人操,人人摸| 欧美精品另类人妖xxxx| 蜜臀99精品国产高清在线观看| 91成人高清在线观看| 欧美性猛交美女自慰91| 欧美亚洲美少妇一区二区| 视频一区二区免费在线| www.狠狠干.coom| 日日骚av| 久久激情视频| 3P丝袜熟女 色综合| 久久久久亚洲?V片无码V| 情色五月天久久久| 秋霞操逼片| 天堂九九九九九九九九九| 亚洲精品欧洲色| 天天爽天天| 婷婷九月丁香| 久操热| 美女爽到高潮91| 天天草天天干天天日| 国产美女高潮叫床视频| n1038 一二三区| 亚洲精品自拍| 老熟妇综合| 一区二区三区美女超清| 欧亚不卡| 在线观看AV片| 亚洲熟女一区| 国产强奸超碰AV| 亚州黄站| 亚洲夜夜欢无码一区二区| 96国产精品| 日本熟妇一区二区三区| 天天亚洲| 亚洲淫乱骚妇AV| 欧美另类精品xxxx| 欧美体内射精| 午夜天堂精品久久久久91| 日日夜夜摸| 91在线美女| 欧美精品成人在线播放| 青青草久久在线| 久久99午夜精品一区人妻| 久久亚洲日韩熟女精品| 欧美专区在线| 天天看天天干| 97超碰欧美手机在线| 清柠毛片| 三级精品三级在线观看| 日本顶级天天操狠狠操夜夜操中文字幕| 一区二区三区看视频| 五月色丁香| 久久 国产 无码| 亚洲欧美日韩国产丝袜自拍中文| 六月色色| 中文字幕55555| 丁香六月东京热| 亚洲第91页 | 久久女人一区二区三区| 欧洲人妻视频| 97一区二区蜜臀| 不卡一区二区日本视频| 国产9熟妇视频网站| 色婷婷在线视频| 2025年A片视频精品| A男人的天堂| 综合色99| 九月激情婷婷| 这里只有精品97| 色婷婷蜜臀av| 激情五月天色色网| 国产乱伦亚洲色图高清无码| 日韩干B| 神马视频久久久久久| 久久五十路熟女人妻| 亚洲图片欧美另类综合免费视频大大香| 丁香九月激情| 91丨豆花丨熟女| 国产精品久久久午夜夜伦鲁鲁| 日本在线不卡123| 91亚洲黄色网| 伊人国产视频| 啊啊啊不要好疼视频| 国产特级毛片AAAAAA高潮流水| 日日摸日日碰夜夜爽视频| 91超碰碰在线| 水澄无码AV| 中文字幕黄色片| 日韩亚洲中文字幕在线| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 91亚洲黑人| AV污污污污| 久久久久久人体| 97露脸精品丝袜| 少妇超碰在线| 婷婷伊人网| 美女极品一区二区三区| 92性色国产午夜福利在线661| 黑人粗大V S日韩女优视频| 超碰爽人妻熟女Av| 伊人AAA| 久久精品国产亚洲AV高级北京| 26uuu成人影片| 亚洲成人ab| 97草草| 夜夜操中文字幕| 超碰性爱97| 91亚洲精品青草| 国产成人无码网站在线视频| 俄罗斯一区二区视频在线观看 | 熟女人妻一区二区三区| 国产女人与拘做受视频免费| 国产在线视频午夜精华在| 久久精品无码一区二区三区| 97超色| 青青操日韩| 日韩黄色小说| 久久精品中文| 韩国嫰模上门援交视频| 大香蕉综合久久| 亚洲色情在线影视| 超碰人妻中文在线| 亚洲精品欧洲精品| 欧美变态激情网| AV在线资源| 97爱b| 97超视频在线观看| 91天堂丝袜美腿| 国产超碰欧美| 亚洲老司机123专区| 男人的天堂色偷偷青青草视频婷婷网| 久久久久性熟视频| 艳美熟妇先锋一二三区| 综精品久久久aaaa| 青青草五月天| 吉川爱美亚洲二区在线| 土豪酒店各种姿势玩弄极品幼稚| 欧美韩国你懂得在线 | 色婷婷国产精品一区在线观看| 思思热国产高清| 青青操网| 精品综合久久久久久五月天| 亚洲密乳AV| 太久视频| av天天在线观看| 久久欧美1卡2卡3| 好屌色综合| 欧洲精品一二三在线| 激情五月天校园春色网| 人妻少妇无码 | 一级免费啪啪片| 亚洲色吧网| 高树玛利亚无码流出| 丝袜美腿校园春色| 疯操AV| 秋霞午夜成人福利片片| 26uuu偷拍亚洲欧洲综合| www网站黄| 精品超碰中文在线| 精彩国产视频播放1区2区| 久久久久久少妇| 后入国产| 青娱乐国产盛宴视频| 中文字幕av乱伦| 操香逼| 亚洲情色综合网| 欧美色图在线视频少妇| 欧美激情综合网| 欧美日韩国产三级黄色| 日日夜夜狠狠| 亚洲限制级| JuliaAnn丝袜熟女系列| 91伊人久| 一区二区偷拍拍视频| 97自拍一区| 骚货操死你| 五十路六十路素人熟女| 色色色色网站| 欧美亚洲美少妇一区二区| 国产精品白丝www| 成人av在线播放| 牛牛aV| www熟女乱伦com| 五月婷婷AV| 蜜臀久久在线视频| 好舒服视频| 91老熟妇| 中文字幕av乱伦| 久久久久久裸体| 欧美色综合网| 操逼操逼逼操操逼91| 激情综合亚洲| 九热超碰| 美女上床网站| 日韩成人无码| 日韩高潮一区| 自拍啪啪视频| 亚洲第2页| 一直超碰| 日韩福利综合一区| 嗯嗯,啊啊,国产精品| 呻吟 欧美 日本 中出| 操操逼操操逼操操逼逼| 午夜成人福利影视| 在线中文字幕| 久久久久久久久久久人妻| julia国产在线| 国产精品亚洲美女久久久久| 96久久久精品| AV网站高清无码在线观看| 亚洲自拍欧美国产首页网曝| 中文字幕一二三| 天天躁日日躁AAA片李宗瑞| 精品久久大胆人体| 韩日性爱av| 黑人中出21连凳花野真衣| 久操91视频| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 成人精品视频| 日本精品网站在线中文| 天天干天天日天天射黄色片| 中文字幕蜜乳av| 久久亚洲影院一区二区| 一区二区乱码福利| 97人肏| 中文字幕三四区| 美女尤物福利视频| 精品熟女呻吟久久91| 在线观看AV不卡| 狠狠操狠狠操操| 亚洲日韩青青草色月| 久久久亚洲Av| 欧美91精彩| 亚洲最大网站av| 久肏视频字幕| 人妻少妇一区二区| 男啪女色黄无遮挡免费观看| 久热精品色情| 不卡一区二区日本视频| 青青三级视频| 欧美亚洲日本视频久久久 | 1024人妻熟女一区二区三区| 疯操AV| 亚洲精品三| 欧美激情激情xxxx欧美专区| 狠狠躁AV| 日韩欧美亚洲自拍偷拍| 麻豆精品A片免费观看| 欧美日韩一区二区三区四区蜜桃| 伊人午夜福利视频| 后X久久| 强奸乱伦AV一天堂网| 岛国999| 日韩在线观看中文字幕视频| 欧美大片91| 嗯嗯啊啊好疼| 淫妻综合网| 日本中文字幕不卡视频| 国产成人啪一区二区| 九九碰九九爱97| 强奸国产精品视频| 国产91丝袜 在线播放| 色欧美天天| 在线岛国新天堂8| 中文字幕伊人| 伊人AAA| 欧美大香蕉久| 欧美色爱综合| 免费观看网黄| 日产精品久久久一区二区| 久久九九一区二区三区成人| 国产精品久久久久久片| 粉嫩av平台| 亚洲日韩资源| 伊人精品视频| 99热亚洲| 操逼网站视频漫画国产| av网站国产主播在线| 2003天天干夜夜操| 四季AV综合网址| 99re视频在线观看这里只有精品| 久久久久久久久久久免费精品| 91女日逼| 超碰免费欧美7| 99九九久久| 久久久久久欧美精品se一二三四| 岛国视频一二三区| 亚洲色图91| 风间由美日韩欧美久久| 91美女在线视频| 人妻在线臀日韩| 久久久激情| 睡产熟女乱伦| 国产日逼视频| 波多野结衣AV无码一区| 9久久久久久| 天堂精品| 久久久久久久六六 | 欧美激情片一区二区| 五月天色综合| 婷婷九月色| 熟女字幕| 欧美熟女操屄| 人人摸.人人色| www.久久制服糖| 又大又大又大又粗爽高潮观看 | 13小男生GAY自慰脱裤子| 欧美日韩狠狠爱| 日本2020一区二区| 黑人粗大V S日韩女优视频| 欧美国产有色电影| 殴美综合色88| 色女99一级片在线观看| 天天看综合网| 亚州情色j区| 大香蕉伊人久久| 一二三区在线| 激情av| 激情一区二区三区在线观看| 99天堂网| 91亚·色| 97精品国产97久久久久久免费| 91老司机在线视频免费观看 | 97国产人人| 中文字幕丰满子伦无码专区在线视频最新| 精品国产乱码久久久影院| 欧美激情 亚洲色图| 国产成人啪一区二区| 亚洲欧美变态| 神马久久免费电影观看| 97资源站日韩| 天美传媒AV在线| 精品久久久久久中文字幕视频免费| 亚洲超碰97| 天天草天天日| 影音先锋少妇| 国产乱码精品一区二区三区四川| 国产理论视频在线播放| 日本污ww视频网站| 综合网色| 麻豆黄四叶草网站| 欧美色棕合| 欧日韩在线观看| 91在线丝袜| 传媒在线观看一区二区三区| 日韩欧美日韩| 亚洲国产成人7777| 亚洲精品啪视频| 国产热RE99久久6国产精品首| 超踫中文字幕| 人妻密肉在线观看| 黑人精品久久97| com 首页 18岁 禁区 女优 免费 精选 同城 | 精品人妻一区二区三区不卡断| 久久男人天堂| 国产视频一区二区三区在线免费观看| 亚洲交换| 亚洲中文字幕熟女少妇一区二区| 欧美区亚洲区偷拍区| 日韩黄色成人性爱| 欧美三级不卡| 欧美 亚洲 综合 制服 另类| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 91亚洲色图| 人看人人摸人人操| 久久久久久久少妇| 超碰视97中文| 国产在线视频午夜精华在| 天堂8在线新版官网| 九九久久一区二区三区| 激情小说亚洲图片| 日韩欧美天堂| 久久久久久久久9| 可以在线观看的黄色网址| 精品久久一区二区三区四区五区| 操亚州| 久九九九| 久久婷婷色| 今日头条成人一区二区三区四虎精品| 骚鸭AV| 国产操逼逼网| 久无码| www欧美91| 久久久久九九九| 国产美脚女优尤物在线观看| 3P丝袜熟女 色综合| 无码操逼视频一下| 天天摸,夜夜摸| 97爱碰| 久久久精品91八戒| 日韩操p| 蜜桃精品一区二区三区ww| 四虎av在线| 91碰超| 亚洲综合图文| 欧美国产婷婷久久| 韩国三级理论在线| 91天天c| 大黄片做爱的大的| 中文字幕版| 好爽视频在线观看视频 | 偷拍亚洲高清图片| 久久风骚城市人| 婷婷视频在线免费观看| 91亚州日韩高清| 欧综合网| 99色热| 色悠悠伊人网五月天| 操逼逼无码| 中文字幕一区二区三四五区日日骚| 91欧美大片| 人妻天天爽夜夜爽爽| 亚洲不卡三级手机播放| 骚逼高潮久久精品| 92久久| 激情五月婷婷综合| 国产丝袜啪啪| 国产www色在线观看| 性色av一区二区| 色婷婷激一区二区三区 | 亚洲同性aV综合| 天天拍天天操| 91艹| 精品超碰国产| 97Ai亚洲| 狠狠操狠狠| 人人操人人摸人人骑| 人妻熟女字幕一区二区| 校园春色综合网| 九九久久国产精品| 十八禁视频一区二区| 久久一本大香蕉 | 日韩丝袜高跟制服在线观看| 91人精品妻入口| 99蜜桃臀久久久欧美精品网站| 一区二区三区免费岛国片| 国产久久日| 亚洲av乱伦色图网站| 夜夜欢天天干| 欧美18禁91| 伊人五月天婷婷| 丝袜视频一区二区在线播放国产中文| 国产精品人人爽人人做可爱福利| 国产精品亚洲四五区在线观看| 久操操AV电影| 人妻少妇精品久久久| 日韩成人大片一区二区| 尤物视频新赏网鲜网色诱网| 动漫爆乳3D奶水一区在线观看| 少妇精品| 精品91摸| 日本黄色大片一级视频免费麻豆| 九九九九一级| 一块操欧美| 亚洲爽图| 老司机午夜福利视频一区二区| 色色色色电影网| 偷拍视频青青草在线视频| 久久超碰、| 国产精品久久久久久久无码AV| 久久久99999久网站| 亚洲精品色| 三级日韩一区二区三区| 99re在线视频这里只有精品| 超碰爽人妻熟女Av| 亚洲综合另类小说色区亚洲成av人片在www | 97天天| 久久999久| 日本一级性爱| 亚洲欧美综合| 久久av色| 五月丁香社区婷婷日韩欧美精品影院 | 一区二区三区四区免费视频| 国产精选视频| 中文字幕日韩国产传媒欧美精品| 丁香九月 婷婷| 婷婷人妻激情| 欧美页片| 91ise欧美| 91GD.COM| 亚洲蜜乳av| 人人搞人人插人人操| 97超碰国产亚洲精品| 天天综合网在线| 久草成人福利导航| 日本黄 R色 成 人网站| 免费人成在线观看网站品爱网| 九九九一二三| 精久久久| 夜夜 中文视频rt| 97视频在线观看高清资源| 一起草日韩| 99久久久久久亚洲精品不卡| 男人综合网| 美女十八禁| AV男人天堂网| 人妻出轨一区二区三区| 欧美亚性天堂| 天天爱天天操| 中文字幕国产| J?P?NESEHD熟女熟妇伦| 国产精品播放| 2000亚洲男人天堂| 亚洲综合影片| 嗯阿好爽好紧| 亚洲 欧美都市激情| www.婷婷| 激情综合五月天| 91在线精品| 日韩欧美亚洲一区二区三区影院| 国产精品干干干| 丝袜人妻av一区二区| 在线视频97| 操逼网站网站| 91亚洲影视| 亚洲 欧美 色图| 国产97色在线| 99超碰碰| 欧美日韩在线小说| 清纯唯美亚洲综合| 亚洲无码一区成人免费午夜| 97美日韩视频| 伊人骚琪琪亚洲天堂网站| 天天综合91入口| 久久αⅴ| 亚洲精品97久久| 人妻丝袜二区| 淫荡网址| 日本操逼视频在线| 日韩欧美日韩| 性爱网站一区二区| 久久青青草原免费视频| 国产精品探花色|