国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

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
返回資訊列表
欧美激情精品| 九月婷婷综合| 日本久久超碰| 精久久久| 亚洲色欲一区二区三区| 18禁免费视频| 狠狠爱夜夜| 天天爽天天干| 91人妻精华帖| 九九九九九九九精品视频| 男人天堂毛片| 97精品97| 综合日本女人伊人| 伊人久久大香大香线蕉中文| 免费A片三p视频| 久久9999| 超碰97玖玖爱| 欧洲色| 99久久久久久亚洲精品不卡| 亚洲美女精品九九视频| 日韩无码AB| 天天插天天干| 91久久国产综合久久| 在线视频日韩欧美国产| 日韩亚洲中文字幕在线| 少妇一级无码精品| 亚洲毛片基地专区| 亚州欧美在线| 91久久国产精品| 麻豆精品A片免费观看| 这里有精品| 亚洲成熟国产精品美女| 日本成人A片免费看| 国产精品一区二区三区在线| 亭亭在线资源| 蜜桃色院一区久久| 成人五月天色网| 大香蕉AV丝袜| 亚洲色图20p| 96精品在线| av资源在线播放天堂| 97人人夜夜精品视频| 免费国产视频| 蜜臀久久99精品久久久| 亚洲欧美黄| 天天操妹子| 中文字幕二区| 久久久国产护士丝袜美腿一| 熟妇激情| 亚洲春色欧美| 97视频在线观看免费高清| 日本2020一区二区| 欧美91精品国产自产| 欧美高清在线| 麻豆视频一区二区| 熟女人妻一区二区三区| 亚欧无码线免费观看视频| 最新制服中文第一页| 中文三一区| 久久女人| 久久精品国产Aⅴ| 五十路熟女人妻一区二区在线观看| 人妻熟女一区二区在线视频| 午夜免费福利视频一区| 色狠狠 - 百度| 97在线免费观看| 久草精品国产99| 亚洲啪AⅤ永久无码| 中日韩免费看男女操逼大全| 台湾一区国产高清在线| 天天日天天搞天天干| 日本免费中文字幕在线| 日操粉逼逼| 裸体美女免费看网站青草| 亚洲 图片 综合91| 亚洲欧美激情小说| 精品传媒在线一区| 精品午夜福利国产一区二区在线观看 | 亚洲综合在线视频| 久久成年精品| 亚洲天堂一二| 人妻精品视频一区二区三区| 最新的亚洲无吗| 综合五月天| 啊啊啊在线观看免费视频| 精品人妻一区二区三区视频| 国产久久久| 74成人在线| a网站免费观看| 嗯啊啊啊轻点视频 | 蜜臀99久久精品久久久久久| 欧差乱伦二三| 尤物网址| 亚洲一区二区专区-国产丝袜精品丝袜-成人AV| 超碰欧美97资源| 夜夜一区二区| 18禁久极品美女久久哦哟呀!| 欧美欧美少妇| 日本在线一二| 四虎884| 91人妻人人澡人人爽人人精品| 秋霞一集毛片观看| 色香阁在线| 国产suv精品一区二六| 一级毛片电影免费看| 久久婷婷综合国际产色怕| 啊啊啊啊啊在线观看网址 | 欧美综合自拍| 1024人妻| 日韩大香蕉AV影片| 婷婷色一区| 老熟女综合网 | 啊啊好多水| 91性片| 青青操狠狠撩| 亚洲精品不卡一二三区| 亚洲无码日韩电影| 91free福利| 久久精品中文| 国产黄片在线免费观看| 97色色国产视频| 日本道不卡| 影音先锋国产精品| 欧美激情 亚洲色图| 国产精品自拍xxxx| 97就爱干| 一级性爱视频免费观看| 97色五月天完| 国产品精品自在在线午夜免费| 欧美性爱伊人| 亚洲精品1区| 日韩欧美中文字幕搭讪巨乳美人妻视频| 少妇久久久久久久久| 高清国产av无码| 岛国不卡超碰护士AV在线播放| 午夜a成v人电影| 超碰爽人妻熟女Av| 少妇厨房愉情理伦片bd在线观看| 欧美中文字幕一区| 日韩字幕一区| 亚洲影视高清第一页| 脫衣舞一区二区三区| 一区二区三区蜜桃成人撸久久东京热 | 久久日本熟妇熟色高清| 久久免费精彩视频| 国产传媒日韩| 亚洲色性情三级| 久久久精品电影| 欧美日韩黄色片一区二区三区四区人与兽做爱 | 91oumei| 97在线免费看视频| 中文字幕在线观看AV| 亚洲天天综合| 欧美最大综合网| 精品人妻一区二区视频| 欧美亚洲特P| 深爱激情五月天| 91人妻人人澡人人爽人人精品| 久久午夜伦| 亚洲97综| 97日视频| 日韩在线观看中文字幕视频| 熟妇色99| 欧美另类丝袜熟女| 久久发布国产伦子伦精品| 色哟哟 日韩精品| 91精品丝袜久久久久久无码人妻| 激情黄色片在线观看| 求求你操操我| 一区二区三区黄色片a| 精品一区二区三区蜜桃臀www| 岛国艾薇凹凸视频天堂| 凹凸视频在线一区二区| 青青青草伊人精品| 99国产精品在线观看| 秋霞成人一级在线观看| 日本97久久| 久久av色| 青青草在线视频人人想人人上| 人人妻人人爽 97人人看碰人免费公开视频| 国桃视频产巨乳精品一区二区在线| 欧美人人AAA| 夜夜嗨视频| 欧美A√综合网| 国产有码一区| 久久极品一区二区| 草莓精品视频在线免费观看| 亚洲色图综合| 91欧美情色| 久久久国产精品人妻丝袜| 国产女性无套 免费观看| 秋霞午夜成人福利片片| 久久久亚洲精品中文字幕人妻| 99精品热| 国产无遮挡| 中文一区在线视频| 亚洲中文日韩欧美大香蕉视频| 超碰97丝袜| 色综合20p| 人妻酒店出差被中出免费在线播放| 一本道综合色图| 亚洲一级特黄大片在线播放91| 欧美性色网| 色欲久久99精品久久| 亚洲国产综合久久久性感熟妇| 十八禁视频网站| 色婷婷视频| 影音先锋少妇| 国产成人在线观看网址| 久久久久久加勒比| 日日骚中文字幕| 久操免费电影| 免费成人在线熟妇网| 少妇与黑人高潮在线| 99操碰| 久久久免费的精品| 91呆哥人妻| 亚洲AV无码国产精品久久久久| 中文字幕乱码人妻二区三区| 97无码视频在线播放| 精品九九九九九九| 综合自拍| 青青草这里只有精品| 亚洲在钱| 亚爽爽爽爽爽爽爽爽| 日本女厕偷拍| 色女99一级片在线观看| 国产青视频| 五月天综合网| 欧美激情色婷婷花野真衣一区二区| 欧美激情视频一区二区三区不卡| 神马视频久久久久久| 澳门人妻久久| 男生女生啊啊啊啊| 青青草在线视频播放器| 超碰97人妻自拍| 亚洲麻豆18发?| 亚欧美色图| 亚洲精品美女操逼| 麻豆尤物视频网| 亚洲情色视频| 襙一襙| 在线观看免费视频国产| 天堂8在线新版官网| 啪啪综合网| 先锋精品av色鲁| 人妻精品一区二区在线| 婷婷综合在线| 好吊妞转入那个网| 任你干在线视频| 2020中文字幕在线| 成 人 A V免费视频在线观看| 先锋影音av先锋一区| 欧美黄色大片在线观看 | 国产精品久久久| 人人操人人舒服| 亚洲高清在线| 情色五月天久久久| 天天舔日美女视频| 国产中文字幕在线点播| 久久久久免费少妇| 亚洲素人网| 日韩三级av片| 国产亚洲精品av一区| 九九热精品| 红杏大香蕉| 老熟妇综合| 欧美综色欧| www熟女乱伦com| 操逼操操操91| 日韩内射视频| 九九九九九精品视频| 岛国免费视频在线| 国产无套粉嫩白浆在| 亚洲棕合电彰| 91人人| 欧美成人性爱视频免费观看| 精品国产乱码久久久久久久久1| 日韩少妇在线视频| 操国产逼| 青青草国产欧美非洲黑人| 人人操人人操人人人操| 亚洲色图超碰在线| 少妇高潮九九九九九九九| 两女互慰AV高潮喷水在线观看| 国产原创剧情在线丝袜| 91爱看| 亚洲综合欧美| 五月天色图影视| 午夜精品久久久久久久| 一区操逼| 久久欧洲| 成人自拍三级在线观看| 素人美腿视频网站| 国产精品人妻无码久久久老鸭窝 | 亚洲第2页| 欧美18禁91| 91n欧美| 色色婷| 桑老女人九区| av天天在线观看| 果冻传媒A片麻豆熟妇人妻| 国产又色又粗又黄又爽| 亚洲国产精品久久久男人的天堂| 一本色道无码DVD中文字幕| 91操人| 91美女看B| 超碰色男人操熟女| 中文字幕人妻色偷偷久久皮 | 欧美日韩人妻婷婷一区| 搡老熟女老女人老熟妇免费视频| 久久女女| 99999久久久久9国产精品| 蜜臀一区二区三区在线 | 久久久91福利姬| 强奸乱伦av电影| 天天天做天天天爱天天天爽| 日本中文字幕在线电影| 欧美色图91| 久久久久免费少妇| 中文字幕国产| 亚洲色图亚洲| 亚洲成人妻日韩在线| 日韩一区二区三区四区五区| 人妻天堂三区| 久久久99999久网站| 熟女精品va中文字幕| 久久熟女嫩草成人片免费| 亚洲精品视频在线播放| 亚洲AV麻豆Aⅴ无码电影一| 久久久久密臀视频| 欧美后进式| 思思视频免费看网站| 亚州欧美综合| 四虎影库国产精品免费| 26uuu国产免费观看| 久久久亚洲精品中文字幕人妻| 免费看污网站| 国产CHASE男男GAYGA 毛多色婷婷| 欧美碰碰综合色| 熟女色图在线| 97网址www| 大香蕉专区| 日本不卡在线二区三区| 欧美综合777| 国产少妇与亚洲av| 伊人五月天激情| 亚洲网站一区二区在线| 日韩欧美麻豆| 无毛精品| 午夜欧美神马久久久久| 色99色| 精品人体无圣光凹凸| 久久久久成人网| 国产精品suv一区| www九九热| 久久亚州精品成人Av无| 色五月AV| 干B网| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 成人三级片无码| 国内亚洲高清无码| 先锋女优在线观看视频| 九九九九亚洲| 天天欧美| 99这里只有精品| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 中国AAAAAA黄色片| 欧美爱爱97| 在线欧美亚洲| 日本在线伊人啪啪| 美女诱惑久久| 天堂成人网| 亚洲少妇视频| 人妻精品一区二区| 日韩欧美女求操每天更新| 欧美性五月| 青青草久草AV| 欧美最大综合网| 超碰碰激情97+久| 大香蕉 222| 裸体女人草逼视频播放一区,二区,三区,四区,五区| 任你草| 91碰碰碰| 九九热男人天堂| 超碰99在线| a久久| 水澄无码AV| 国产免费一区二区三区最新不卡 | 夜夜国自区| 中文字幕色AV| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 91夜夜蜜桃臀1区2区3区| 一区二区三区国产精产| 都市久久精品激情亚洲| 欧亚乱色熟女一区二区| 一区二区激情国产熟女| 97色插| 天天舔九色婷婷| 亚洲色图国产另类| 97综合久第一页| 99AV| 乱欲一区二区| av九九| 蜜桃视频精品一区二区三区| 亚洲诱惑天堂| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 一级久久久久久久久久久| 92人人操人人| 男人的天堂,欧美亚洲另类国产日韩,日本高清一区二区 | 日韩人妻一区二区| 久干9操| 99性视频| 老熟女区| 国产欧美另类久久久精品课程| 花花AV导航| 无码动漫av中文字幕| 亚洲成a人片在线观看中文!!!| 99久久久久久久久| 800zy一区二区| 中文字幕乱偷人妻久久艾草网| 日本三级A片网站com| 色成人Www精品永久观看| 一区二区三| 人人操人人摸人人看人人插| 国内三级自拍小视频在线观看| 国产精品一二三免费网站| 久久国产视频专区一二三| 美日韩一二三区| 东北女人性交| 日韩av不卡在线看| 99热色这里只有精品| 欧美韩国你懂得在线| 蜜桃传媒视频第一区入口在线看| 伦激情人妻另类人妻| 国产精品第一页国产大屁股视频免费区i | 久操| 精品国产无码中文| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴| 天天看特黄的免费网站| 麻豆天美一区二区| 日本国产欧美高清在线| 九一综合精品视品av| 五月天欧美色图| a亚洲欧美色欲| 日韩久久激情精品| 加勒比日本在线| 欧美 亚洲| 丰满人妻一区二区三区大胸懂色| 日韩/97| 欧美性少妇| 无套内射人妻在线播放| 夜夜嗨av午夜成人| 人妻干天天| 天美av在线观看| 美女性91| 开心五月深爱五月| 传媒在线观看一区二区三区| 99精品久久久久久久婷婷| 91网18| 偷拍 欧美 日韩| 天天影视网综合少妇| 久久久青青草| 天天干美少妇一区| 欧美综合第一页| 国产高潮AA片免费看| 国产熟女自拍| 操逼逼无码| 97爱啪| 欧美黑人精品一区二区| 色九九综合AV| 欧美少妇性爱网站| 久草老司机| japan日本高清乱xxxx| 免费看污网址| 亚洲精品天堂久久A∨51成人漫| 国产精品网站免费| 久草免费福利在线播放| 国产av热热色| 国产树林里野战在线看| 青青草在线视频播放器| 久久老子无码午夜伦不卡| 狠狠97| 91狠狠综合久久久| 久久精品熟妇丰满人妻99| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 97超级色碰碰| 国产在线精品偷| 18精品一二区| 久操九九九九| 狠狠操官网| 日韩精品三级片长长久久| 色哟哟511老熟女| 久久久国产护士丝袜美腿一| 色色婷婷五月天| 97超碰超| 性色av一区二区| 免费在线黄片视频| 91美| 欧美亚洲成人在线一区二区三区| 乱老女人一区二区视频| 青娱乐休闲视频在线观看| 久久精品国产99国产精品亚洲| 亚洲av影音先锋| 亚洲综合色图欧美| 国产精品网站www| 99久久久无码国产精品性男| 亚洲精品九九九| 熟女网站最新| 好淫网一二三视区| AA特级绝黄| 少妇一区二区三区| 综合激情一一91| 中文字暮97| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 伊人丁香五月婷婷| 久久女人| 97国产精品久久久久| 亚洲 图片 综合91| 性色av婷婷久久一区二区点复制| 婷婷伊人五月| 97超碰9| 亚洲欧美日韩电影网站一区| 九九热免费国产视频婷婷伊人五月 | 亚洲午夜免费狠狠干| 操迟操逼在巾线Fre看| 亚洲丝袜少妇在线| 呻吟 欧美 日本 中出| 蜜臀av中字字幕网站| 久久性爱大全| 岛国激情视频软件| 日本成人在线不卡一区二区三区| 亚洲激情深爱文学小说网站| 91伊人影视综合| 久久久一区二区三区四曲免费听 | 亚洲AO在线| 思思99热| 97色婷婷| 日韩欧美经典在线观看| 看黄片视频免费| 性暴力欧美猛交在线直播| 美欧色综合| 中文字幕精品亚洲熟女| 久久大精品乱码视频人妻熟女| 九九精品美女高溯喷水| 免费观看欧美日韩操逼视频| 色五月综合网| 99久久婷婷国产综合| av无码精品久久久久| 伊人一区二区在线播放| 欧亚无码视频| 日熟女| 澳门黄片一香蕉视频| 中文乱码字幕观看| AAAA级日本片免费视频| 秋霞怕怕片| 亚洲欧美人妻| 欧美黄色手机在线观看| 亚洲国产成人精品999| www.av家庭乱伦| 蜜臀在线视频| 88xx成人精品视频| 亚洲97成人在线观看| 12一15性XXXX粉嫩国产| 亚洲成aⅴ人片不卡无码| 欧美福利视频啊啊啊啊| 欧美一区二区福利在线| 国产91啪| 深田咏美亚洲精品福利社| 国产一区二区欧美日本| 亚洲欧洲另类| 热久久91婷婷| 久久鲁夜| 色偷偷综合91久久噜噜| 美女t无毒不卡不卡| 农村妇女精品一二区| 91无遮挡| 被男人添B超爽视频| 亚洲美女 晚间男人天堂| 欧美变态激情网| 亚洲日本天堂| 97天天操| 亚洲欧洲综合成人av一区| 国产AV激情无码久久无码| 日本在线激情一区二区三区| 性爱动态120秒| 日韩中文字幕熟妇人妻 | 中文字幕av亚洲精品| 韩美日操逼| 亚洲成熟国产精品美女| 女同在线视频一区| 欧美亚洲日韩16色| 农村少妇久久久久久久| 欧美A片中文字幕| 国产精品久久久久久久黄无码| 人妻精品视频一区二区| 有码人妻系列| 9久9久9久9久视频网站| 操国产逼| 国产精品老师| 欧美夜色| 亚洲一区二区三区婷婷| 亚洲人妻在线一区| 四虎永久在线精品免费网址 | 一个人免费视频观看在线WWW| 色青青久久影视| 亚洲欧美天堂在线| 78精品在线| 亚洲一区二区三区不卡国产欧美| 婷婷综合| 97国产精品久久久久 | 蜜臀少妇一区二区| 天美麻豆黄色录像| 日韩精品字幕| 麻豆60秒| 青青草依人大香蕉| 国产成人欧美一区二区三区的国产| 久久五月婷| 天天操天天7| 久久久精品中文字幕爱豆| 久99热| 久久九操在线观看| 国产亚洲欧美每日在线| 精品视频久久久久九九九九9999| 青青草女人天天干| 91在线超高颜值国产| 黑丝91视频| 亚洲色人阁| 日韩AC| 中文字幕乱偷人妻久久艾草网| 操逼操2| 亚洲激情网一二三四区| 性高潮久久久久久久久久久| 亚洲第2页| 99只有精品| 人人看人人插| 色诱中文字幕| 日本人妻伦在线中文字幕| 成人夜夜爽| 日韩久射综合| 五月丁香综合激情| 日日夜夜骑| 99热最新| 中文字幕AV中出| 欧美视频在线视频免费va| 超碰在线1234区| 无码日韩人妻av一| 羞答答AV中文字| 被体育老师抱着c到高潮| 欧美一级专区免费大片| 日韩乱伦影音先锋| 天天爱综合网| 99啪啪视频| 久久久久女教师免费一区| 色婷婷丁香五月| 国产精品天堂| 熟女一区二区| 特级特黄一级毛片免费| 日本天天干天天搞一区| 五月天黄色激情视频| 超碰欧美97资源| 国产毛片精品一区二区色欲黄A片| 久艹免费| 江都AV在线| 国内精品久久人妻性色av| 亚洲Av噜噜一区二区三区妖精| 91精品女厕偷拍视频| 人妻天天爽| 99热综合| 91AV入口| 国模久久在线| 丝袜美腿欧美| 高清无码在线播放网站| 9997se| 嗯嗯啊在线视频| 激情小说图片亚洲首页| 夜色97| 色欧美天天| 日韩熟女操逼| 啊啊啊 在线| 99re3这里只有精品| 女人被男人桶爽视频网站| 性感美女91影视| 香蕉一区二区三区在线视频| 亚洲蜜乳av| 96久久久久久久| 99re只有精品| 中文字幕jul-617人妻熟女| 日本一级真人黄色性爱视频| 国产精品一区二区后入| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 精品十三区| 女人高潮大叫一级毛片| 亚洲性爱成人| 日本布卡一区二三区| 亚洲色9| 91久久久久久久久18| 操逼无码操逼| 亚洲欧美洲综合| 91精品婷婷国产综合久久竹菊| 日韩中文字幕二区| 精品成人亚洲午夜电影| 中日韓欧美高清| 欧美日本不卡| 天天综合香 ld视频| 色婷婷av在线观看| 中文字幕亚洲永久精品| 日本一级特级毛片视频| 人妻另类| 久久久96精品| 亚洲无限观看| 久久超碰亚洲人| 丁香五月婷婷基地| 国产吞精a级片激情电影| 久久亚州精品成人Av无| 亚洲牲交| 91第一页| 一区二区三区一亚洲中文字幕、综合区灬| 大香蕉在线免| 欧美天堂日韩三级国产传媒| 天天拍天天操| 亚洲九区| 日本道久久综合色色| 国产宅男宅女在线观看| 波多野结衣AV无码一区| 日日摸天天爽夜夜欢| 国产乱青青草久久| 偷拍超碰| 国产乱婷婷精品二区三区| 亚洲aV性爱| 亚洲AV无码AV吞精久久久久| 亚洲一区操| 日韩啊V| 亚洲 暴爽 AV人人爽日日碰| 天堂综合网| 少妇淫妇久久久久久久| 人妻娇喘 激情视频| 欧美日韩精品久久久久东北老熟妇| 日韩精品9区| 精品一国2| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 亚洲一区二区专区-国产丝袜精品丝袜-成人AV | 婷婷三区| 亚洲综合性感在线| 欧洲亚洲人妻无码中字久久三区四区| 99re3这里只有精品| 精品网站9999| 久久久久久久久久久久久久久乱码| 116美女午夜| 人人爱夜夜爱| 色偷偷色偷偷欧美日韩| 操曰本熟女| 中文字幕精品专区搜索结果91| 骚逼自拍99| 日韩中文字幕在线视频观看| 日本高清_区二区三区| 福利色色| 95人妻爽爽人人做人人澡| 日韩有码一区三区| 欧美性爱一内片一区二区三区| 18一区二区三区| 成人精品视频一区二区| 60秒试看最爽10分钟网站| 熟女自慰久久久| 日本一天色道久久久精品视频| 亚洲男人的天堂AV| 久污| 亚洲国产天堂| 日韩一区二区精彩视频| 久久九九视频九九视频| 色999五月色| 久久综合18p| 色男人色天堂东京热| 97在线日韩中文字幕| 中文乱码字幕观看| 尤物黄色在线观看网站| 99精品在线播放| 亚洲乱色视频一区、二区在线| 熟妇高潮精品一区二区三区下载| 亚洲欧美变态| 大屁股人妻女教师撅着屁股| 91在线精品| 素人播放一区| 欧洲亚洲综合| 国产一级高清免费观看| 先锋色眉乱伦资源| 中文字幕在线观看丝袜| 欧洲精品网| 欧美中文综合| 国产精品宅男免费| 欧美色九九九| 97亚洲综合在线| 九月激情婷婷| 9久综合网| 久久久久久少妇| 狠狠婷婷亚洲中文综合久久| 操逼逼无码| 九九久久99| 东京热毛片177b2viP| 超碰在线观看av不卡| 亚洲另类综合欧美| 中文熟女五十乱码在线| 久久精品午夜国产亚洲AV无码| 日本三级R| 国产十八禁视频| 国产精品96| 婷婷久久五月| 操老熟女AV| 精品国产三级av韩国在线| 婷婷综合久久| 夜夜操夜夜高潮夜夜爽国产精品区| 九九综合九九综合| 99色在线| 骚货操死你| 久九9精品| 无码不卡八戒| AV色天香在线| 精品人妻一区二区三区鲁大师| 亚洲精品无码久久AV| 啊啊啊啊啊啊好湿好爽视频| 78久久| 丁香六月天| 亚洲第一男人天堂| 大色综合网| 精品一二三区四视频| 欧美伊人久久综合网| 青娱乐 成人娱乐在线| 亚洲熟女综合网| 久热无码| 夜夜爽夜夜高潮夜夜爽| 丁香五月激情综合| 天天综合网~91| 日本日皮视频逼| 九九九九九九精品| 日韩精品一区二区三区色欲 | 婷婷五月天色色| 久久中文字幕人妻熟av女蜜柚| 国产精品无码av在线 | 亚洲人妻中文高清| 亚洲啪啪啪啪视香蕉| 国产绿奴视频在线观看| 97一区二区三区视频| 日本一区视频在线观看| 欧洲精品一二三在线| 性在久久久久久| 国产精品久久久久久夜夜夜夜| 色嗨嗨在线| 综合情欲网| 五月婷婷久久综合| 国产精品乱码久久久| 超碰三级秋霞| 亚洲最新Av| 超碰人妻中文在线| 自拍偷拍 高清无码| 国产吹潮女在线观看| 欧美精品久久久久久久久88| 麻豆区久久久久亚| 色啪网| 国产精品久久久| 亚州色站 日韩电影| 8x福利精品第一福利视频导航| 一区二区三区无卡视频在线观看| 精品人妻av在线播放| 激情婷婷丁香网| 亚洲天堂电影精品一区| 精品日韩人妻精品一二三区| 蜜臀AV成人精品蜜臀| ?亚洲伊人伊成久久人综合网| 国产精品另类| 国产精品久久久视频| 性爱视频无打码在线观看| 国产精品电| 国产按摩一区二区三区| 国产一区二区三区白丝| 蜜臀在线看片| 精品久久久久,69国产成人精| 午夜精品久久久久久久99热影院 | 久久99精品九九久久久婷婷| 五月天大香蕉| 国产精品免费1区2区视频| 亚洲熟妇综合久久久久久| 色播五月丁香| 欧美激情另类一区二区| 凹凸 69堂 在线播放| 嗯嗯嗯啊啊啊操的我好爽| 国产精品无码久久久久2028| 日韩精品啪啪啪| 精品人妻一区春色| 亚洲.欧美.丝袜.中文.综合| 国产家庭乱伦性爱视频| 超碰97伊人| 情色五月天网| 狂操嫩妻视频一区二区三区| 国产日韩区| 亚洲在饯| 无码九九九九| 日韩av熟女一区二区三区成人| 国产1769在线| A一区片| 青青草大香蕉视频| 亚码人妻| 婷婷情色综合网| 亚洲丁香花色| 天天搞在线综合网| 日韩成人性日韩成人性爱视频在线免费观看 | 91女人的网站| www.99在线| 国产不卡免费在线视频| 久草尤物| 色臀av| 男人天堂导航| 久久久九精品| 精品无码人妻一区二区免费蜜桃| 色av中文字| 激情五月天色色| 欧美网站免费| av在线一区二区三区| 国产精品激情久久久久久久| 岛国在线国产| 99精品国产户外露出| 国产精品久久蜜乳av| 亚洲做性| 国产精品69久久久久久久| 91爱看| 超碰99热中文字幕| 超碰色中文| 爆乳免费黄网站| 91 在线亚洲| 亚洲国男人的天堂| 国产亚洲一黄| 天天欧美欧美亚洲网| 激情婷婷五月天| Julia在线播放亚洲久久| 国模精品一区二区三区苹果色戒| 色婷婷九月天天综合| 日韩成人性爱AV| www黄片免费看com| 国产成人bd在线观看| 色哟哟511老熟女| 青娱乐国产盛宴视频| 欧美成人AⅤ大片在线观看| 国内操逼视频二区| 先锋音影AV| 啊啊啊啊啊好舒服视频| 91N综合网在线| 色97综合中文字幕| 999色欧美中文字幕| 亚洲天在线| 91熟女丨91老女人| 97精品久久| 亚洲AV无码秘 蜜桃臀国精产品| 欧美成人一级麻豆| 黄色操人| 精品偷拍13p欧美dodk视频| 久久人人舔人人爽舔人人av片| 思思热在线cao| 爽 好舒服 无码刺激久久| 极品尤物在线观看| 开心激情站| 久九九九九九九热| 日韩美女高潮喷水视频| 97天天插| 精品欧美乱码久| a片在线播放| 蜜乳AV一区| 亚洲啪啪性视频| 欧美日韩色图片| 美女大乳久久久久久久女人18| 一区二区视频你懂的| 欧美在线|亚洲| 凹凸精品熟女在线观看| 国产精品99精品视频网站| 插穴性爱视频在线观看| 丁香六月啪| 四虎AV无码| 国产女主播视频在线观看| 变态综合色| 黄色大片免费在线| 综合一区中亚洲国产成人综合精品 | 久久亚码| 久久免费少妇| 免费的很黄很污的全部视频| 97人人模人人爽人人| 女人妻一区| 爱丝福利| A一区片| 激情第四色| 欧美亚洲厕所精品偷拍91| 伦理第一页| 国产操偷| 在线天堂999| 欧美桃色网| 国产成年女人免费视频播放a| www五月| 操逼无毒无码免费视频| 超碰95| 国产无套粉嫩白浆在| 久艹伊人精品综合在线| 亚洲精品黄码久久久久| 国产二区视频在线观看电影| 色色色综合网| 任你干在线视频| AV乱伦国产| 久久丁香五月天| 国产日韩欧美| 国产婷婷综合在线观看| 一区二区三区机械有限公司| 99re8免费高清在线| 96久久久久| 美女自卫慰黄网站免费| 青青草国产盗摄一二三区| 伊人操| 久久久com| 久久精品成人一区二区三区蜜臀| av网站免费线看| 日本超碰在线国产一区| 国产精品69久久久久久久| 欧美 日韩 国产传媒| 99热这里只有精品18| 综合色色婷婷| 中文熟女五十乱码在线| 一本一道久久综合久久| 大色综合| 欧美成人免费在线观看| 中文字幕二区| 中文操逼字幕| 夜夜操美女| 五十路熟女工口| 欧美日本国产日韩激情视频| 天干天干天干天天做| 另类天堂| 欧美人与动性人交a| 国产久久久久影院老熟女| 成人三级片无码| 9999久久久| 色九九九综合| 婷婷五月天成人网| 色综合一本| 欧美手机在线综合| 99999久久久久9国产精品| 日韩激情啪啪啪| 伊人97| 久久久久国产亚洲一区欧美色图日韩 | 嗯嗯,啊啊,国产精品| 亚洲熟女性高潮久久久| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 九九热免费国产视频婷婷伊人| 九九精品无码专区免费| 97精品视频在线| 操死我干死我| 国产一区二区三区导航| 亚洲色图欧美色图另类图片| 欧美A√综合网| 超碰在线99| 黄色电影观看久久9| 揉揉日日日日| 色哟哟1区2区| 丝袜熟女2P| 国产女人91精品嗷嗷嗷嗷| 天天日天天操天天射河南省| 男人的天堂无码| 4141514逼喷水三级片| 日本亚洲熟女视频| 亚洲国产成人7777| 中国少妇啪啪视频| 日本精品性生活久久久| 夜夜一区二区| 午夜福利视频在线一区| 成人一道本免费视频| 中文字幕激情小说| 亚洲精品不卡一二三区| 国产白领连续中出在线观看| 婷婷六月色| 国产精品久久久久亚洲av| 亚洲在线| 理论久久婷婷网8| 五月天亚洲网| 九九夜精品九九在线| 96精品在线| 日韩成人大片在线观看| 被男人添B超爽视频| 97亚洲欧美| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 嗯嗯啊操我| 成视频在线观看免费看| 91精品丝袜久久久久久| 91大神精品长腿在线观看网站| 99999亚洲另类| 国产精彩女在线观看视频| 天天综合影院91| 久久久久久久少妇| 欧美夜夜狠| 狠狠五月天| AV电影在线播放| 亚洲AV无码成人精品久久| 男女性感激情网站| 人妻中文字幕精品无码| 久久伊人亚洲AV无码网站| 国产午夜精品理论片一二三区区 | 伊人网在线观看| 欧洲Au麻豆| 天天日日日射| 成人综合网 欧美| 亚洲情色一区三区| 欧美综合色站| 大香蕉99热| 二级久久网| 97超碰在线资源网站| 男人网站婷婷| 精国久久一区二区三区98| 日韩欧亚中文在线| 日韩久草| 亚洲第一男人天堂| 亚州,欧美在线| 超碰97男女| 超碰97亚洲| 国产一区二区三区高清视频| 久久精品国产Aⅴ| se吧提供91精品国产91久久久久久| www.色吧5.com| 啪啪视频亚洲第一| 国产高清在线观看欧美| 思思性爱| 五月婷婷基地| 天美麻豆精品视频99| 密臀在线免费观看| 久久香蕉超碰97国产精品| s片在线观看| 曰本道人妻久久久在线不卡色视频| 亚州精品人妻一二三区| 久热热| 亚洲最新Av| 欧美日韩操操操| 操操碰| 婷婷综合在线观看| 色综合99999| 欧美色图另类图片| 曰韩中文人妻视频| 国产一区二区三区白丝| 久久久久久久久成人av解说| 色999五月色| 嗯~啊~快点 死我视频| 嫩草影院永久在线制服丝袜| 2019男人的天堂| 九九九免费视频| 欧美极品性爱天天射| 婷婷五月天成人网| 在线天堂999| 狠狠干妹子| 久久一二三四| 免费啪啪一级视频| 天天流夜夜操| 91AV天堂| 麻豆成人影音在线| 国产乱伦亚洲| 狠狠干综合| 60秒免费小视频| 91亚洲人| 久久久久久久亚洲Av无码| 久久久一级|