久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|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
返回資訊列表
一区二区三区机械有限公司| 91中文字幕制服丝袜免费视频| 成人一二| 亚洲国产中文字幕| 91中文精品日韩欧美在线| 国产精品蜜乳AV| 青草成人免费视频一COm| 99热导航| 啊啊啊啊啊啊啊国| 日韩免费看黄片| 99热在线播放| 蜜奶av| 熟女字幕| 国产av波波国产精品| 国产亚热在线久久| 日本黄色裸日本黄色裸体 | 激情 欧美 亚洲 小说| 二三四区精品| 日本一二区免费| 特级毛片特黄久久免费看| 成人怡红院| 亚洲激情深爱文学小说网站| 97在线观看播放视频| 亚洲 日本 不卡| 中文字幕版| 99综合视频一体| 成人精品一区二区91毛片不卡| 亚洲97网站| A啊啊在线观看| 天天插天天舔舔天天干| 超碰97欧美在线| 亞洲久久直播| 欧美日韩精品一区二区三区高清| 欧美AB在线| 九九热午夜欧亚国产视频| 久久中日麻豆| 日日夜夜国产综合| 日韩熟女视频二区| 日韩av电影网站| 五月婷婷深深爱| 精品一区二区成人动漫| 日韩人成网站在线播放| 精品久久久久久无码| 超碰色综合| 伊人骚琪琪亚洲天堂网站| 91精品国产91熟女| 啪啪视频免费在线观看| 国产一区96在线| 午夜理论片在线观看免费| 天天躁日日躁成人字幕aⅴ| 一级毛片电影免费看| 欧美激情区| 91精品人妻一品二品三品| 亚洲天天自拍| 色香av| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 国产精品国产| 精品制服美女中文一区二区三区| 亚洲清纯综合| 97资源亚洲| 欧美—性—交—色| 亚洲色人| 亚洲av影音先锋| 乱伦熟女专区| 温婉少妇玩3p| 91xingse| 欧亚日韩三区| 成人草草视频| 欧美色图亚洲激情| 亚洲精品人妻吞精av| 久久一二三四不卡 | 一区二区视频在线播放| 青青操狠狠撩| 操迟操逼在巾线Fre看| 大香网站| 欧美亚综合色图| 婷婷国产精品九区| 日韩成人小视频| 欧美亚洲91| 五月亭亭六月丁香| 白嫩国模丰满一二三区| 久久免费中文字幕在线观看| 手机av天堂久久久久| 高跟伊人julia ann| 亚洲色情在线影视| 亚州综合网| 综合五月婷婷亚洲一区| 欧美中文字幕一区| 欧美高清16| 亚洲国产精品V?在线播放| 日本一区二区不卡精品| 亚洲综合婷婷| 美国美女AV在线| 国产av热热色| 少妇一区二区三区在线观看| 欧美在线|亚洲| 色噜噜国产精品视频一区二区| 欧美日韩大香蕉| 中国东北熟女老太婆内谢| 婷婷综合久久| 欧美一区二区三区另类精品| 欧美五区| 免费视频在线观看啊啊啊啊啊| 最新亚洲风情电影| 亚洲成人贴图| 在线观看国产黄色| 亚洲综合贴图91 | 91色图片| 啊啊啊啊操死我| 欧洲精品二区| 91亚州日韩高清| 成人激情无码在线视频| 欧美在线色图| 成人26uuu| 中亚精品极乱| 蜜臀久久久99久久久久| 91人妻Pr| 欧美综色欧| 在线看的av| 少妇国产不卡| 99999国产| 大屁股国产在线视频| 成·人免费午夜在线观看| 色婷网| 天堂亚洲精品久久老牛| 精品人妻av在线播放| 一区二区三区男女操逼黄色小电影| 制服乱伦| www.成人无码| 精品国产精品一区二区| 久久久久久久久久久精| 婷婷五月综合在线| 视频在线97| 91丨熟女丨丰满熟女| 99久久久无码国产精品性男| 欧美中字不卡| 日本一区二区不卡精品| 亚欧操逼片在线观看 | 狠狠婷婷亚洲中文综合久久| yirendaxiangjiashipin| 大香蕉草草| 五月婷婷综合激情| 久久久96| 欧洲精品一区二区三区| 精品在线蜜臀| 蜜臀AV成人精品蜜臀| 91精品微拍福利| 日韩视频小说在线观看 | 蜜桃成人1区2区3区| 91在线视频国产网站| 久久久久中出| 日本视频一区二区三区| 亚洲另类色综合网站| 99视频只有精品| 夜夜欧美 | 插老姨肥穴| 国产日韩久久| 亚洲一区二区专区-国产丝袜精品丝袜-成人AV| 亚洲制服aⅴ中文字幕| 久久久久极品| 性吧在线视频| 久久国产精品m码| 人妻在线臀日韩| 国产精品毛片?v一区二区三区| 日本免费一区二区不卡| 九九九九久久久| 欧美欧美啪啪视频| 330Dv国产女人终合视频极品人与兽| 国产91av在线播放| 婷婷性网| 欧美色日本| 激情综合亚洲| 亚欧免费| 亚洲**2021在线观看| 四虎精品一区| 国产第11页| www.色综合| 东京热视频网| 快灬快灬 一下爽蜜桃在线观看| 日韩三级在线观看mp4| 免费视频a级毛片免费视频| 天天综合网网欲色| 欧美,亚洲,日韩,v,天堂,手机在线观看| 日韩国产中文字幕| 人人 操人人 操人人| 自拍六区| 91在线观看,天天综合| 亚洲激情 欧美色图| 亚洲一卡2卡3卡4卡乱码网站| 日日摸日日碰夜夜爽视频| 亚洲人在线| 偷看洗澡一二三区美女| 最新av网站在线观看| 偷偷人人精品女女久久| 熟女网站最新| 久久久久久久久久黄色网| 极品极品色影院| 性综合网| 欧美成人精品一区| 九七人妻在线| www.91欧美| 欧美 中文字幕 一区| 综合色色婷婷| 国产18精品亚洲精品| 久久男人精品| 无码外流操逼视频| 欧美色网络| 久久久久久999| 色97综合中文字幕| 免看60秒涩涩视频| 日韩无码服务区| 97一区二区三区视频| 亚洲情色电影网| 日本操嫩b网| 亚洲精品一二区| 2021国产成人精品久久| 秋霞Av理论一级在线| 国产白丝网站| 精品人妻一区二区三区免费视频| 懂色av中文字幕| 久久久久斤小| 欧美视频一区二区三区| 亚洲少妇视频| JuliaAnn丝袜熟女系列| 亚洲欧美日韩不卡人妻| 亚洲色图欧美色图综合| 色色九区| 超碰97人妻| 91无码西班牙视频在线| 日本潮催一卡操| 91熟女丨老女人| 国产一二三在线视频五十路| 黄色操人| 亚洲码专区| 青娱乐日韩无码| 粉嫩不卡一区二区性爱| 亚洲丁香花色| 免费视频在线观看啊啊啊啊啊| 精品成人av一区二区三区在线| 熟女人妇一区二区三区| 男人天堂2012| 人妻少妇色综合| 一个人在线看的黄色电影网站| 人妻精品一区二区三区| 国产美女高潮视频| 深夜福利黄片| 亚洲精品精品一区二区| 狠狠狠狠狠狠| 久操在97| 搡老女人老91二区| 欧美五十路熟| 激情四射五月天| 爱爱60秒免费视频| 欧美色图人妻| 国产久久久| 午夜美女福利视频| 日韩Va亚洲va欧美Ⅴa久久| 久久精品色欧美aⅴ一区二区| 五月婷婷色色| 久久美国毛片| 亚洲 欧美 日韩另类 麻豆| 丰满人妻-区二区三区免费看 | 欧美日韩性爱无码| 五月丁香综合啪啪| 国产13区| 好湿好紧视频| 青娱乐欧美激情一区二区| 艹少妇网站| 人妻天天夜夜爽一区二区| 麻豆福利视频导航| 91国模| 日本孕妇一区二区视频操逼免费看 | 色综合av综合久久| 久久老子无码午夜伦不卡| 2018色综合天天操| 伦在线97| 综合影院永久入口国产| 91强热人妻| 日本曲间由美性生活片| 日韩AV噜噜噜一区二区三区四区| 91天天综合日韩欧美| 天天操天天干一区二区| 爆乳免费黄网站| 91无码人妻精品一区二区三区蜜桃| 在线播放成人高清免费视频 | 麻豆一区二区三区精品| 大肥女高潮bbwbbwhd视频| 91精品伊人久久久大香线蕉91| 日韩欧亚太美不卡| 欧美一二三| 欧美日韩国产色图在线| JULIA人妻风俗店中出电影| 欧美欧美少妇| 亚洲一区二区性爱电影| 欧美,日韩,中文,另类| 欧美aa一级片| 色综合久久av| 久久欧美1卡2卡3| 色噜噜狠狠色综无码久久| 黄色人人| 中文字幕日韩人妻视频一区二区三区交换夫妻| 成年人网站在线免费观看| 97人人草| 夜夜爽夜夜操| 国模精品一区二区三区苹果色戒| 嫩草黄页| 色婷婷五月天| 视频国产欧美在线播放| 欧美97在线观看| 亚洲本色精品一区二区久久| 日日A∨| 国产AV色黄看到爽| 豆1无夜无码| 操操逼操操逼操操逼逼| 欧美18老人禁| 偷拍片久久| 国产日韩欧美亚洲精品95 | 91亚·色| 亚洲伊人久久综合97| 18精品一区| 国产一区二区三区免费视频在性观看| 极品丝袜无码| 91被操| 性生活无遮挡纯毛片在线看| 顶级丝袜熟女一区二区三区| 加勒比无码毛片| 麻豆久久久一区二区| 亚洲欧美情色| 骚货| 国产精品999zyz| 久久9精品网站| 91中文在线| 又大又大又大又粗爽高潮观看| 久久人妻四季| 乱伦Av网| 久一区久久蜜桃| 91九色丨国产丨爆乳| 久操com| 亚洲中文字幕久久无码精品| 91在线欧色| 狠狠中文字幕| 9丨久久九九九| 青久操| 3p国产色噜噜一区| 五月丁香激情四射| 久久成人精品| 99国产在线绯色一区| 18禁免费视频| 亚洲一区二区三区婷婷| 破处bbq| 精品无码一区二区人妻久久蜜桃| 婷色五月| 一区二区三区四区免费视频| 黄色无码高清黄色无码网站| 91美女国产在线| 91黑丝露脚| 芊芊操逼视频无码| 国产操逼网站亚洲一级黄色| 成人久久久精品| 国产欧美精品日韩区二区麻豆天美| 影音先锋每日最新资源在线观看| 久久久久久久久女黄| 99爱久久视频频| 国产精品久久久久久久毛片1| 91色插| 亚州国产成人精品女人久久| 久久25| www.天天干| 国产乱码精品一区二区三区四川| 中国AAAAAA黄色片| 日韩精品一二三| 亚欧美综合网。| 五月激情在线| 亚洲夜夜欢无码一区二区| 欧美v亚洲v综合v国产v妖精| 亚洲自拍97| 久久久国产护士丝袜美腿一| 97网址97| 一区二区三区色综合| 色婷婷综合久久久久中文一区二区 | 久久一二三四五六七八九区区区 | 四虎午夜影院| 亲子敌伦对白在线播放| 青青操日韩| 操老熟女AV| 免费成人在线熟妇网| 久久久久日本视| 久久五月天婷婷| 国产无套粉嫩白浆在| 三级特黄60分钟播放| 国产在线观看一区二区三区| 欧亚日韩中文在线| 91操熟女| 亚洲综合影院| 伊人专区一区二区三区| 超碰无码加勒比| 中文字幕天堂在线| 亚洲图片色图欧美另类| 91精品女厕偷拍视频| 草草影院最新网址| 久久亚洲欧美中文字幕国语| 国产日韩欧美操逼视频| 天天色天天干天天射| .精品人妻一区二区三| 成人av福利在线观看| 亚洲男人综合| 另类一区| 99热9| 人妻激情另类| 99在线视频播放| 日韩色女精品| 欧美高清16| 蜜臀久久99精品久久久电影| 最新无码国产| 久久久久国产精品片区无码直播| 五月婷婷激情综合| 嗯嗯嗯不要不要免费视频| 91色爽欧美| 99xav| 99精品综合久久久久五月天| 易易A毛视频| 成 人 A V免费视频在线观看| A级片日韩欧美国产欧美视频精选观看| 婷婷在线视频在线观看| 亚洲成人福利电影免费| 五月色综合| 91大胆欧美| 麻豆精品天美| 伦理第一页| 亚洲最新Av| 秋霞无码av鲁丝片一区| 精品性爱一区二区| 很黄很污的免费网站| 超碰在97| 另类亚洲一区二区三区| 国产操逼逼网| 一区二区三区 丝袜 高跟 美腿| 亚洲日韩av一区二区三区百合| 亚洲日韩熟女人妻高清在线| 亚洲人妻爽爽爽| 人妻献身系列第54部| 717影院理论午夜伦八戒| 台湾佬激情综合| jiujiujiujingpin| 国产高清自拍视频| 色综合久久久久| 欧美高潮在线| 91日日夜夜| 又粗又长又大国产不卡| 丁香六月啪啪| 国产日韩欧美| 亚洲在线网站| 夂久色| 色悠久久久av| 色综合一区二区三区| 变态乱伦伪娘灌肠一区二区| 91N五十路| 大茄子熟女AV导航| 凸凹视频在线观看| 97频视在线| 亚洲无码 国产无码| 亚洲福利中文字幕在线| 久久的网站啊啊啊啊啊| 亚洲色图一区二区三区| 精品成人av一区二区三区在线| 伊人国产av| 亚欧美综合网| 五月丁香综合| 国产精品午夜福利| 蜜乳AV色欲AVAV无码| 无码视频一区二区| 国产精品美女久久久久AⅤ国产馆| 韩国女主播青草福利视频| 亚洲高清欧美总合| 久久99视频| 97色欧洲| 狠狠操天天干| 日韩三级av片| 国产 码在线成人网站| 91 国产丝袜在线播放-百度| 久久九九国产精品| 五毛骚逼极品美女怕怕| 国产情侣自拍在线播放| 亚洲精品蜜桃久久久| 欧美劲爆视频一区二区| 久久宗合97| 免费视频在线观看啊啊啊啊啊| 久久久久久69国产一区二区 | 亚洲人精品午夜不卡| 人人妻人人玩人人澡人人爽| 国产精品嫩草影院免费| 日韩国产成人自拍视频| 啊啊啊啊啊啊啊啊啊啊在线观看| 日韩成人精品| 2017大香蕉国产精品久久| 国产9 9在线 | 亚洲| 人人操av| 亚洲国产美女久久久久| 久插综合| AV污污污污| 97人人色| 男人天堂站| 中文字幕第9页萱萱影音先锋| 欧亚乱色熟一区二区三四区| 中国操逼无码| 久久机热| 91男女啊啊啊| 特级特黄一级毛片免费| 啊啊啊久久久视频| 婷婷久久久| 五十路三区在线| 国产视频一区二区三区久久亚洲天堂| 操www| 精彩久久中文| 麻豆视频test| 911av网站免费观看| 99热在线不卡| 亚洲欧美日韩综合在线尤物| 国产精品久久久久9999小说| 久久人妻97久久久久久久| 精品人妻中文字幕4399| 伦理日韩国产久久| 亚洲精品男人的天堂| A级在线视频| 狠狠干妹子| 99久久久无码| 国产精品无码AV网站| 老妇女91| 午夜久久一区二区无码中出| 中文字幕一区二区韩| 强乱老妇中文字幕| 国产中文福利| 蜜臀久久一区二区| 小情侣高清国产在线视频| 无码人妻精品酒店| 高潮综合网| 这里只有精品久久| 国产色呦呦| 日本人妻最新在线中| 日本 情色 1区2区3区| 青青草好吊色| 亚洲图片欧美另类综合免费视频大大香| 亚洲无码99| 国产极品99热在线播放69| 亚洲色图一区二区三区| 日本精品一区二区三| 久草精品热视| 五月天婷婷综合网| 日本五十路熟女一区二区| a男人的天堂久久一级A毛片| 美女91网| 国产日产欧产美韩系列麻豆免费| 亚洲综合五月天婷婷丁香| 美女极品一区二区三区| 国产黄色视频久久| 日韩特一级久久| yiren97| 99re6久热只有精品6在线直播 | 成人免费性爱视视| 婷婷六月色| 天天干夜夜鈤| 毛片麻豆91糖心精品毛情片| 东京热男人的天堂网| 久草免费在线一区二区| 大香蕉久| 综合操逼| 影音先锋视频在线| 亚洲第一精品在线视频| PMv在线观看| 五月亭亭六月丁香| 欧美巨大性舒爽顶到了| 97在线视频观看| 丝袜美腿av女优在线| 中文字幕午夜精品久久久| 超碰欧美在线欧美| 欧美日韩亚洲电影| 97国产|免费| 欧美懂色综合网| 色屁屁影院www国产| 强被迫伦姧在线观看无码网站| 99e久久国产精品| 人人 操人人 操人人| 艹少妇网站| 最新国产精品久久精品| 国产少妇与亚洲av| 亚洲诱惑| 亚洲第一页色网| 少妇久久久久久久久| AA级电影三区| 日韩av影片在线观看| 久久精品国产精品亚洲艾通辽熟妇| 中文字幕二区日韩天堂| 操b网站亚洲无码| 99re在线视频这里只有精品| 婷婷五月天激情四射| 中文字幕日韩专区精品系列| 国产无码一二三区| 怡红院怡春院| 久久久三区二区一区| 天天躁日日躁狠狠躁| 亚洲精品一二区| 天天爽夜夜操| 加勒比AV天堂| 少妇久久久| 啪一啪免费视频| 大香蕉伊人网WWWn0n| 亚洲性感丝袜诱惑在线观看| 激情小说在线视频| 天天做日日爱夜夜爽| www四虎| 欧美色吧综合| 超碰色男人操熟女| 麻豆天美国美国产| 欧美第五页| WWW操逼| 91亚州日韩高清| 女上位精品在线| 久久草草亚洲蜜桃臀| 五月婷在线| 激情人妻另类| 91新在线欧美| 久久97精品久久久久久久不卡| 中文字幕精品一区二区精| 麻豆天美国美国产| 91情色在线| 午夜精品久久久久久久99蜜桃一| 操逼精品视频| 成人国产视频在线观看| 长长久久曰曰夜夜成人网| 舔人妻中文免费视频| 国产福利在线视频网站| 熟女天天干| 国产精品精品系列在线观看| 黑丝少妇| 欧美激情 亚洲色图| 久久精品国产亚洲AV高级北京| 日日夜夜国产综合| 一区二区三区美女超清| 久操99| 啊啊啊操死我| 国产精品一二三免费网站| www.成人无码| 亚洲精品乱码久久久久久蜜桃麻豆 | 国产精品一区二区三区在线密挑| 成人开心网在线视频| 国产真实野战在线视频| 久湿久久| 久久高清欧美国产| 97在线资源| aaa一级黄片| 熟女乱伦A| 天天操夜夜操| 亚洲国产精品成人综合| 高清成年美女黄网站免费大全 | 欧美性爱三区二区| 天美传媒AV国产在线| 八戒午夜福利理论片| 人人澡综合涩| 尤物网址| 99精品无码| 麻豆这里只有精品| 麻豆成人影音在线| 久草综合京东| 曰韩操B| 欧美色日| 婷婷五月色| 黑人猛交| 亚熟hd视频在线| 国产精品爽爽va在线观看98| 99热欧美| 蜜桃中文字日产乱幕4区| 操逼逼一区视频| 日本黄页视频在线观看| 婬女免费一二三区A片| 亚州性色| 久久骚少妇| 极品极品色影院| 夫妻天天操岛国视频| 久久97资源 网| 中文字幕123| 78精品| 丝袜综合| 婷婷深爱五月| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 青娱乐国产剧情av一区| 国产中文福利| 婷婷五月天网| 成 人片 黄色大片| 五月天婷婷社区| 日日天天久久啊啊aaa| 黄色区免费观看中文字幕| 97资源亚洲| 欧美综合制服在线| 欧美在线视频99| av强奸乱轮| 欧美少妇色图| 熟女露脸激情自拍视频| 91啪9色| 色噜噜人妻丝袜a∨先锋影 | 综合欧美日本三级| 伊人操你| 国产精品久久泡妞网站| 中文字幕AV片| 中文字幕 一区二区 亚洲无码| 国产午夜无码片在线观看影视| 国产深夜福利| 国产又黄又爽又刺激久久久久久| 国产精品久久久午夜夜伦鲁鲁| 台湾佬中文娱乐自偷自拍| 999岛国大片| 国产性久久久| 欧美性爱精品七区| 屁股久久久久久久久久| 久久久久久无码人妻中文字幕| 亚洲情色一区三区| 992这里有精品| 麻豆国产96在线| 奇米四色影视777久久久| 校园春色亚洲| 精品人妻一区二区三区视频在线| 青青草玖玖爱| 骚逼一区二区| 麻豆区99999| 91人妻爽爽人人做人人澡| 人人插人人搞人人操| 爽极品影院| av爱爱爱| 免费观看网黄| 欧美区亚洲区偷拍区| 一起草在线视频| 超碰人妻97| 青青青在线高清视频在线一二三四区 | 亚州熟妇精品| 欲射影视| 校园春色中文字幕AV| 成人A片男人的天堂| 国产精品熟女AV中文字幕在线播放| 五月婷婷六月色| 91久久久久久| 激情综合五月| 日韩啪啪啪啪啪| 日本狠狠干| 婷婷五月天影院| 中出91| 久久亚洲骚逼综合| 午夜精品99久久久久传媒| 性欧美另类高清| 一区二区三区 丝袜 高跟 美腿| 日韩AV电影网站| 国产蜜臀精品一区免费尤物| juliaann精品熟女一区| 影音综合网| 国产乱人妻精品入口| 干B| 夜夜操夜夜高潮夜夜爽国产精品区| 亚洲天天影视色综合| 国产一| 亚洲色图日韩丝袜制服一区二区五月在线| 97操碰| 91亚洲综合| 精品无码欧美三级| 久操网无码在线| 两性综合网| 盗摄 精品 另类 一区| 美女在线H91| 日韩丝袜高跟制服在线观看| 日韩综合色网| 国产精品网址| 免费啪啪av| 国产乱伦一二三区| 偷拍欧美激情| 小骚逼被操的爽不爽| 熟妇无码视频三区| 97干色| 亚洲系列第一页| 99精品在线| 青青草十区九区爱夜| 天天草AV| 无码人妻精品酒店| 天天躁日日躁xxxxx| 亚洲精品久久久久久久蜜桃臀| 亚洲性爱高潮影院| 九一性生活免费视频| 蜜臀久久久99久久久久 | 天天综合网入口~91| 欧美最婬乱婬爆婬牲视频| 九九综合九九综合| 3p国产欧美99热| 亚洲欧美成人网站AAA| 久操网无码在线| 99热色精品| 久久久111| 亚州男人天堂| 亚洲 一区二区 自拍| 日韩人妻少妇中文字幕| 久久美国毛片| 肏逼视频日本| 无遮挡猛进视频免费无限观看| 丰满少妇一区二区三区四区观看| 麻豆a'v电影| 九九精品99| 中文字幕老熟妇黄色视频| 精品久久九| 午夜性生活av免费在线看| 搡老熟女老女人老熟妇免费视频| 香蕉一区二区三区在线视频| 超碰97.com| 26UUU欧美激情一区二区| 五月丁香综合网| 青操影院| 亚洲国产婷婷在线播放| 久久久久久久久久久久久久9999| 亚洲精品久久久久久| 九九综合久久中文字幕| 久久久亚洲精品电影免费看| 日韩精品亚洲一二三| 乱伦Av网| 欧美色图 人妻| 国产无马在线| 97干在线看| 天天综合网91| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 蜜桃无码AV一区二区| www.男人天堂| 综合五月婷婷亚洲一区| 69精品人人人人| 青娱乐福利99| 红桃视频高潮| 亚州熟女乱伦| 熟女中出视频| 九九精品无码专区免费| 欧洲免费一区二| 韩国一级做a久久久久| 97久久精品亚洲| 少妇高潮九九九九| 蜜臀久久一区二区| 69一区二区| 亚洲中文制服诱惑| 日韩熟女无码| 乱老熟女一区二区三区| 日熟女| 伊人aaa| 国语av最新自产拍在线观看| 色爽——AV| 熟女视频久久| 亚洲色人阁| 91老熟女逼| 中国农村熟妇毛片视频| 黄色不卡视频| 51一区二区三区| 日韩欧美中文字亚洲慕| 狠狠干婷婷| 69精品| 9超碰免费| 欧美一级久久久久久久大片动画| 九月丁香综合网| 精品视频在线观看精品| 久久性爱视频99| 操操操五月天婷婷丁香影院| 草草草视频在线免费看| 大香网站| 欧亚在线视频| 午夜精品久久久99| 成人国产二区三区在线,男女精品。| 中文字幕一区电影在线观看 | 欧美疯狂做爰xxxx| 啊啊啊啊啊啊在线看| 亚洲在线观看| 大黄片做爱的大的| 国产13区| 少妇久久久久久| 自偷自拍的亚洲视频| 伊人久久蜜月| 91午夜无码| 久久香蕉国产线看观看亚洲女人 | 欧美疯狂做爰xxxx| 国产精品3| 大香蕉AV在线| 成人性爱免费播放| 免费αV在线视频| 美女丝袜激情小说| 大胆91| 国产色综合亚洲色综合吹潮| 亚洲综合草草| 色穴精品| 色香色欲天天综合网天天来吧| 免费视频一二三区| 伊人991| 欧美精品四区| 夜夜影视四色| 精品欧美老熟女一二区| 日本道日本道中文字幕日本道最新日本道在线观看 | 天天干人妇| 欧美精品69性爱| 亚洲天堂少妇| 欧美日韩婷婷中文| 久久精品人体| 91干熟女| 吖在线不卡一区二区国产剧情| 99草精| 殴洲老熟女| av优播| 综合色色网| 亚洲字幕一区二区| 农村女一级毛卡片| 97人人夜| 东京热99999| av情色影音| 色综合美国| 熟女突然公开看18禁影片| 91精品亚洲内射孕妇| 超碰2017| 日本三级精品| 毛片99-全集电影手机免费观看完整-B029AV | 五月婷婷激情网| 欧美日本视频一区| 天天插天天操天天摸天天射天天看| 男女啪啪网站免费视频| 日韩无码第3页| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 偷看洗澡一二三区美女| 日本成人A片免费看| 一级片视频啪啪| 天天干18禁| 久久久久女教师免费一区| 加勒比性爱成人在线| 97资源免费视频| 老熟妇综合| 97色视频在线| 四虎免费看黄| 国产女同性恋视频| 欧美精品第四五页中文字幕在线观看| 超碰日本97美女人妻人人玩人人爱 | 自拍盗摄一区| www.97在线| WWW4虎| 欧美色图片91| 日日A∨| 天天插夜夜爽| 日韩精品电影| 日韩 女同 综合| 97视频新免费| 亚洲交换| 校园激情狠狠四射| 婷婷色香伊人| 久久久九九九| gogogo免费高清看中国国语| 午夜超爽| 日韩性爱电影一区| 亚洲1区| 看看小穴| 五月天伊人| 中国熟女网站| 亚洲好色人妻| 欧美 亚洲 在线| 成年无码动漫av片无尽在线| 精品无码欧美三级| 国产一进一出视频网站| 蜜臀aV午夜一区二区三区| 日本黄色XXX| 亚洲图片欧美偷拍| 在线免费观看高清无码视频| 亚洲一区日韩精品| 顶级丝袜熟女一区二区三区 | 97操综合| 好爽视频在线观看| 20cm女自慰在线日韩欧美| 91午夜无码| 超碰av在线| 91新在线欧美| 狠狠操狠狠燥| 999精品乱码| 偷拍三区| 激情色播| 国模不卡一本二本三电影| 欧美天天在线| 91久久青青草原精品| 久久国产乱子伦精品免费女人| 激情久久av一区av二区av| 国产精品91一样| 人妻超碰青青草98| 97干97色| 国产第25页在线观看| 蜜臀av在线播放一区二区三区| 欧美高潮在线| 欧美—性—交—色| 午夜操逼不卡| 日韩三级视频一区二区三区| 四季AV一区二区凹凸精品小说| 自拍啪啪视频| 国产精品露脸在线观看| 99久久九九| 免费成人在线熟妇网| 日韩大香蕉| 久久精品店| 91+欧美| 久久东京热久久| 乱伦AVxx| 日日骚 av| v91av| 精品国产乱码久久久久久口爆网站| 亚欧精品久久久久久久久久久| 91强在线播放| 国产91av在线播放| 艹我哪美一区无码| 日本 情色 1区2区3区| 免费家庭乱伦视频| 乱人伦 国语对白:视频直接看| 999九九精品| 大香蕉乱级| 国产久久一区二区午夜| 久久久九九| 人妻中文字幕精品无码| 狠狠躁AV| 国产路线专区| 亚欧高清在线| 久久精品视| www.伪伪| 97免费视频网| 欧美亚洲自拍另类人妻| 五月婷婷六月色| 亚州五月| 黄aaaaaaaaaaaaaaaaaa色网站 | 色就色综合| 欧美性色综合网| 久久永久无码人妻视频| 五月激情影院| 亚洲丨在线| 97人人干人人操| 激情婷婷丁香网| 亚欧国产无码精品在线| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 精久久久| 天天日B夜夜干B时时操B| 超碰在线97国产| 国产操逼视频在线观看| 中文字幕丝袜美腿| 欧美精品69性爱| 97激情97激情| 操逼逼一区视频| 伊人丝袜美腿高跟在线观看高清| 翔田千里爆乳巨臀无码| 欧美色图片91| 亚洲黄片免费在线播放| 性色中出| 激情五月天插| 精品一区二区三区四区外站| 免费的很黄很污的全部视频| 欧美A√综合网| 人人人人插| 日韩欧美中文字亚洲慕| 成人在线视频网| 玖玖综合网| 久草视频制服诱惑| 人人操人人操人人人操| 久久久男人的天堂| 美国日韩黄色片| 欧美亚洲天天| 人人手机欧洲亚洲国产人妻| 欧美高清18A片| 午夜福利区| 久久夜黄色无码A级大片| 久久九九热| 久久小视频| 欧美巨大性舒爽顶到了| 殴洲老熟女| 睡产熟女乱伦| 超碰78| 97爱b| 任你草| 天堂v无码免费视频| 吉川爱美亚洲二区在线| 亚洲av强奸乱伦| aV中亚| 欧美综合 站| 这里只有精品视频| 最新国内自拍av免费| 天欧美在线| 国产精品老熟女一区二区| 久久精品国产AV一区二区三区| 蜜臀久久精品久久久久视频| 992这里有精品| 国产特级毛片AAAAAA高潮流水 | 一区二区三区精品久久| 色噜噜国产精品视频一区二区| 欧美黑人与女人91~| 大香蕉免费乱伦视频| 黄页av| 色眯眯av| 国产suv精品一区二区四| 强奸乱伦中文字幕AV| AV中亚| 久久超碰av在线| 台欧久久精品视频| 久久久久成人亚洲国产| 久久人妻| 蜜桃臀一区二区三区久久| 99国内精品| 日本在线视频导航| 国产av激情无码久久天堂| 97资源站国产精品| 人人妻人人色| 在线观看一卡二卡| 欧美另类天堂| 97硬碰| 床上啊啊啊一区二区三区| 一本一道波多野毛片中文在线| 96精品久久| 精品欧美日韩在线观看| av操操不卡| 狠狠干综合| 91free福利| www.黄色在线| 亚洲无码偷拍| 人妻天堂三区| 色综九九九一区| 天操老女人| 欧美综合色站| 日韩有码一区三区| 久久一区二区三区入口| 亚洲熟女少妇免费视频| 欧美亚洲韩国视频十五区| 黑人操一区二区| 99在线观看无大码| 无码在线亚洲| 后入福利| 国产一区二区三区视频在线看| 久久综合激情| 东北老女人的激情视频| 熟女人妻一区二区三区| 琪琪精品免费一区二区三区| 国产按摩一区二区三区| 欧美淫乱视频| 国产色呦呦| 成人九九| 久久HD| 婷婷色香伊人| 成人熟女视频一区二区三区| 91久久久久久| 在线国产探花| 新版天堂中文资源8在线| 一级啊性爱在线视频| 操逼国产免费| 日韩中文字幕人妻视频| 天天操夜夜操狠很操| 日韩黄色av中文字幕| 久久久久久电影| 美女写真| 精品性爱一二三区| 日韩av在线免费网站| 国产亚州高清国产拍精| 成人免费不卡在线视频| 亚洲九月丁香| 97最新在线播放视频| 婷婷香蕉| 97天天摸天天碰| 野狼激情网| 欧美中文字幕一区| 久久色一区二区| 黄色一区三区|