原因:在與服務(wù)器聯(lián)調(diào)接口之后搀突,所有的API都能正常跑通萎攒,但是涉及到具體的業(yè)務(wù)邏輯時(shí)让歼,比如界面遇到不同的數(shù)據(jù)做出特定的布局操作或彈框提示饲帅,再或者只有當(dāng)數(shù)據(jù)字段符合特定的值時(shí)才能做出更多復(fù)雜的邏輯操作复凳。如果依賴于服務(wù)器或者數(shù)據(jù)庫,那么需要他們?nèi)湍阒圃旒贁?shù)據(jù)來檢測(cè)你的代碼的正確性灶泵,這樣是一次兩次沒問題育八,但是量大的時(shí)候,會(huì)影響雙方的開發(fā)進(jìn)度赦邻。能不能采取解耦的思想讓移動(dòng)端和服務(wù)端分隔開髓棋,在移動(dòng)端測(cè)試開發(fā)階段,自己根據(jù)接口文檔制造自己需要的特定的返回?cái)?shù)據(jù)呢?
解決方案:這時(shí)候我們需要自己的代理服務(wù)器來實(shí)現(xiàn)--使用 Charles 制作代理服務(wù)器按声。
具體需求:當(dāng)API有所改動(dòng)時(shí)膳犹,服務(wù)器正在開發(fā)相應(yīng)功能,但是還沒有部署到服務(wù)器上去签则,只是在原接口的返回?cái)?shù)據(jù)中多加了一個(gè)字段“id”⌒氪玻現(xiàn)在移動(dòng)端的業(yè)務(wù)邏輯寫好了,就等數(shù)據(jù)測(cè)試了渐裂。
具體操作步驟:
一豺旬、首先你需要下載一個(gè) Charles,并且安裝起來镐躲,具體的使用方法這里不做贅述霎肯。可以移步這里學(xué)習(xí)。
二塞茅、抓取你需要修改的接口
大家可以看到,這個(gè)接口返回的是一個(gè)json串罩锐。這個(gè)請(qǐng)求是手機(jī)發(fā)起的猜丹,我們看到的只是軟件抓到的包數(shù)據(jù)。那么如何加入新的“id”字段呢央渣?
三计盒、使用 Charles 的 local map 功能
保存 response 數(shù)據(jù)到本地電腦上去
選擇local map
點(diǎn)擊 Add 添加 map 規(guī)則
這些地方填入你的API信息,以及剛才保存的 response 文件地址
點(diǎn)擊ok保存map規(guī)則芽丹。之后北启,只要是從你手機(jī)通過 Charles 代理發(fā)出的這個(gè)接口的請(qǐng)求,都會(huì)被重定向到你電腦上本地的 response 文件中拔第。
現(xiàn)在咕村,我們?cè)谕ㄟ^手機(jī)調(diào)用一下之前的接口,結(jié)果呢蚊俺?結(jié)果是還不如原來的懈涛,呵呵噠。泳猬。批钠。
之前我們還能獲取到 title、content和type三個(gè)字段以及他們的值得封,現(xiàn)在直接返回的數(shù)據(jù)為nil埋心。
找了半天原因,最終通過對(duì)比發(fā)現(xiàn)了一個(gè)問題忙上,兩種請(qǐng)求的響應(yīng)頭不一樣
所以怎么修改 response 的 content type 類型為 json/application 呢踩窖?
三、使用 Rewrite 替換特定接口的響應(yīng)頭參數(shù)
打開 Rewrite
Rewrite 配置頁面簡(jiǎn)介
1晨横、首先創(chuàng)建一個(gè)規(guī)則集
添加 Rewrite 替換規(guī)則
這里相當(dāng)于是在響應(yīng)回來之前洋腮,通過字段的匹配箫柳,替換掉原有的響應(yīng)頭中的Content-Type 類型為 json/application
所有的對(duì)話框都點(diǎn)擊 ok 或者 apply 確定保存
現(xiàn)在我們開始測(cè)試?yán)玻^續(xù)調(diào)用該接口啥供。
四悯恍、根據(jù)需求修改數(shù)據(jù)
數(shù)據(jù)修改前剛才看過了,只有 title/content/type 三個(gè)字段
{
"title":"標(biāo)題",
"content":"內(nèi)容正文",
"type":"類型"
}
而現(xiàn)在需要添加 “id” 字段伙狐。所以涮毫,用 vim 或者其他文本編輯器打開剛才保存的 response 文件,將他修改成這樣
{
"id":"00000001",
"title":"標(biāo)題",
"content":"內(nèi)容正文",
"type":"類型"
}
修改后記得保存一下贷屎,現(xiàn)在重新開始請(qǐng)求該接口罢防,查看log日志。
{
"id":"00000001",
"title":"標(biāo)題",
"content":"內(nèi)容正文",
"type":"類型"
}
完美唉侄!下面開始愉快的測(cè)試我們自己的代碼吧~
總結(jié):
本文的目的主要是為了提高客戶端和服務(wù)器各自獨(dú)立開發(fā)的能力咒吐,像制造特定的假數(shù)據(jù)這種很簡(jiǎn)單的需求,如果不借助 Charles 代理去自己制造属划,恐怕你需要自己搭建一個(gè)服務(wù)器去各種惡補(bǔ)服務(wù)器的知識(shí)了恬叹。其實(shí)我們的原理十分簡(jiǎn)單,就是通過代理軟件對(duì)網(wǎng)絡(luò)請(qǐng)求進(jìn)行攔截同眯,并且返回我們想要的數(shù)據(jù)绽昼。這樣做的好處就是,大大加強(qiáng)了客戶端的自主開發(fā)能力须蜗,不需要依賴服務(wù)器對(duì)我們的特定邏輯進(jìn)行開發(fā)硅确,縮短開發(fā)周期。節(jié)約大家的時(shí)間明肮,試想如果我們自己制造的數(shù)據(jù)如果在app中能跑通疏魏,即便服務(wù)器開發(fā)出來,如果出現(xiàn)跑不通的錯(cuò)誤晤愧,那問題最有可能出現(xiàn)在服務(wù)器端大莫,當(dāng)然還要看具體的反饋信息。Charles 還有很多強(qiáng)大的功能官份,有待大家慢慢探索只厘,祝大家玩得開心~