iOS 客戶端與服務器的交互

 1.  客戶端與服務器交互:

          是指客戶端向服務器輸入數據,服務器接收到數據後通過一系列的邏輯控制,返回結果到客戶端。至於 客戶端怎麼鏈接到服務器,以何種方式,什麼格式往服務器傳輸數據,以及服務器以什麼格式返回數據到客戶端以及怎麼確保服務器返回的數據是客戶端所須要的,就須要制定一個雙方交互的標準文檔,這個文檔一般就是咱們所說的接口文檔。有了接口文檔後,咱們就能夠解決上面說到的請求與返回中的問題。        前端

         一個正常的交互流程,一般包括請求跟響應兩部分( 客戶端發送請求到服務器-》 服務器接收到請求後返回數據到客戶端)       ios

           (1): 請求

               A: 請求方式sql

                     ios中請求服務器的方式有兩種,一種是系統自帶的,使用NSMutableURLRequest+ NSURLConnection的方式;另外一種是使用第三方庫,如早期的 ASIHttpRequest, 現在經常使用的AFNetworking。 而AFNetworking 是基於NSURLSession進行封裝的。數據庫

               B:  請求類型json

                     主要有Get請求與Post  請求兩種,兩種請求方式各有優劣。緩存

               Get請求將參數直接寫在訪問路徑上, 安全性不高, 並且地址最多 255 字節,可是操做簡單;POST 請求, 將參數放到 body 裏面,  須要將參數和地址分開, 安全性高相對較高。可是參數放在body裏面, 不容易被捕獲,操做相對複雜。安全

 

      (2): 響應

                  服務器接收到客戶端的請求後,會響應請求並將數據返回給客戶端,大多數返回的數據都是json格式。客戶端拿到服務器返回的數據後,對數據進行解析後使用。服務器

                  iOS中有系統自帶的解析類:NSJSONSerialization。該類提供了將JSON數據轉換爲Foundation對象(通常都是NSDictionaryNSArray)和Foundation對象轉換爲JSON數據(能夠經過調用isValidJSONObject來判斷Foundation對象是否能夠轉換爲JSON數據)的一系列方法。網絡

                  json對象轉換爲Foundation數據: NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];session

                  Foundation對象轉換爲json數據

   if ([NSJSONSerialization isValidJSONObject:dict]) {
         NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];
          NSString *json = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
          NSLog(@"%@",json);
    }

 

 

2.AFNetworking 是什麼?

      AFNetworking是一個基於 NSURLSession 進行封裝的網絡開源庫,適用於iOS以及Mac OS X. 主要有如下幾個模塊 

(1).網絡通訊模塊(AFURLSessionManager、AFHTTPSessionManger  後者繼承於前者) 

(2).網絡狀態監聽模塊(Reachability) 

(3).網絡通訊安全策略模塊(Security) 

(4).網絡通訊信息序列化/反序列化模塊(Serialization) 

(5).對於iOS UIKit庫的擴展(UIKit)

    

3. 關於NSURLSession

      3.1. NSURLSession是什麼:NSURLSession是蘋果在iOS7後爲HTTP數據傳輸提供的一系列接口 

      3.2. 基本構成部分: 

            (1)NSURLSession:    

                     1):NSURLSession的行爲取決於三個方面。包括NSURLSession的類型、NSURLSessionTask的類型和在建立task時APP是否處於前端 

                     2)類型:  

                          A: defaultSession將cache和creditials儲存於本地 

                          B: Ephemeral Session對數據更加保密安全,並不會向本地儲存任何數據,將cache和creditials儲存在內存中,並和Session綁定,當Session銷燬時,對應的數據也會被銷燬。 

                          C: backgroundSession能夠時APP處於後臺時繼續數據傳輸,其行爲與defaultSession相似,可是全部的數據傳輸均由一個非本APP的進程來管理。也有一些功能上的限制。 

 

            (2)NSURLSessionConfiguration 

                     1)做用:爲NSURLSession配置一些請求所須要的策略。如:超時、緩存策略、連接。

 

             3)NSURLSessionTask    

                  1)類型: NSURLSessionDataTask,NSURLSessionDownLoadTask,NSURLSessionUploadTask ;全部的Task狀態都是暫停的,須要用[Task resume]啓動Task

 

      3.3.做用: 加載數據,下載和上傳 

      3.4. 實例化:a:使用 sharedSession,該類使用共享會話,該會話使用全局的Cache,Cookie和證書 

                       b:經過sessionWithConfiguration:方法建立對象 

                        c:經過sessionWithConfiguration:delegate:delegateQueue方法建立對象 

                        b,c兩種方式能夠建立一個新會話並定製其會話類型。該方式中指定了session的委託和委託所處的隊列。當再也不須要鏈接時,能夠調用Session的invalidateAndCancel直接關閉,或者調用finishTasksAndInvalidate等待當前Task結束後關閉。這時Delegate會收到URLSession:didBecomeInvalidWithError:這個事件。Delegate收到這個事件以後會被解引用。

 

4. 關於NSUrlConnection( iOS9宣佈棄用)       

做用: 

    一、負責發送請求,創建客戶端和服務器的鏈接發送數據給服務器 

    二、並收集來自服務器的響應數據 

步驟: 

    一、建立一個NSURL對象,設置請求路徑 

    二、傳入NSURL並建立一個NSURLRequest對象,設置請求頭和請求體 

    三、使用NSURLConnection發送請求    sendSynchronousRequest/sendAsynchronousRequest 

    四、實現代理方法 

           //*當接收到服務器的響應(連通了服務器)時會調用

           -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;

 

         //當接收到服務器的數據時會調用(可能會被調用屢次,每次只傳遞部分數據)  

          -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

 

         //當服務器的數據加載完畢時就會調用  

          -(void)connectionDidFinishLoading:(NSURLConnection *)connection

 

         //請求錯誤(失敗)的時候調用(請求超時\斷網\沒有網\,通常指客戶端錯誤) 

         -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

5. ios自帶數據庫(sqlite/coreData),爲什麼還要使用務器讀取數據

           由於iphone客戶端的資源是很是有限的,咱們更多的是把Iphone/ipad等做爲一個終端和載體,雖然Iphone客戶端也會有本身的數據庫,可是也只是很是少許的客戶端的數據庫存儲操做,對於大量複雜業務的處理和數據庫的處理,大部分都是在服務端來完成的。

相關文章
相關標籤/搜索