原因:在與服務(wù)器聯(lián)調(diào)接口之后,所有的API都能正常跑通,但是涉及到具體的業(yè)務(wù)邏輯時(shí),比如界面遇到不同的數(shù)據(jù)做出特定的布局操作或彈框提示,再或者只有當(dāng)數(shù)據(jù)字段符合特定的值時(shí)才能做出更多復(fù)雜的邏輯操作。如果依賴于服務(wù)器或者數(shù)據(jù)庫(kù),那么需要他們?nèi)湍阒圃旒贁?shù)據(jù)來(lái)檢測(cè)你的代碼的正確性,這樣是一次兩次沒(méi)問(wèn)題,但是量大的時(shí)候,會(huì)影響雙方的開(kāi)發(fā)進(jìn)度。能不能采取解耦的思想讓移動(dòng)端和服務(wù)端分隔開(kāi),在移動(dòng)端測(cè)試開(kāi)發(fā)階段,自己根據(jù)接口文檔制造自己需要的特定的返回?cái)?shù)據(jù)呢?
解決方案:這時(shí)候我們需要自己的代理服務(wù)器來(lái)實(shí)現(xiàn)--使用 Charles 制作代理服務(wù)器。
具體需求:當(dāng)API有所改動(dòng)時(shí),服務(wù)器正在開(kāi)發(fā)相應(yīng)功能,但是還沒(méi)有部署到服務(wù)器上去,只是在原接口的返回?cái)?shù)據(jù)中多加了一個(gè)字段“id”?,F(xiàn)在移動(dòng)端的業(yè)務(wù)邏輯寫好了,就等數(shù)據(jù)測(cè)試了。
具體操作步驟:
一、首先你需要下載一個(gè) Charles,并且安裝起來(lái),具體的使用方法這里不做贅述。可以移步這里學(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ī)通過(guò) Charles 代理發(fā)出的這個(gè)接口的請(qǐng)求,都會(huì)被重定向到你電腦上本地的 response 文件中。
現(xiàn)在,我們?cè)谕ㄟ^(guò)手機(jī)調(diào)用一下之前的接口,結(jié)果呢?結(jié)果是還不如原來(lái)的,呵呵噠。。。
之前我們還能獲取到 title、content和type三個(gè)字段以及他們的值,現(xiàn)在直接返回的數(shù)據(jù)為nil。
找了半天原因,最終通過(guò)對(duì)比發(fā)現(xiàn)了一個(gè)問(wèn)題,兩種請(qǐng)求的響應(yīng)頭不一樣


所以怎么修改 response 的 content type 類型為 json/application 呢?
三、使用 Rewrite 替換特定接口的響應(yīng)頭參數(shù)

打開(kāi) Rewrite

Rewrite 配置頁(yè)面簡(jiǎn)介
1、首先創(chuàng)建一個(gè)規(guī)則集

添加 Rewrite 替換規(guī)則

這里相當(dāng)于是在響應(yīng)回來(lái)之前,通過(guò)字段的匹配,替換掉原有的響應(yīng)頭中的Content-Type 類型為 json/application
所有的對(duì)話框都點(diǎn)擊 ok 或者 apply 確定保存
現(xiàn)在我們開(kāi)始測(cè)試?yán)?,繼續(xù)調(diào)用該接口。
四、根據(jù)需求修改數(shù)據(jù)
數(shù)據(jù)修改前剛才看過(guò)了,只有 title/content/type 三個(gè)字段
{
"title":"標(biāo)題",
"content":"內(nèi)容正文",
"type":"類型"
}
而現(xiàn)在需要添加 “id” 字段。所以,用 vim 或者其他文本編輯器打開(kāi)剛才保存的 response 文件,將他修改成這樣
{
"id":"00000001",
"title":"標(biāo)題",
"content":"內(nèi)容正文",
"type":"類型"
}
修改后記得保存一下,現(xiàn)在重新開(kāi)始請(qǐng)求該接口,查看log日志。
{
"id":"00000001",
"title":"標(biāo)題",
"content":"內(nèi)容正文",
"type":"類型"
}
完美!下面開(kāi)始愉快的測(cè)試我們自己的代碼吧~
總結(jié):
本文的目的主要是為了提高客戶端和服務(wù)器各自獨(dú)立開(kāi)發(fā)的能力,像制造特定的假數(shù)據(jù)這種很簡(jiǎn)單的需求,如果不借助 Charles 代理去自己制造,恐怕你需要自己搭建一個(gè)服務(wù)器去各種惡補(bǔ)服務(wù)器的知識(shí)了。其實(shí)我們的原理十分簡(jiǎn)單,就是通過(guò)代理軟件對(duì)網(wǎng)絡(luò)請(qǐng)求進(jìn)行攔截,并且返回我們想要的數(shù)據(jù)。這樣做的好處就是,大大加強(qiáng)了客戶端的自主開(kāi)發(fā)能力,不需要依賴服務(wù)器對(duì)我們的特定邏輯進(jìn)行開(kāi)發(fā),縮短開(kāi)發(fā)周期。節(jié)約大家的時(shí)間,試想如果我們自己制造的數(shù)據(jù)如果在app中能跑通,即便服務(wù)器開(kāi)發(fā)出來(lái),如果出現(xiàn)跑不通的錯(cuò)誤,那問(wèn)題最有可能出現(xiàn)在服務(wù)器端,當(dāng)然還要看具體的反饋信息。Charles 還有很多強(qiáng)大的功能,有待大家慢慢探索,祝大家玩得開(kāi)心~