色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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
返回資訊列表
欧美熟女妇同| 综合激情一一91| 久久超碰98| 亚洲影视第一页| 日韩性爱视频在线免费观看| 亚洲色吧网| 粉嫩av一区二区三区四季| 九九九色| 中文字幕精品区先锋资源| 亚洲男人天堂2012| 天天综合~91| AV一二区| 少妇99成人麻豆| 97超级久久| 草草影院最新网址| 欧美日韩国产男人| 91丨豆花丨熟女| 大香蕉男人的天堂| 99久久久无码精品国产人| 亚洲日韩精品在线播放| 成人小电影网站tex| 综合久久9| 夜夜高潮夜夜爽| 国产精品诱惑| 欧美在线播放| 欧美97视频| 日韩字幕一区| www.色操逼| 加勒比五月天| 久久性爱免费送| 欧美亚洲厕所精品偷拍91 | 欧美99热| 蜜臀99久| 97色欧州| 9l视频自拍9l九色成人| 天堂亚洲精品| 久久午夜伦| 亚洲精品97| 91蜜臀在线久久久久| 亚洲欧美色图片| 欧洲综合视频| 欧州一区二区三区四区| 91爰爱欧美| 日韩激情小说一区二区| 女人18精品一区二区三区| www熟女乱伦com| 欧美色色人| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | yaouchengrenav| 亚洲、日韩、综合、另类| 久操电影| 上床不卡网站| 亚洲无992tv| 中文字幕一区二区三区视频播放| 蜜臀一二三区| 1024人妻| 欧美日韩国产成人高清| 天美传媒av在线| 美国一区二区免费视频| 91中文字幕制服丝袜免费视频| 激情四射婷婷四五月天| 青青青国产手线观看视频2| 亚洲天堂情色| 狠狠色色| 深夜国产一区二区三区在线看| 少妇啪啪自拍| 国产九九九九九九| AV九九| 亚洲高清综合网| 大粗鳼巴久久久久| 歐美性天天| 蜜乳AV一区二区三区四| 91色色网站| 欧美亚洲涩涩| 亚洲激情网一二三四区| 超碰人人操97碰| 91免费看中出视频| 久久久久ab| 久热在线精品免费观看| 欧美日韩精品久久久久东北老熟妇| 亚洲日韩精品在线播放| 国产精品蜜乳AV| 视频国产欧美在线播放| 久久久久久九九九九九九| 久7色| 亚洲国产剧情少妇激情| 另类专区在线观看| 国产探花日韩援交| 久久精品一区二区一8| 91久热| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 亚洲天堂另类小说男人| 99啪啪| 亚洲日韩美国人妻| 亚洲av无码成电影在线播放| 久久99国产精品| 天堂亚洲精品久久老牛| 欧亚日韩三区| 欧美偷偷网| 精品人妻一区二区三区鲁大师| 亚洲高潮少妇| 18禁网站在线播放| 91P0RNY大屁股人妻| 麻豆熟妇乱妇熟色A片在线看 | 久久精品国产精品一区| 丰满欧美少妇| 人妻熟女字幕一区二区| 精品久久久久,69国产成人精| 又粗又长又大国产不卡| 亚欧美色| 91在线免费精品视频| 中文字幕免费在线观看| 综合夜夜| 欧美一级黄色免费专区| 芊芊操逼视频无码| 欧美综合娱乐久久| 中文字幕精品资源在线| 亚洲性爱无码乱伦av| 国产精品久久99日日| 国产精品不卡一区二区电影| 亚洲国产精品V?在线播放| av网站免费看| 秋霞怕怕片| 无码不卡亚洲成?人片| 九九九九9999| 无码人妻一区二区三区色欲aⅴ| 综合久久9| 日本影视久久免费| 99婷婷一区二区| 精品少妇高潮久久| 密臀在线一区尤物| 思思热久久成人| 人人操人人大香蕉| 在线不卡视频| 亚洲日韩青青草色月| 日韩极品无码B| 超碰95| 亚洲男人天堂网| 一级二级三级黑人无码| 探花一区二区三| 国产一级作爱毛片| 啊啊啊好爽快点啊啊啊嗯嗯| 校园春色综合色| 999综合色| 欧美激情亚洲情色| 蜜屁av| 色噜噜日韩精品| 亚洲阿v天堂在线| 日本三级A片网站com| 国产精品极品美女视频| 91九色精品熟女内射| 超碰亚洲97| 俺去啦自拍| 久久这里都是精品| 综合视频91| 99热在线只有精品| 欧美日韩插逼视频| 五月丁香综合啪啪| 小草精彩毛片| 嗯~啊~快点 死我视频| 天天日天天射天天干| 亚av顶级裸体一区二区三区四区五区| 日本不卡在线二区三区| 精品无码欧美三级| 久久婷婷影院| 欧美香蕉视xxx| yazhououmeizongya| 91国模| 日本国产高清色www视频在线| 免费观看的av| 亚洲瓯美色图| 国产精品色片一区二区| 91夜色| 久热精品在线| 日韩国产乱子伦App| 久久精品国产72国产精品福利 | 青久操| 欧洲视频在线| 精品中文字幕第一页| 丁香六月婷| 都市激情人妻一区二区青青操视频| 91男人综合| 久久精品人妻一区| 懂色AV蜜臀无码精品APP| 亚洲天堂另类美腿| 中文字幕av片| 色九九九| 国产日韩无码一区二区三区久久区| 正在播放国产精品一区| 青青操青娱乐| 96精品久久| 乱论91| 67194无码不卡| 免看60秒涩涩视频| av在线一区二区三区| 天堂日本亚洲欧美| 中文字幕97| 99九九久久| 热热色AV| 国产日韩欧美亚洲精品95| 精品久久在线区一区| aV中文麻| 99热66| 亚州,欧美在线| 狠狠干综合| 久久东京伊人一本到鬼色| 色色色色色色色色色色色色色色综合| 欧美综合自拍亚洲综合图| 精品少妇人妻av久久免费| 香一区二区三区| 91美女在线观看| 爱av免费| 视频在线观看青青99国产| 无码人妻精品一区二区中文 | 另类天堂| 色色色综合网| 欧美 亚洲 偷拍自拍| 18一区二区三区| 国产免费小视频| 妺妺跟我一起洗澡没忍住| 日韩少妇在线视频| 99久久久久| 男人的天堂VA| 91女网站| 豆花视频操逼网址| 久久久久久国产精品| 天天干18禁| 亚州伊人色综台| 久草午夜| 欧美曰韩国产精品| 亚洲av影院在线观看| 老熟女中文字幕高清| 亚洲精品中文字幕一区在线视频| 蜜臀va69| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 丁香九月婷婷| 麻豆九九九| 日韩中文字幕国产| 午夜亚洲| 一区二区三区日韩欧美 | 成人情色综合网| 五月丁香成人网| 1769一区| 夜夜爽夜夜摸夜夜操免费视频| 欧美色综合影院| 男人天堂欧美| 欧美色图小说综合| 性色avv| 日本免费一级AAA大片器| 亚洲精品蜜桃久久久久久久| 蜜臀少妇一区二区| 久久日韩精品一区二区| 91伊人久久在线| 婷婷五月天伊人| 樱花蜜乳av| 久99在线免费观看视频| 成人日本精品九区| 国产欧美亚洲精品a第2页| 色噜噜日韩精品| 一区麻豆 高清中文字幕| 欧美性爱免费短视频| 亚洲天堂另类| 精品成人女人久久| 刺激精品视频| 天美传媒一二三区永久网站| 99国产在线 精品 视频| 91宗合网| 国产免费小视频| 久久久国产精品人妻丝袜| 超碰精品在线| 人妻 中文 日韩| 亚洲另类天堂| 美女上床网站| 伊人在线大香蕉视频久久| 超碰亚洲97| 亚洲一区操| 久久9精品| 久久国产对白激情浪潮| 日本三级久| 日韩一级成人毛片免费观看| 超碰九区| 99精品视频在线观看| 欧美的性爱网站免费| 五月激情在线| 婷婷五月成人| 国产强奸AV在线| 超碰久超碰久| 欧美日韩欧美| 精品日日人妻| 午夜福利合集| 999久久芭蕾| 日韩久久艹| 国内精品不卡无毒99999| 久久国产性爱| 免费观看国产小粉嫩喷水精品午| 永久免费观看的毛片的网站| 中文字幕丰满人妻日本| 夜夜性| 国产91 丝袜在线播放 | 中国国国产一级特黄毛片| 俺去啦俺来也久久综合| 2017av无码免费无线播| 亚洲欧美另类图片| 麻豆美女丝袜人妻中文| 日日躁夜夜躁狠狠躁超爽| 99蜜月精品久久| 91操人| 国产无马在线| a片久久久久久久久久久久 | JuliaAnnXXX888| 日本性一区| 麻豆一区在线| 一区二区视频你懂的| 日少妇亚洲版| 欧美日韩另类在线| 青草精品视频-日本久久久久网站| 亚洲色图综合网| 动漫av中文| 锕锕好爽 死我在线观看| 亚洲drav色图| 91nbbbbbb| 激情小说亚洲图片| 亚洲自拍小说| 三久久久四久久久久| 国产97综合| 91老司机视频| 亚洲阿v天堂在线| 一级性爱视频免费观看 | 免费观看的av| 丁香五月婷婷基地| 婷婷五月天激情小说| 国产精品大香蕉| 狂操嫩妻视频一区二区三区| 91久久久视| 亚洲情色一区二区三区| 日韩中文字幕精品一二三事国产精品| 久操电影网| www.av家庭乱伦| 成人无码在线超碰网| 强奸乱伦大香蕉| 黄色视频特级毛片| 95精品在线| 美美91成人国产精品欧美精品久久久久久久| 97精品视频网站| 欧美 亚洲 综合 制服| 青青草操逼逼视频| 97免费在线视频在线观看| 久久国产对白激情浪潮| 久久9久久| 亚洲在线a| 中文字幕精品一区欧美| 日韩精品一区的| 91色五月俺来也| 玖玖大干人妻| 中文字幕高清精品一区| 久久国内| 1204av韩国| 久久久专区| 日日躁夜夜躁狠狠躁超爽| 女人与公拘交酡2020视频| 国产三级电影免费观看| 国产农村妇女精品一二区| 任我爽在线视频免费观看| 国产精品白丝| 国产精品无码久久久久2025| 狠狠色色| 久久亚洲天堂| 一区二区三区免费视频入口| 欧美在线观看综合国产| 欧美久久久| 999综合网| 日本精品成人无码| 青青草日本中文字幕| 深夜视频| 亚洲无码99| 97视频在线视频| 欧美日韩97| 亚洲综合五月天| 亚洲自拍青操视频| 乱性AV| 久久激情综合| 亚洲九九视频| 亚洲精品无码少妇久久| 天综合网欧美| 噜噜噜在线视频| 绯色AV粉色AV蜜臀AV| 欧美亚洲手机在线| 亚洲第一综合| 青草精品视频一日本久久久久网站| 国产精品96| 天天干天天做| 午夜男人的天堂| 99久久精品国产高潮| 骚逼高潮久久精品| 96精品一区| 影音先锋日本一区二区| 久久久18禁| 加勒比综合| 婷婷五月天丁香| 啊啊在线| 少妇熟女视频一二三区| 欧日a| 福利在线视频一区二区| 草草影院最新网址| 久湿久久| 另类一区| 99最新日韩偷拍视频| 日韩无码黄色片| 97视频免费播放| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 欧美 中文字幕 一区| 天天天干977| 婷婷五月花| 欧美亚州综合网图片| 综合在线导航一区| 亚洲综合色图欧美| 久久婷婷一区二| 伊香蕉综合久久久久久久噜噜噜| 久久一二三四五六七八九区区区| 亚欧无码线免费观看视频| 蜜臀av中字字幕网站| 日本操逼视频在线| 亚洲精品欧美专业| J?P?NESEHD熟女熟妇伦| 日韩不卡网操逼中文字幕日韩| 二男一女成人A片| 亚州色阁| 开心五月激情网| av网站在线看| 蜜桃视频一区二区三区| 欧亚在线视频| 好吊色综合| 亚洲成A∨人影院在线欢看| 欧美翘臀视频网站一区二区三区| 嗯嗯,啊啊,国产精品| www.99色| 深爱伊人影院| 97 超碰 人人做 人人爱| 韩三级a视频在线观看| 刺激精品视频| 芊芊操逼视频无码| 女优大全 - 91n| 丝袜狠狠草尤物人妻av91| 日本欧美韩国国产在线| 天天躁狠狠躁av| 日本三级韩国三级99| 日本人妻最新在线中| 天天天天做夜夜夜夜做| 99热欧美| 操操吧亚洲乱伦视频| 人妻精品一区一区三区蜜桃91| 精品女人999| 人人摸人人添人人操| 清纯唯美激情| 超碰在线97国产| 久久久久国产精品喷潮免费观看臀| 暴力av在线| 欧美熟妇人体| 手机看av网站在线看| 国产午夜在线观看| 丁香五月天堂| 亚洲成人ab| 国产精品久久久久久久久久久久久久久久| 69人妻精品一区二区绯色| 性爱综合一区二区| 欧美日韩中文视频播放| 极品出轨视频网站| 久久日本熟妇熟色高清| 亚州色站 日韩电影| 精品一区二区成人动漫| 伊人精品久久网站| 色五月AV| 亚洲淫乱骚妇AV| 夜夜嗨AV一区天天| 午夜免费福利视频一区| 91人妻精华帖| 夜夜草天天| 96久久久久| 麻豆天美AV传媒第一页| 天堂射| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 久久99九九九九6666免费观看软件| 人妻人妻天天碰| 亚洲色图a| 欧美熟妇乱码在线一区| 天天淫人人妻日日色| 黄网在线播放| 影音先锋乱| 人人看欧美性爱| 久草尤物| A级毛片在线看免费| 成人免费性爱视视| 污色区网站| 性91| 国产精品农村妇女| 传媒在线观看一区二区三区| 亚洲se91| 欧美日韩在线小说| 国产老女人久久毛| 国产精品久久久啊| 欧美色另类| 亚欧美色| 色激情综合网站| 搡老女人老熟女91| 国产精品直播在线观看直播| 九九精品99| 日韩精品在线视频在线观看| 一线黄色免费性爱片| 18禁免费视频| 成视频在线观看免费看| 99爱在线视频| 大香蕉免| 亚洲欧洲色情高清| 欧美亚洲AN| 中文无线日韩一区| 欧美综合1性辶| 97超碰超| 国产精品白丝在线播放| 亚洲免费人妻在| 亚洲一区中文字幕一区| 精品国产自在在线99| 欧美最婬乱婬爆婬性视频| 丝袜亚洲91| 懂色影视久久| 欧成人精品H无码| 岛国黄片网站| 国产黄片精品在线| 涩涩五月天| 日韩一级二级在线| 风月影院男女十八禁| 欧美97se| 亚洲成人黄色在线观看| 国产精品无码av在线| 再深点灬舒服灬太大了好硬好爽| 九色 人妻 大香蕉| 亚洲AV色图一区| 啊啊啊啊啊好多水| 亚洲成人性爱网站在线播放| 欧美很很操视频| 国产suv精品一区二区四区999 | 精品无码久久久久久久杏吧| 中国女人内射6XXXXX| 亚洲色婷婷| 亚洲区限制级| 人妖欧美一区二区| 国产人妖的免费的视频| 国产玖玖| 美女丝袜激情小说| 国产毛片片精品天天看视频| 综合久久欧美| 国产白领连续中出在线观看| 国产日韩中文字幕欧美| 欧美亚洲素人制服精品| 97资源制服丝袜| 中文字幕文字幕无码一区二区三区电影99 | 成人精品久久久午夜福利| 九九探花视频在线观看| 九九亚洲精品| 欧美 亚洲| 乱伦av.com| 欧美色www亚洲国产阿娇要播| 草草影院日本第一页| 中文字幕一区av| 五十路熟女,国产欧美精品区一区二区三区 | 92性色国产午夜福利在线661| 亚洲av淫乱| 亚洲熟女乱熟乱熟妇综合网二区| 玖草在线视频| 五月开心网| 欧美日韩亚洲国产中文永久天天看| 在线日韩日本亚洲国产| 天美传媒一二三区永久网站| 国产精品久久久午夜夜伦鲁鲁| 欧洲精品欧洲精品| 女色综合| 色婷亚洲五月在线观看| 中文字幕AV片| 日韩性爱1级片视频| 国产一区二区三区不卡手机在线| 亚洲欧美97| 91超碰人人操| 夫妻AV网站| 大香蕉一线视频| 99久久精品无码一区二区毛片免费 | 超碰综合97在线| 99这里有精品| 欧美人妻精品一区二区| av亚欧| 99色骚| 久久久爆乳翘臀一线天伦理视频| 中文字幕人成乱码熟女香港| 久久久久久精| 中国少妇啪啪视频| 欧美综合传媒| 亚洲色图第一页| 搞中出视频在线观看| 91N欧美| 高清无码国产亚洲| 蜜乳性色无码专日粉嫩骚逼AV| 午夜视频久久久| 超碰精品人妻狠狠干| 色香在线| 超碰97久久观看| 香港日本韩国人妇99www.wccm20| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 精品网站9999| 久操B网| 校园春色亚洲欧洲| 超碰 97国产熟女| 亚洲精品视频二区| 天美精品av| 啊啊啊com| 免费精品99| 亚洲精品一区中文字幕乱码| 六月丁香啪啪啪| 久操B网| 99国产精品人妻人伦| www成人啪啪18秘 免费| 清柠毛片| 97硬碰| 99色日| 精彩久久中文| 青青草啪啪网| 人妻夜爽夜夜爽| 一区二区三| 亚洲中文字幕久久人妻| 免费观看的黄色的网站| 亚洲精品丝袜-不卡成人免费……| 亚洲AV小说| 亚洲色图美腿丝袜| 好吊色综合| 一区二区三区高清| 少妇熟女1区2区3区| 乱伦a片视频| 操操碰| 97中文超碰| 走光一区92下载| 精品国产三级av韩国在线| 中国少妇XXXX做受| 大胆91| 久久久久ab| 欧美在线电影| 国产自产一区视频在线| 人妻出轨一区二区三区| 精品免费成人久久| 国产曰批免费观看久久久| 看日韩美女二区三区免费操逼视频| 日韩9999| 26uuu最新| 狠狠色综合网| 人妻熟女一区二区三区在线| 久久精品一区二区| 任你草| 97超级久久| 99久久精品无码一区二区毛片免费| 丁香六月婷| 99最新日韩偷拍视频| 一本大道不卡一二三区| 婷婷久久综合| 91N综合在线| 中文字幕一区二区在线日韩精品| 欧美高潮在线| 美女操逼A A| 久久婷综合| 国产精品一区二区麻豆| 啪啪资源网| 91美女视频电影| 少妇久久| 欧美三级免费伊人| 色y情视频免费看| 国产精品丝袜久久亚洲不卡| 中国乱伦一区二区| 久久亚洲日韩熟女精品| 精品妇女一区二区三区| 国产成人欧美精品在线| 四虎AV无码| 久草网站免费在线观看| 91日韩网站| 精品无吗久久| 九九热免费视频| 五月婷婷影院| 大香蕉AV丝袜| 五月天久久婷婷亚洲 | 白嫩少妇| 青草香蕉网| 国内毛片四区| 国产女同性恋视频| 日韩不卡a级视频专区| 亚洲精品久久久久毛片A片拉屎| 爽爽爽免费视频| 性开放中文AV高清无码免费看| 久久久久久人| 亚洲高清内射| 精品少妇一区二区三区免费观看| 亚洲美女AV无码| 91激情国产| 久久久艹艹艹| 色狠狠色| 欧美日韩性爱无码| 久久性生大片免费观看性| 98超碰日本| 精品久久久久黄少妇| 天堂8在线新版官网| 看免费一级在线播放毛片| 啊啊啊啊啊啊在线| 超碰综合97在线| 成人五月天色网| 伊人久久国产免费观看视频| 国语精品内射在线观看| 色吧5亚洲| 久久久偷拍| 综合久久97| 亚洲黄色| 97亚洲在线| 男人精品天堂一区| 97视频620| 亚洲区限制级| 97超碰巨乳| 91jk色拍| 综合网久久| 久久久久亚洲精品| 久久这里| 一本色道久久综合亚洲二区三区| 97AV爱| 婷婷99| 大香蕉伊利av| 综合熟女| 91亚州日韩高清| 香蕉免费一区二区三区不读| 人人操超碰在线| 美女被啪到深处抽搐视频| 无码天天操| 精品色色| 爱丝福利| 国产成人自拍视频视频| 99热综合| 97在线播放| 国产一区自拍欧美日韩| 又大又白奶子| 久久久久婷婷精品av电影| 毛片一区二区| 久久婷婷影院| 99国产精品自在自在| 国产资源中文字幕在线| 日韩免费福利在线观看| 日韩人妻少妇 一区二区三区| 亚洲凸凹超碰成人| 欧美性xxxxx狂欢| 99这里有精品视频| 91欧洲入口| 欧美久久伊人| 亚洲精品久久一区二区三区蜜桃臀| 天天综合网日韩| 91色情黑丝搞鸡在线观看一区二区三区三州| 亚洲天堂东京热| 特色a在线上| 9色在线| 91性片| 天天操狠狠日夜夜干超碰撸com视频在线观看| 国产乱码精品久久久久久| 无码精品久久久久久亚洲| 一区二区久久天天干狠狠| 校园春色AV天堂| 99精品无码| 国产精品高潮久久久无码| 久久婷婷五月| 久久久久97| 97在线欧洲| 日本一级性爱| 少妇综合| 精品无码产区一区二| 蜜桃臀av在线观看| 欧美亚洲素人制服精品| 国产久9| 嗯嗯啊啊操死我| 亚洲女毛多水多21P| 大香蕉淫人| 亚洲情色1区| 乱伦av麻豆| 青青青青青手机视频| 白丝1区2区3区| 三级精品三级在线观看| 好一吊区二区| 亚洲精品国产AV天美传媒| 在线国产福利网址导航| 亚洲欧洲综合| 9久久久久| 久久亚洲不卡一区二区三区| 亚洲欧洲av影音| 中文字幕后石码四区五区| 亚洲91在线播放影院| 久久久久久性爱视频| 91色拍| 欧美疯狂做爰xxxx| 大香蕉琪琪日本女优不卡| 国产美女销魂在线观看不卡| 999久久久精品国产| 99热精品在线观看| 一本大道不卡一二三区| 精品小视频在线| 浓厚中出中文字幕在线| 97色色色综合网站| 亚洲国产成人精品女人久久久| 五月天色五月| 91亚洲色图| 一区二区三区男女操逼黄色小电影| 国产成人亚洲精品无| 日本超碰在线国产一区| 黄骗免费网站| 夜夜狼人妻| 亚洲欧美一区二区网址| 五月天伊人| 亚洲av综合色区图片亚洲| 无码视频一区二区| 91在线精品一区二区三区| 国产AV人人 夜夜人人澡| 激情抓乳插进去啪啪啪日韩 | 亚洲综合另类| 91色爽欧美| 超碰欧美| 99国产精品免费| 91成人久久| 亚洲的天堂网| 在线啊v一区| 91精品国产91熟女| 91国产精品熟女| 国产精品久久久久久久电影渣男| 欧美熟妇亚洲版| 色777999综合| 亚洲色图亚洲无码强奸乱伦| 国产精品久久久久9999小说| 亚洲有码 视频一区| A一区片| 夜夜国产一区| 亚欧性爱在线无码| 免费精品无码一级毛片牛牛影视| 欧美97在线观看| 国产女人高潮嗷嗷嗷叫小说| 97久久久久久久久久| 自拍鲍鱼一区在线高清观看免费| 综合久久9| 日韩传媒在线| 91爰爱欧美| 视频在线观看免费一区二区三区 | 欧美精品第四五页中文字幕在线观看| 国产精品久久久久亚洲av| 快播久久人人aV| 天天摸天天碰天天添青青| 岛国黄色大片网站| 少妇厨房愉情理伦片bd在线观看| 91碰碰| 涩爱AV在线| 岛国视频免费在线观看| 美女诱惑一区| 日韩成人小视频| 欧美久久婷婷| 亚洲综合色网| 少妇3P性爱自拍| 九九精品网| 裸体1区| 日本超碰在线国产一区| 91三级理论片播放器| 天天狠操| 国产真实子伦对白| 欧美少妇高潮视频| 久久大陆| 一区二区三区 丝袜高跟| 精品欧美А∨无码黑人大荫蒂| 人妻欧美| 麻豆区久久久久亚| 久草色悠悠在线视频| 97人人草| 亚洲丁香花色| 97摸视频| 熟女六十路| 色久桃花影院在线观看| 五码视频在线观看| 成全动漫视频观看免费下载| 台湾佬大香蕉| 好爽视频在线观看| 999精品女人| 综合情欲网| 天美传媒精品一区二区三区| 麻豆 亚洲 97| ai欧美亚洲小说| 一区二区三区色综合| 中文字幕在线观看网页| 久久久久密| 欧美美女自慰一区二区三区| 1956日韩精品| 五月天婷精品激情| 亚洲色图亚洲无码强奸乱伦| 天天操天天舔| 欧美强奸乱| 欧美精品1区2区3区| 日本操嫩b网| 91人人臊| 防屏蔽在线视频| 日韩精品一区二区三区色欲| 多乙久久久久久| WWW黄片COM| 2024人人操人人摸| 日韩人妻精品久久久久| 欧美日韩情色一区二区| 91九久| 91在线色| 久久久专区| 91激情国产| 啊v在线观看视频| 襙一襙| 欧美另类精品xxxx| 99精品欧美一区二区三区桃色| 97精品97久久| 蜜桃天美传媒AV一区二区三区| 色约约一区=区三区| 国产精品熟女一区二区三区| 日本熟女不卡视频| 亚洲色 国产 欧美 日韩| 大香蕉520| 91啪9色| 亚洲熟妇综合久久久久久| 欧美日韩人妻少妇 一区二区三区| 欧美片第一页| 欧美一区二区三区蜜桃| 一色网男人的天堂| 亚洲AV乱码专区国产噜噜亚洲| 99色悠悠| 国产自产91区13区| 免费看污网址| 一摸二插三插| 成人a大片在线观看| 97干在线| 动漫片子网站3黄| 久草新免费| 天天肏美女| 色九九九九久| 密臀在线免费观看| 日韩成人性爱电影在线播放| 欧美福利视频啊啊啊啊| 欧美三级中文字幕hd| A一级色女| 色欲天天婬色婬香WWW夜色| 亚洲超碰AV| 韩国成人精品久久久免费看| 人人操 欧美| www.亚洲成人一区| 国产免费操逼| 熟女色综合久久| 探花精品视频| 大香蕉手机在线视频| 欧美激情片一区二区| 99啪啪| 久久一二三级一一一| 大肉棒导航| 秘书高跟黑色丝袜国产91在线| 久久二| 九九热av| 18禁在线视频| 黄片不用下载在线观看| 免费网色网站| 久草尤物| 园内精品自拍视频在线播放| 综合 亚洲 欧美| 欧美精品xxxwww| 天天爽天天| 酒色综合网| 大香蕉伊人75| 蜜臀久久99精品久久综合| 欧美天堂亚洲电影院一区在线播放| 超碰99在线观看| 久九九九九九九热| 日本精品性生活久久久| 欧美亚洲91| 韩国黄色片精品久久久 | 国产极品美女高潮无套在线观看| 成人av动漫在线观看| 中文字幕在线2| 偷拍自拍在线视频观看| 天天操天天舔| 熟妇女伦乱视频视频| 欧美人妻精品一区二区| 亚州成人a∨| 欧美一二三级精品在线| 国产风韵犹存熟妇三区| 综合啪啪| 亚洲国产婷婷在线播放| 国产老熟女| 色色97爱| 久噜噜| 欧美国产视频| 91碰碰| 精品性爱一二三区| 国产精品视频麻豆入口| 60秒不遮不挡| 亚洲a色| 99久在线精品99re8| 欧美激情色婷婷花野真衣一区二区| 久久婷婷视频| 欧美日韩性爱操大逼| 人妻一区二区三区视频| 女优大全 - 91n| 日韩本不卡视频在线观看 | 欧洲性人爱视频| 欧美男人的天堂| 女人妻一区| 国产成人亚洲精品无码古代早漏男 | 一区二区三| 国产9熟妇视频网站| 日韩999| 亚洲91射| 色婷婷电影| 色超碰综合| 天天视频黄网站| 亚洲激情深爱文学小说网站| 久操网址| 天天影视综合色| 国产玖玖| 性色综合网| 久久这里只精品免费福利| 69综合网| 中文字幕美女91| 经典丝袜一区| 日本女人操逼| 欧美性性性| 人妻精品综合中文字幕在线| 久综合国内精品自在自线| 丁香婷婷激情五月天无毒不卡| 亚洲欧美自拍偷拍| 99久在线精品99re8| 亚洲黄色影视| 美女天天干| 欧美日韩天堂| 亚洲色图殴美色图激情乱伦| 亚洲男人的天堂va亚洲男人社| 99re这里只有精品3| 一本色道久久天天射天天干| 久草线上视频免费看| 亚洲男人的天堂亚洲| 一起草三级AV电影在线观看 | 欧美国产伊人久久久久| 久久香蕉国产线看观看亚洲女人 | 午夜天堂啪啪| 亚洲影院无码在线| 69久久久久久久久久久久久| 超碰人人干| 日韩熟女操逼| 亚洲91大片| 亚洲av在线免费观看| 国产乱伦亚洲| 国产黑白丝在线| 色九月综合| 久久曰曰| 国产黄色视频久久| 婷婷8月天青娱乐| 欧洲乱码视频| 麻豆啪啪啪视频| 手机午夜电影神马久久| 欧美色图另类图片| 色呦呦、国产精品| 精品-91人妻子系列| 在线人成亚洲视频免费观看| 精品人妻一二三四区视频| 九九视品黄色| 国产自偷自拍一区| 69国产对白刺激| 女人香蕉久久毛毛片精品| 天天看特黄的免费网站| 国产一级不卡在线观看| 亚洲美女av无码| 国产精品久久久午夜夜伦鲁鲁| 久久鲁夜| 亚洲男人天堂Av| 一区三区啪啪| 岛国大片国产| 一起草视频在线| 大白逼三四级| 国产精品不卡一区二区三区| 人妻熟女午夜精品在线| 成人无码影片视频在线| 国产AAAAAABBBBB| 天堂性色| 熟女高潮精品一区二区| 亚州综合图片| 中文字幕五区| 亚洲精品人妻吞精av | 亚洲性猛| baiduhicn.com。| 蜜臀AV一区二区三区激情综合| 五月天婷婷色| 2019天天干天天操| 青青免费在线视频一区 | 国产后入清纯| 日本久久综合| 人妻天天爽夜夜爽精品2| 日韩精品一区二区三区四虎影视| 亚洲AV无码成人精品久久| 久9re热视频这里只有精品| 国产一二三在线视频五十路| 在线二区不卡| 精品久久9| 亚州欧美一区| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 99re视频在线观看这里只有精品| 亚洲天堂AV在线播放| 亚洲色图尤物视频| 无码外流操逼视频| 亚洲国产精品无码AV久久| 国产精品扒开腿做爽爽爽视频| 久久精品28| 色97综合中文字幕| 久久草视频污视频| 亚洲性少妇| 色爽——AV| 美美91成人国产精品欧美精品久久久久久久| 日韩精品高清资源在线| 九九精品美女高溯喷水| 亚洲一区二区麻豆影院| 欧美日韩m| 久久久久久亚洲精品中文字幕人妻| 人妻天天爽天天爽三区| 亚洲欧美色图片| 在线毛片片免费观看| 色阁阁AV综合网| 久久久精品| 玖玖资源视频一区二区三区| 韩国女主播青草在线| 国产精品成人无码av| 成人五级久久| 亚洲不卡三级手机播放| 黄页av| 97精品综合久久网| 淫色网综合| 亚洲色图20p| 国产青一二三| 天天干天天拍| 久草婷婷| 超碰超碰欧美| 日韩一999精品| 99啪| 宗合情欲网| 亚射在线| 国产久久久久影院老熟女| 欧美精品91| 99热导航| 97视频在线视频| 老熟女综合网 | 丝袜狠狠草尤物 91| 久久原创中文| 中文字幕在线免费观看| 欧美欧美少妇| 国产久久久久久| 欧美十八禁视频| 国产精品熟女丝袜一区二区| 黑人黄片在线免费观看| 色五月大香蕉| sss视频华人在线| 天美麻豆黄色录像| 91老熟妇| 亚洲欧美综合区自拍另类| 国模吧 一区二区三区|