久久亚洲成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
返回資訊列表
精品亚州18| 97bbn| 国产400孕妇孕交群| 91n美女视频| 特级毛片特黄久久免费看| 97chaopengongkai| 久久久性少妇| 久久成人午夜狠狠| 精品免费1| 色999亚洲人成色| 国产v片在线免费观看| 欧美日韩亚洲电影| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 久久久久久久久久久久九| 亚洲AV小说| 午夜精品久久99蜜桃的功能章节| 日本一区二区不卡| 啊v视频在线观看| 中国乱伦一区二区 | 大香蕉色欲AV| ai欧美亚洲小说| 欧美天天综合网| 污污污8888| www.色综合| 欧美性生活男人的天堂| 色五月婷婷五月天| 超碰色美女| 黑人与人妻| 亚洲国产综合久久久性感熟妇| 日操粉逼逼| 人人看人人爰人人操| 色呦呦国产精品免费看| 成年人网站在线免费观看| 97这里有精品| 亚洲不卡三级手机播放| 翔田千里AV无码秘 三区| 天天肏夜夜肏| 探花视频免费观看国产专区| 成人免费视瓶| 国产精品一区二区校花| 国产精品宅男免费| 青草av在线| 黄片com.| 亚洲精品aa久久伊人| 天天操天天射天天日| 精品久久久久久无码| 久久久999| 亚洲天天综合| 小说区 图片区色 综合区| 99re视频在线播放青草| 香蕉视频欧美一卡二卡| 国产成人一级av88| 国内毛片国产专区二| 日韩一级成人毛片免费观看| 亚欧国产无码精品在线| AA丁香综合激情| 蜜桃无码AV一区二区| ?亚洲伊人伊成久久人综合网| 久久久久久精品免费看A级| 激情综合二| 天天天天天天天天天天干美女| 国产亚洲禁久一区二区| 亚洲五月丁香花狠狠干一区二区三区 | 久草老司机| 风月影院男女十八禁| 久草电影网| 97天天| 美女被啪到深处抽搐视频| 最新日本中文字幕| 十八禁成人网站在线观看| 色婷婷狠狠18禁| 九九热精品免费视频| 男人亚洲91首页在线| 天天操女人| 欧美 熟女 日韩| 青青草一区二区三区四| 五十路一区无码| yaouchengrenav| 黄片com.| 色五月第四色| 欧美片第一页| 啊啊啊操一区| 亚洲欧美综合网站| 91AV入口| 亚洲天堂综合AV| 亚洲天堂女优在线| 97中文字幕一区| 中文字幕av亚洲精品| 中文字幕乱码在线| 亚欧高清在线| 日韩传媒在线| 亚洲骚逼少妇| 天堂中文日本在线观看| 日韩精品熟妇| 人妻丝袜日本| 丰满高潮18xxxx| 超碰亚洲欧美日韩无| 天天透伊人| 中文字幕一品色图| 粉嫩粉嫩一区性色AV片| 嗯嗯嗯嗯啊啊啊好紧好大| 日日夜夜模| 午夜啪| 1024日韩| 久艹99| 欧美不卡在线一区二区| 亚洲国产欧美日韩人妻日中文| 91欧美巨乳| 国内毛片欧美香蕉精品| 91丝袜美女国产| 四虎免费视频| 国产三级多多影院2022国产AA一级毛片无码| 精品妇女一区二区三区| 久久久精品,3| 亚欧国产无码精品在线| 0755午夜福利视频| 久久亚洲婷婷| 91欧美情色| 无码天天操| 欧美午夜色妇色鬼| 久久AV无码AV| 中文字幕88av在线| 欧美一区二区三区四区综合| 色综合超碰超| av天堂手机版追回| 亚洲丝袜少妇在线| 国产老熟女| 上特色A在线| 丁香婷婷色五月| 夜夜春夜夜操| 天天干一干| 中文字幕一二三av| 一二三四免费视频| 加勒比伊人| 天天爽天天爽| 欧美色图片| 一区二区视频在线播放| 久妇网| 久久久精品国产亚洲伊人| 五月丁香激情综合| 欧美日韩亚洲五月天婷婷| 媚薬在线视频麻豆| 精品大全99999| 99热线麻豆 | 物业黑人 AV一区| 色网1| 欧美日韩不卡传媒| 日本精品中文字幕视频| 日韩卡一卡二卡三在线| 久久婷婷五月天| 九九九九久久久| 91 国产丝袜在线放观看| 色悠久久久av| 亚洲色图A| 一区二区视频在看| 亚洲视频1区| 亚洲无码久久久久久久| 91亚洲人电影| 久久 久久国内精品亚洲| 性欧美| dy888午夜老子影视达达兔| 人妻无一区二区三区| 美国精品国产精品| 内射白嫩美女| 91插B网站| 超碰色综合| 日韩精品1区2区中文字幕| 久久久久久国产精品| 欧美日韩少妇色情| 日韩精品人妻| 日本五十路熟女一区二区| caopeng97| 婷婷久草| 国产大陆天天艹| 内射白嫩美女| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 99在线无码精品秘 入口黑人| 超碰免费人人| 精品人妻一区二区蜜桃视频| 色在线综合| 久久人妻精品| 大香交| 秋霞一级A片黄色视频| 日韩av乱伦| 中文字幕人乱码中文字的预防方法 | 天美传媒精品久久视频| av在线免费一区二区| 欧美男人一区| 超碰97 线线 在现| 成人综合色网| 久操免费观看| 丝袜大香蕉| 天美传媒av一区二区| 精品人妻视频入口| 97视频观看| 蜜区区视频79 | 极品色| 99久久9| 久久精品成人一区二区三区蜜臀| 亚洲图片激情综合另类| 精品久久在线区一区| 夜夜高潮夜夜爽国产伦精品| 国模少妇一区二区三区| 久久久久人| 人人摸人人摸人人干| 日韩精品操少妇| 午夜啪| 久久欧美1卡2卡3| 欧美在线电影| 精品色色| 精品久久无码午夜福利| 久久久久久久六六| 丰满人妻无码一区二区三区| 是还免费视频1727我| 久久中文字幕一区不卡| 超碰人妻久久人妻中文97| 亚洲欧洲自拍图片专区满春格| 蜜臀av在线播放一区二区三区| 国产极品馒头逼| 无码99| 精品黄色电影| 91色综合激情| 亚欧免费| 视频黄站| 好湿好紧好爽 视频| 男人天堂东京热| 热天堂一区二区| 国产精品一区二区a| 综合网欧| 91精品伊人久久久大香线蕉91| 婷婷精品国产欧美精品亚洲人人爽| 国产欧美在线观看免费观看| 色爱欲亚洲| 尹人免费观看视频在线| 熟妇国产免费一区| 日韩成人综合网| 青青青青青手机视频| 色av中文字| 欧洲特黄毛片免费看欧洲毛片| 91人妻丝袜无码| 国产亚洲性生活视频播放| 加勒比综合a∨| 亚洲欧美精品福利在线| 国产精品久久久久久亚洲色欲| 91中文精品日韩欧美在线| 亚洲AV性爱电影| 啊啊啊啊啊啊啊网址在线观看| 亚洲色阁| 极品出轨视频网站| 啊啊啊啊啊操我视频| 青娱乐老司机视频| 日韩A优精品在线观看| 少妇国产不卡| 久久精品店| 69天堂| 久久99精品九九久久久婷婷| 精品久| 国产日韩区| 91久热| 欧美热图99| 国产精品农村妇女精品| 欧美黄页| 97超碰jingpin| 99国产精品久久久久久久成人热| 精品国产乱码久久| 吊色| 97天天弄| 操美女人妻| 亚洲成av人片色午夜乱码| 91精品国产91久久青草| 大香蕉手机在线| 亚洲欧洲精品成人| 欧美午夜精品久久久久久超碰| 日韩美女操b| 91社区伊人| 99在线视频播放| 啊…啊…操我用力操我| 一级黄色牲爱A级片| 中日韩免费看男女操逼大全| 97精品全部| 91九九九逼| 亚洲图片欧美日韩| 久久99网站| 性色av蜜臀av色欲aV| 日本一区二区中文字幕久久| 人妻91少妇| 久久久精品久久| 四虎884a| 最新加勒比丝袜在线| 大香蕉五月天婷婷| 国产女人操逼视频| WWW啪啪的com| 国产日韩精品人妻久久久久色欲网站| 亚欧无码线免费观看视频| 国内一级精品| 亚州男人天堂| 啊啊啊爽爽| 香港久久久| 欧美人妻熟女在线| 伊人宅男大香蕉| 大干人妻| 欧美se综合| 中文字幕青青草| 日韩无码服务区| 久久久9 9 9精品| 亚洲清纯唯美| 97精品视频在线播放| 欧美成人国产精品| 欧美日韩系列| a啊啊啊啊啊啊啊啊一区二区| 亚洲欧美天| 美女十八禁| 91老妇女| 看日韩黄片| 人人操,人人液| 大香蕉一级黄色片久久| 国产在线综合网| 日本人妻中文字幕| 无码精品久久久天天影视| 国产精品999zyz| 一级A片女人高潮叫床| 韩国午夜理伦三级好看| 中文字幕精品区先锋资源| 日韩av影片在线观看| 久草福利在线资源站| 亚洲精品亚洲人成在线麻豆| 色爱国产| 91天天日| 亚洲的天堂网| 综合亚洲欧美| 久久午夜鲁丝片| 久久精品国内Av熟女高清| 日韩美女啪啪一区| 久操婷婷| 亚洲精品骚逼| 四虎免费在线播放| 秋霞怕怕片| 亚洲第一精品在线视频| 精品中文日韩字幕视频| 日本免费二区三区| 1000部熟女视频在线观看| 久久精品日韩| 丁香五月天堂网| 国产玖玖| 久射吧| 神马久久久久久| 久久久久亚洲三级电影| 国产精品久久久久久久久AV大片| 91狠| 这里只有97精品| 超碰精品日韩欧美国产| 开心五月婷婷激情| 妇女视频网站| 欲香欲色综合天天伊人| 国产成人无码a| 自拍偷拍2025在线观看| 91丝袜美女| 一区二区三区四区在线不卡| 97色碰| 色成人Www精品永久观看| 大香蕉伊人久久| 亚洲一区二区 麻豆传媒| 啊啊啊水好多| 久久毛卡| 天天射夜夜| 熟女人妻一区二区三区| 日本日皮视频逼| 成人日本精品九区| 欧美激情专区| 婷婷久久网| 成人片视频| 日本孕妇一区二区视频操逼免费看 | 蜜区区视频79| www黄片免费看com| 国产精品欧美激在线| 丝袜 中出 制服 人妻 美腿 中文字幕| 欧美性爱日韩性爱| 天美传媒Av在线| 小说区 图片区色 综合区| 久9视频| 91黑丝操| 中文字幕亚洲热播人妻| 久久久九九九九| 久久精品国产AV一区二区三区| 亚洲精品视频二区| 久久大香蕉97| 五月天激情网图片| 久久久久女教师免费一区| 国产区91柔拿会所技师| 性性欧美| 日韩强奸av| 久久99国产综合精品女同| 97中文字幕九区| 久久五月丁香| 久久久久夜夜夜夜| 情侣开房子拍 日韩无码 女的很漂亮| 欧美性91| 色蜜AV| 91欧美综合| 99久久综合| 日韩三级av片| 久久人妻视频| 美女黄站| 四虎影库国产精品免费| 亚洲精品久久久久毛片A片拉屎 | 久久99综合| 欧美日韩国产电影| 上海一级黄片| 亚洲一二三四区在线免费看视频| 超碰色男人操熟女| 中文字幕女同在线| 一线黄色免费性爱片| 97精品97| 91九色蝌蚪在线观看| 97国产色综合| 日韩国产不卡在线视频| 亚洲综合夜色| 日本理论在线| 91欧美亚洲| 日产中文字幕2020| 国产99久久99热这里只有精品15 | 精品国产乱码久久久久久口爆网站| 欧美日韩国产人人| 性爱av网站| 亚洲有码视频二区| 欧美色日本| 尤物一级在线免费观看| 美女网站91| 久久久工口| 久久久久久亚洲Av无码| 操逼短片| 国产精品一区二区黄片| 激情一区二区| 中日韩久久人妻一区二区| 国产内射爽爽大片| 蜜桃狠狠色伊人亚洲综合 | 婷婷丁香五月天综合东京热| 久久精品久久久久久久| 国产综合久久久鬼色| 亚洲αv一区二区三区| 久久久久久99999国产精品| 亚州色交| 自拍大香蕉乱插| 91丝袜| 粉嫩AV输入| 五月天婷婷基地| 99久国产精品午夜性色福利| 在线啊啊啊| 一区二区三区四区五区高清无码永久视频 | 九九热在线精品视频| 不卡啪啪视频| 激情婷婷黑人91| 久久99手机免费视频| 自偷自拍的亚洲视频| 中文字幕精品免费一区二区| 丝袜视频网国产90| 亚洲区限制级| 夜夜爽妓女| 白嫩国模丰满一二三区| 色欲Av人妻精品一区二| 欧美精品系列| 麻豆 亚洲 97| 91精品电影18| 婷婷久久网| 久久五十路熟女人妻| 久久系列| 国产又粗又长又大的视频| 乱码熟妇人妻久久久| 久久久久久久人妻| 国产熟女免费观看久久| 国产又黄又粗的视频| 91女优在线观看| 在线女人91| 婷婷五月色| 日本在线播放不卡一区| 岛国网址国产 | 亚洲色图国产另类| 手机不卡视频不卡在线一二三区| 开心激情婷婷| 五月婷婷啪啪| 免费在线观看国内色片网站网址| 91深夜夜| 亚洲成人av电影在线| 啪啪性爱免费视频| 国产精品一区二区a| 大茄子熟女AV导航| 9久久久久久| 中出20p| 欧洲一区二区三区四区在线观看| 天天草AV| 久久精品成人| 韩国国产欧美情侣视频在线| 美女诱惑在线一区| 伦在线97| 综合久久99亚洲人妻中文在线| 日本精品人妻少妇一区二区| 久久99黄色卞西瓜| 小草三级久久观看| 日韩情色视频| 综合网欧| 9久精品视频在线观看| 艳尻美人妻| 国产农村妇女精品一| 亚洲色图激情小说| 天天弄欧美| 美女的肌被草喷水视频| 日日夜夜青青草母狗| 伊人成人情色综合| 韩日巨乳美女免费视频在线观看| 久久久久久久久国产| 夜夜操夜夜高潮夜夜爽国产精品区| 久久中出在线| 韩国嫰模上门援交视频| 亚洲素人综合| 人妻人妻天天碰| 少妇人妻在线| 97综合国产| 蜜臀无码视频在线观看| 亚洲中文字幕熟女| 午夜啪啪片| 岛国毛片在线观看免费| 欧亚乱色熟女一区二区| 99综合视频| 情色日播放AV| 日韩电影天堂视频一区二区| 日韩欧美~中文字| 色妇综合网| 亚洲成人精品在线一区| 玖玖爱免费观看视频| 中文字幕在线免费观看视频| 91n美女视频| 成人精品一区二区三区| 人妻天堂三区| 操逼免费视频无码国产| 极品极品色影院| 欧美成人9797| 欧美色日| 日韩无码人妻| 操比国产| 久久av色| 亚洲深夜福利| 高清国产性猛交xxxx乱大交| 9 9精品一区二区三区| 大稥蕉免费视频这里只有精品| 77国产精品| 97超碰精品图片| 一级人妻性爱视频| 五月婷在线| 色老牛| 九九九久久久| 亚洲AV无码乱码在线观看性色| 久久久久久久久久久97| 骚女高跟AV在线| 亚洲综合欧美| 欧美性爱另类综合| 亚洲美女30b| 国产美女高潮视频| 男人a天堂手机在线版| 国产怡红院| 天天日骚逼熟女| 亚洲另类小说卡通动漫| 欧美久久九九| 亚洲黄色| 99综合免费视频| 欧美91久久久久| 国产精品嫩草久久久久| 亚洲熟妇乱女区二区三区| 国产91丝袜 在线播放| 无码精品人妻一区二区三区妖精| 中文字幕少妇色 | 香蕉免费一区二区三区不读 | 天天综合AV| 国产91丝袜 在线播放| 日韩性爱再线视频| 久久人妇| 亚洲制服aⅴ中文字幕| 精品国产污一区二区三区| 熟妇一区二区| 九九av| 美国三级日本三级久久99| 美女视频尤物网在线看| 中文字幕91综合| 狠狠干妹子| 亚洲超碰AV| 91美女視頻| 天天躁日日躁xxxxx| 欧美成人精品一区二区三区| 久久只有精品| 偷拍伦理视频| 国产精品久久久久久久久久久久| 亚洲老熟妇xxx| 亚洲丝袜诱惑| 久久手机视直播| 亚洲一区二区三区在线激情| 精品人妻一区二区免费蜜桃| 国产亚洲精品一区二区三区| 亚洲色图加勒比| 免费久久一级毛片大黄| 色综和网| 在线v中文字幕一区二区三区 | 中文字幕熟女人妻丝袜| 一区二区你上我| 凹凸 69堂 在线播放| 日韩国产成人自拍视频| 啊啊啊啊啊舒服| 国产伦乱91| 人妻久久| 欧美熟女少妇| 91A欧美电影网站| 蜜臀久久久久久999| 97啪啪| 大香蕉欧美伊| 夜夜影视四色| AV有码在线| 好湿好紧好爽 视频| 无码操逼视频一下| 久久久内射良家| 91操人视频| 97欧美综合| 少妇同性| 岛国片国产成人亚洲播放| 中文字幕av片| 超碰人人乐97| 天天色,天天干,天天干| 亚洲天堂资源在线| 亚州色站 日韩电影| 黄色电影观看久久9| 久久久天堂| 97资源超碰| 成人性爱视频在线看| 在线亚洲丝袜视频网站| 色婷婷基地| 97碰久久| 成人久久久精品| 五月丁香在线| 精品人体无圣光凹凸| 欧美色综合网| 久草精品国产蜜臀| 色综合婷婷| 变态综合色| 麻豆天美传媒在线视频天堂| 国产女人和拘做爰视频 | 日影院久久婷婷夜夜网| 人人妻人人狠人人| 妇女性内射冈站HDWWWCOM| 国产中午字一暮区| 99热在线不卡| 日本一级二级三级网站| 我要去看2个日本美女.com曹逼| 久久噜| 日本不卡码黄色| 91精品丝袜久久久久久| 变态乱伦伪娘灌肠一区二区| 欧美综合亚洲综合| 久久华人网| 亚洲色性情三级| 亚洲一区二区麻豆影院| 强奸乱伦Av网| 韩三级a视频在线观看| 中国少妇啪啪视频| 亚洲女人毛茸茸91| 久热久一区二区三区| 色噜噜婷婷| 玖玖资源综合在线视频| 奇米四色影视777久久久| 男人的午夜天堂| 久久久涩| 亚洲成人在线资源| 国产精品国产| 91爱做| 国产超碰在线一区| 有码免费观看| 91色艳| 亚洲成人网站在线观看| 黄色视频特级毛片| 人妻系列无码专区中文有码| 国模无码人体一区二区三| 久久久久久久97| 999久久久久久久久| 亚州九九九精品视频| 精品.99999| 婷婷四五区| 激情文学网伊人| 免费在线黄片视频| av在线不卡一区二区三区| 涩综合导航| 欧美大香蕉久| 黄色激情电影在线观看| 成人性爱av| 十八禁av无码免费网站APP| 摸奶性爱视频网站在线免费播放| 亚洲欧美日韩激情不卡| 国产女人视频三四五区| 亚洲男人天堂av| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 91插B网站| 日本一卡二区在线| 亚洲人妻五月丁香婷婷| 蜜桃臀一区二区三区久久| 综合激情一一91| 亚洲国产一级中文综合久久天堂在线免费观看 | 国产精品久久久蜜臀| 国产原创自拍| 一二三啪啪专区| 99国产精品人妻人伦| 日本免费不卡二区| 亚洲丝袜B诱惑| 欧美暴力猛交| 日韩欧美天堂| 欧美熟妇精品黑人巨大91| 亚州男人天堂| 人人操人人插 - 百度 - 百度| 97chaopengongkai| JIZZJIZZ亚洲女人被躁| 26uuu最新| 九九综合久久中文字幕| 国产亚洲禁久一区二区| 操狠狠| 中文字幕免费观看| 果冻传媒A片一二三区| 无码粉嫩白虎一线天b区| 超碰欧美| 久久毛卡| 日本91白丝| 日韩AV一区二区三区三州三州| 久草在| 大逼色网站| 色哟哟AⅤ| 亚洲码专区| 少妇无码太爽| 久久精品高清无码一区| 亚洲天天操| 亚洲无码免费看| 99热精品免费| 美女淫穴| 在线情色电影 91大| 清纯唯美激情| 黑人综合网| 丰满高潮18xxxx| 天天日日舔舔| 天堂精品一区| 在线人成亚洲视频免费观看| 亚洲精品三| 青青草白白色| 伊人视频| 亚洲欧美人妻| 蜜桃视频成a人v在线| 日韩乱码Av| 亚州大图综合色图| 亚洲久久久久| 亚卅熟女乱色| 九九九九免费高| 国产精品点击进入在线影院高清| 亚洲欧美国产其他二区| 日本不卡三级网在线播放| 久久久精品视频欧州站| 美日韩男女操屄视频| 五月婷婷爱六月丁香色| 欧美91网站| 亚洲av噜噜噜噜噜噜| 日韩免费看黄片| 欧美色三级片91| 亚洲中文字幕久久无码精品| 美国黄片aaa| 日韩欧美麻豆大片| 蜜桃丰满熟妇av无码区不卡| 青青操网| 五月天激情四射| 综合网97| 午夜啪啪片| 色五91| 亚洲同性aV综合| 免费在线观看国内色片网站网址| 一二三啪啪专区| 91成人无码| 一块操欧美| 日韩干B| 亚洲精品亚洲人成在线麻豆| 夫妻四区五区六区| 日韩91网| 一起草精品人妻| 操死我了啊啊啊| 日欧亚洲二三区大片不卡| 亚洲天堂第一页| 搡老熟女免费视频 | 亚洲成人免费中文字幕| 少妇人妻精品| 蜜乳成人AV| 极品粉嫩一区二区| 日本性感人妻91| av天堂影视中文在字幕在线中文| 欧美性高潮在线| 伊人久久婷婷| 亚洲女人91| www.婷婷| 性色A∨91| 99国内精品| 欧美日韩国产成人高清| 99热免费| 乱操9999| 亚洲 日本 国产 综合| 97色视频在线| 国产色图乱伦| 高树玛利亚无码流出| 久久久精品电影| 久久偷拍人| 操逼国产免费| 中文字幕欧洲有码| 99热这里只有精品9| 日韩一级二级三级| 精品无码一区二区| 久久超碰网| 裸体女人草逼视频播放一区,二区,三区,四区,五区| 色图综合网| 亚洲男人的天堂V| 成人97人人超碰人人| 欧美国产一区二区三区麻豆传媒 | 91 手机在线播放 绯色| 国产无码精品无码| 超碰1997| 密乳无码| 99re99在线视频| 91 亚洲 欧洲| 亚洲图片日本AⅤ欧美在线| 超碰 另类 欧美| 国产极品美女高潮无套在线观看| 欧美色91| 欧色综合| 99久久精品国产高潮| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 欧美日韩亚洲天堂网| 黄色性爱网网| 九九九九久久久久| 亚洲永久永久永久永久一级一级一级精品| 国内偷拍精品一区二区| 午夜呻吟欧美| 日操粉逼逼| 超碰97护士| 日本孕妇孕交| 熟妇熟女亚洲天堂网| 欧美黄色大片在线观看 | 99热这里| 99精品欧美一区二区三区桃色| 青草精品视频一日本久久久久网站| 欧美人妻精品| 人人操我人人干| 日曰骚久久精品| 色偷偷色偷偷欧美日韩| 九九热精品| 日本东京热加勒比久久| 精品人妻一区二区三区视频在线| 精品免费国产二区三区| 伊人AAA| 在线观看AV片| 密臀在线一区尤物| 欧美激色| 综合网~91综合网| 蜜臀少妇一区二区| 在线小说视频一区| 欧美少妇第一页| 99久热| 人人摸人人干人人拍97| 亚洲 无码 偷拍| 日韩一卡二卡三卡| 69丨亚洲丨精品丨入口免费播放| 99热综合| 男人的天堂一区三区| 免费观看性欧美一级| 东京热综合久久一区二区| 综合九九| 91国产美女丝袜足交精品视频| 午夜免费福利视频一区| 日韩 欧美 视频 在线 一区| 国产偷拍网站| 日本不卡在线二区三区| 久久熟女嫩草成人片免费| 好舒服视频| 91亚州日韩高清| 操91| 日韩九区| 正在播放国产精品一区| 亚洲91在线| 欧美日韩欧美| 日本中文字幕熟妇| 亚洲色图 欧美热图 清纯唯美 另类自拍| 怡红院一区二区熟女人妻| 美国人人操人人操| 一级AV性爱| 小说区 图片区色 综合区| 夜夜无码| 亚洲人精品久久久| 情侣操 逼视频99| 在线97在线| 青青操在线亚洲视频观看欧美在线 | 久久久久七视频| 日少妇亚洲版| 亚洲免费97免费| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 人妻熟女av国产网站| 午夜爽爽爽在线观看永久入口姬片| 中文字幕,人妻,日韩| 国产在线能看的你懂的| 欧美色www亚洲国产阿娇要播| 偷拍 亚洲 欧美| 久久久精品,3| 亚洲图片小说欧洲| 亚洲黄色| 青青草综合在线| 国产精品丝袜在线| 久久精品国产亚洲粉嫩| 久久国产乱子伦精品免费女,网站| 福利天天都操| 欧美激色| 青青草国产一区二区三区| KK色在线影院| 97中文热色| 少妇一区二区三区| 亚洲伊人久久综合97| 超碰碰激情97+久| 人人看人人插| yellow网站免费观看日韩高清无码| 免费观看成人www精品视频| 夜夜嗨视频| 欧美日综合| 久久久久久久| 欧美一区二区男人天堂| 国产精品蜜臀久久久久无码AV| 天天干干天天干干| 日B操| 岛国大片在线观看网站入口| 国产伦乱91| 一二三四免费视频| 欧美色三级片91| 日韩av色图综合| 欧美性生活内射| 国产第二页| 精品女同一区二区三区| 97精| 亚洲色欲天天天堂色欲网女| 国产一区二区三区导航| 国产免费永久精品无码| 天天操天天射青青草| 久热久操| 久久人妻熟女一区二区| 午夜男女爽爽爽影院视频| 91成人久久 | 人妻 欧美 中文| 日本ZZ高免费A级视频| 97超碰久久| 久久av一级av少妇av高潮| 色综合久| SS久久| 97草草| 国产精品人妻无码久久久互動交流| 奇米四色影视777久久久| 五月丁香激情综合| 四虎永久在线精品免费网址 | 日本精品一区二区中文字幕| 97久久资源| 91激情国产| se吧提供91精品国产91久久久久久 | 91女神在线视频| 任你干在线视频| 少妇一区二区三区| 伊人黄色视频免费观看| 精品一区二区三区蜜桃臀赵总 | 思思热er精品视频| 久超碰在| 欧美在线第五页| 亚洲婷婷综合网| www.99热| 玖玖爱一区在线| 国产一区二区精品久久久不卡蜜臀| 激情 欧美 亚洲 小说| 少妇超碰在线| 欧美女同在线| 九九精品无码专区免费| 亚洲日韩AV视色| 97日韩欧美亚洲| 日韩有码 一区二区三区| 人妻少妇色综合| 少妇500双飞99| 亚洲精品99999| 国产久久久久久久久一区二区| 欧洲天天在线| 日本亚洲嫩草影院啪啪| 国产精品宅男免费| 99只有精品| 夜夜草我| 久久这里都是精品| 精精品人妻一区二区三区| 亚洲国产尤物yw在线观看| 97亚洲资源| 久久精品一区二区一8| 久久婷婷色| 久久久精品九| 亚洲av淫乱| 丝袜美腿射精91| 美女视频尤物网在线看| 日韩精品99999| 夜夜欧美| 亚洲黄色影视| 九久久精品| 久久亚洲欧美中文字幕国语| 蜜桃精久三区| 国产粉嫩蜜臀av一区二区三区 | 在线观看中文av字幕| 97国产伦理| 熟妇xxxxx性春色| 99热导航| 99久久久久久久久| 久久99999| 中日韩欧美精品无码AⅤ一区二区| 青青草中日韩在线| 97摸视频| 在线免费试看60秒| 成人免费福利在线观看| 97草草| 97最新在线播放视频| 成人草草视频| 51一区二区三区| 日韩钢筋无码高清啾啾啾| 欧美v日韩v亚洲v最新在线| 十八禁网站在线| 国产精品诱惑| 大香蕉综合| 男人的天堂视频精品乱在线| 国产精品亚洲免费| 人人妻人人澡人人爽人人精品浪潮| 欧美另类色图片| 清纯唯美第一页| 欧美男女午夜啪啪| 乱伦一二三区| 亚洲欧美日韩国产丝袜自拍中文| 国产传媒午夜理伦精品| 偷拍片久久| 九九综合色| 免费A片三p视频| 歐美一級亂黃99在綫精品| 日韩性爱1级片视频| 中文字幕精品专区搜索结果91| 精品人妻美妇91job| 黄人人操人人操| 农村妇女一级二级三级视频| 91P0RNY大屁股人妻| 亚洲限制级| 丁香五月天啪啪| 国产自制av蜜乳| 亚洲综合一| 欧美麻豆成人同性GⅤ在线| 国产精品视频在线观看| 蜜屁Av| 色色婷婷五月天| 欧美人与动性人交a| 人妻天天爽| 白丝1区2区3区| 国产AV激情无码久久无码 | 开心五月深爱五月| 性爱视频啪啪啪啪| 69久久久久久久久久久久久| 三级三级三级日本99| 一级aaaaa欧美中文字幕录像片| 高潮9999外国| 亚洲情色在线| 六月色婷婷| 最好看的中文字幕在线2018| 九月伊人中文字幕| 国产地址二三| 婷婷五月天补不补| 看一级特黄a大一片| 免费A片三p视频| 国产伊人精品在线| 蜜臀久久久| 91黑丝少妇| 精品一二三区久久AAA片| 国产操逼网站亚洲一级黄色| 欧美色爱综合| 男人 天堂 日 亚洲| 欧美亚洲激情小说| 婷婷亚洲综合| 黑人无码一区二区| 正在播放国产精品一区| 欧美色亚洲| 变态另类专区| 曰本道人妻久久久在线不卡色视频| 中文字幕88av在线| 伊人影院中文字幕| 九九色综合| 大香蕉乱伦视频网| 日韩色| 精品久久久久久中文| 中文字幕一区二区免费在线| 久久久久久久久久9| 后入人妻无码| 青青久草| 久久久久久中文| 黑人粗大V S日韩女优视频| #NAME?| 天天看特黄的免费网站| 97综合日韩| 亚洲少妇诱惑| 亚洲天堂性爱| 最新欧美色网| 熟妇人妻精品一区二区视频色欲| 大香蕉婷婷| 91GD.COM| 五月丁香婷婷综合| 国产亚洲一黄| 色婷婷影院| 亚洲丝袜二区| 欧美.亚洲.另类.丝袜.制服.诱惑| www.色婷婷| 91国产精品在线看| 伊人97超碰| 日韩欧美麻豆大片| 99999精品视频| 性欧美体内射精| 私色综合网| 四月丁香婷婷| 四月丁香婷婷| 精品久久久久久久久久久久| 欧美在线伊人色| 很黄很污的免费网站| 裸模AV女优| 91天堂视频| 欧美大片一区二区三区| 蜜乳av一区二区三区四区不卡| 欧美精品三区| 亚洲骚男同com| 久久久久久久| 国产深喉视频一区二区| 欧美色女人| 无码高清操逼网址| AV不卡在线| 破苞ⅩXXX性无码动漫无码| 99热亚洲| 啊啊啊好湿久久| 刺激精品视频| 天堂精品一区| 大逼色网站| 超碰免费97| 国产成人 综合亚洲 天堂| 国产极品精品美女视频| 日韩无码黄色片| JULIA一区二区三区在线播放| 妺妺跟我一起洗澡没忍住| 丝袜美腿诱惑亚洲欧美视频在线观看 | 亚洲国产美女久久久久| 男女日B国产| 俺去俺来也在线www| 欧美顶级黄片AAAAA在线免费看| 色色婷| 久艹伊人精品综合在线| 午夜成人福利影视| 丝袜色综合| 日本大香蕉综合网红本杳社区| 羞涩视频| 男女性感激情网站| www.色五月| 诱惑人妻欧美一区在线播放|