在了解如何處理Alamofire發(fā)送到服務(wù)端的各種請求之前墓塌,我們通過這段視頻向大家介紹如何基于Laravel和PHPStorm搭建一個(gè)便捷的服務(wù)端開發(fā)環(huán)境僵朗,它可以幫助我們更方便的觀察Alamofire發(fā)來的各種請求。
下載Laravel
為了方便測試闻镶,我們新建一個(gè)Laravel項(xiàng)目來處理Alamofire發(fā)來的各種HTTP請求:
composer create-project --prefer-dist laravel/laravel apidemo
創(chuàng)建完成之后,我們把新項(xiàng)目添加到Homestead。
配置Homestead
打開~/.homestead/Homestead.yaml弧械,在配置文件的對應(yīng)部分,添加下面的內(nèi)容:
folders:
- map: /Users/puretears/projects/apidemo
to: /var/www/apidemo/current
sites:
- map: apidemo.boxue.io
to: /var/www/apidemo/current/public
databases:
- apidemo
保存并退出之后空民,執(zhí)行下面的命令把新增的Web應(yīng)用添加到vagrant:
vagrant up
vagrant provision
完成之后刃唐,添加一條新的/etc/hosts紀(jì)錄:
apidemo.boxue.io 192.168.10.10 # Change your local IP here
然后在瀏覽器里訪問apidemo.boxue.io,能顯示默認(rèn)Laravel 5的頁面界轩,就表示基本的環(huán)境已經(jīng)完成了画饥。接下來,我們訪問https://apidemo.boxue.io浊猾,就會看到一個(gè)安全提示抖甘。這是由于Homestead里配置的證書不是有一個(gè)可信的CA簽發(fā)的造成的。由于iOS 9以后葫慎,所有的HTTP通信強(qiáng)制要求要基于HTTPS衔彻,因此我們需要給apidemo申請一個(gè)由可信CA簽發(fā)的證書薇宠。
安裝證書
網(wǎng)站有不少可以申請免費(fèi)SSL證書的地方,在這里我們用WoSign(沃通)來舉例艰额,點(diǎn)擊申請免費(fèi)SSL證書:
填入基本資料后澄港,點(diǎn)擊"提交申請":
在"我的訂單"頁面里,點(diǎn)擊"提交CSR":
簡單起見柄沮,我們選擇"直接由系統(tǒng)生成CSR"慢睡,然后設(shè)置一個(gè)"證書保護(hù)密碼"(接下來WoSign會把證書打包成一個(gè)ZIP文件,并且由你設(shè)置的"證書保護(hù)密碼"作為解壓密碼)铡溪。確認(rèn)后漂辐,點(diǎn)擊"提交"按鈕。
成功簽發(fā)之后棕硫,我們就可以下載證書了髓涯。
用之前設(shè)置的"證書保護(hù)密碼"解壓之后,可以看到適用不用HTTP Server的壓縮包:
由于Homestead使用的Nginx哈扮,我們進(jìn)一步解壓縮for Nginx.zip纬纪,得到公鑰和私鑰。接下來滑肉,在之前創(chuàng)建的apidemo項(xiàng)目目錄里包各,新建一個(gè)目錄,例如cert靶庙,然后把證書文件復(fù)制到cert目錄问畅,這樣,它們就會被自動同步到vagrant里六荒。之后护姆,我們登錄vagrant:
刪除Homestead為apidemo默認(rèn)簽發(fā)的證書:
sudo rm /etc/nginx/ssl/apidemo*
進(jìn)入apidemo項(xiàng)目目錄,把同步進(jìn)來的新證書復(fù)制到/etc/nginx/ssl目錄:
cd /var/www/apidemo/current/cert
sudo cp 1_apidemo.boxue.io_bundle.crt /etc/nginx/ssl/apidemo.boxue.io.crt
sudo cp 2_apidemo.boxue.io.key /etc/nginx/ssl/apidemo.boxue.io.key
檢查nginx配置無誤之后掏击,重新加載nginx配置文件:
sudo nginx -t
sudo service nginx reload
此時(shí)卵皂,再訪問https://apidemo.boxue.io,瀏覽器就不會有安全告警了砚亭。
“簡單起見灯变,我們只是搭建了一個(gè)基本的可以用于iOS通信的HTTPS環(huán)境,但這樣的配置并非是足夠安全的捅膘,不要在生產(chǎn)環(huán)境直接這樣配置添祸。”
<small style="box-sizing: border-box; font-size: 14.399951934814453px; font-weight: 400;">特別提示</small>
設(shè)置PHPStorm
搭建好HTTPS環(huán)境之后篓跛,為了能"可視化"Alamofire和HTTPS服務(wù)器的交互膝捞,我們使用PhpStorm來做服務(wù)端開發(fā)工具。大家可以到這里下載免費(fèi)版愧沟。
使用PHPStorm打開之前創(chuàng)建的apidemo項(xiàng)目目錄蔬咬,首次打開的話PhpStorm會檢測名字空間和建立項(xiàng)目索引。
接下來沐寺,點(diǎn)擊"Run"林艘,選擇"Break at first line in PHP scripts"。
然后混坞,在vagrant apidemo的項(xiàng)目目錄中狐援,執(zhí)行下面的命令創(chuàng)建一個(gè)處理Alamofire請求的Controller,假設(shè)iOS客戶端請求的URL是/alamofire:
php artisan make:controller AlamofireController --resource
這樣究孕,Laravel就會自動為我們創(chuàng)建一個(gè)AlamofireController啥酱,用來處理/alamofire的REST請求。我們在index()方法里厨诸,添加下面的代碼:
class AlamofireController extends Controller
{
public function index(Request $request)
{
$data = $request->all();
return response()->json($data);
}
}
然后镶殷,在request->all()設(shè)置一個(gè)斷點(diǎn)。此時(shí)微酬,PhpStorm就已經(jīng)準(zhǔn)備好調(diào)試Alamofire的請求了绘趋。
調(diào)試
用Xcode打開我們在上一個(gè)視頻中的例子,把viewDidLoad的代碼改成下面這樣:
let getRequest = "https://apidemo.boxue.io/alamofire?XDEBUG_SESSION_START=PHPSTORM"
Alamofire.request(.GET, getRequest)
.responseJSON(completionHandler: { response in
switch response.result {
case .Success(let json):
print("JSON: ================")
case .Failure(let error):
print("\(error)")
}
})
按Command + R編譯執(zhí)行颗管,這時(shí)就會從Xcode跳轉(zhuǎn)到PhpStorm陷遮,由于之前我們設(shè)置了"Break at first line in PHP scripts",于是PhpStorm停在了index.php的第一行垦江,點(diǎn)擊底部的綠色小三角帽馋,我們讓它繼續(xù)執(zhí)行,但是此時(shí)PhpStorm并沒有停在我們設(shè)置的斷點(diǎn)上比吭,這是為什么呢茬斧?
答案是我們忘記了一些事情 _...
首先,在routes.php里梗逮,添加一個(gè)處理/alamofire的路由:
Route::resource("alamofire", "AlamofireController");
然后项秉,去掉Run -> Break at first line in PHP scripts這個(gè)選項(xiàng),回到Xcode慷彤,按Command + R重新編譯執(zhí)行娄蔼。這次,回到PhpStorm底哗,仍舊沒有斷在我們設(shè)置的斷點(diǎn)上岁诉,并且我們可以看到一個(gè)提示:
這是因?yàn)椋覀冞€沒有設(shè)置本地源代碼到vagrant server的path mapping跋选,點(diǎn)擊提示中的PHP|Servers涕癣,在彈出的對話框中,設(shè)置好apidemo在Vagrant中的根目錄:
點(diǎn)擊OK按鈕回到PhpStorm前标。然后坠韩,我們回到Xcode重新按Command + R編譯執(zhí)行(_這真的是最后一次了哈)距潘。這次,我們會自動跳轉(zhuǎn)到PhpStorm只搁,然后音比,成功停在我們的斷點(diǎn)上了。
然后氢惋,我們單步執(zhí)行一次洞翩,點(diǎn)擊窗口底部的debugger標(biāo)簽,在這里焰望,可以看到PHP執(zhí)行過程中骚亿,各種變量的值。點(diǎn)開$data熊赖,就能看到我們來自Alamofire請求的URL參數(shù)了:
這時(shí)来屠,我們回到Xcode,就可以在控制臺看到Alamofire成功收到響應(yīng)之后的輸出了: