fb_license

技術標籤

@selector (1) 初使化區塊 (1) 物件 (1) 物件導向 (2) 型別 (4) 封裝 (1) 流程控制 (1) 陣列 (3) 推論型別 (2) 實機測試 (1) 蓋索林(gasolin) (1) 模組 (1) 憑證 (1) 轉型 (1) 羅康鴻 (121) 類別 (1) 變數 (5) Accelerometer (1) ActiveRecord (1) Activity (1) AFNetworking (1) alloc (1) Android (3) Animation (1) App (1) App ID (1) APP上傳 (1) ASP.NET (1) AVAudioPlayer (1) block (1) C# (2) class (1) CLLocationManager (1) CLLocationManagerDelegate (1) CMMotionManager (4) Controller (1) delegate (1) DELETE語法 (1) Device Motion資料 (1) Dialog (1) DropDownList (1) dynamic language (2) Facebook SDK (9) FBRequest (5) FBRequestConnection (2) FMDB (1) Gesture Recognizers (6) GROUP BY (2) Gyro (1) HAVING (1) IBAction (1) IBOutlet (1) id (3) inheritance (1) init (1) Insert (1) instance variable (1) Interface Builder (1) iOS (70) iOS idea (7) iOS Introduction (1) Layout (1) Magnetometer (1) Menu (2) Method (2) MKMapView (1) MKPointAnnotation (1) MS SQL (5) Nil (1) NSArray (1) NSDictionary (1) NSError (1) NSFileManager & .plist (1) NSMutableArray (1) NSMutableDictionary (1) NSNotificationCenter (1) NULL (1) object (2) Objective-C (16) Objective-C idea (1) ORDER BY (1) Parameter (1) property (1) protocol (2) Provisioning (1) Proximate Sensor (1) Q and A (2) R類別 (1) Rails (9) RESTful SOA (9) Ruby (8) Scene (1) SEELECT (1) Segue (2) SEL (1) SELECT語法 (1) Shake (1) Simulator (1) SOA (8) SQL (6) SQL Server (5) SQL函數 (1) SQL彙總函數 SQL (1) SQLite (1) Storyboard (1) Style (1) Swift (1) Table (1) target & action (1) Theme (1) Toast (1) TRUNCATE TABLE語法 (1) UIActionSheet (1) UIActionSheetDelegate (1) UIActivityIndicatorView (1) UIAlertView (1) UIBarButtonItem (1) UIButton (1) UICollectionView (1) UICollectionViewDataSource (1) UIControl (9) UIDatePicker (1) UIImage (1) UIImagePickerController (2) UIImagePickerControllerDelegate (2) UIImageView (1) UILabel (1) UILongPressGestureRecognizer (1) UINavigationController (2) UIPanGestureRecognizer (1) UIPinchGestureRecognizer (1) UIProgressView (1) UIResponder (1) UIRotationGestureRecognizer (1) UISegmentedControl (1) UISlider (1) UIStepper (1) UISwipeGestureRecognizer (1) UISwitch (1) UITabBarController (1) UITableView (1) UITableViewDataSource (1) UITapGestureRecognizer (1) UITextField (1) UITextFieldDelegate (1) UITextView (2) UITextViewDelegate (1) UIToolBar (1) UIView (8) UIWebView (1) UPDATE語法 (1) var (2) VB.NET (7) View (4) WHERE子句 (1) XML (1)

2013/10/28

[iOS] Access RESTful SOA using AFNetworking




我是iOS工程師
我成功的透過Rails建立關於User管理的RESTful SOA的服務了,
但用什麼元件才能在iOS中存取到RESTful SOA呢?


我是AFNetworking
您可以透過我提供的AFHTTPSessionManager
進行RESTful SOA存取




延續RESTful SOA的議題,我們將透過AFNetworking中的AFHTTPSessionManager進行RESTful SOA的C(create方法),以建立使用者User。


1. 建立專案
  • 建立名為afnetworing_RESTful_SOA的Single View專案


2. 設計畫面
  • 在預設的場景畫面中加上:
    • 3個Label:顯示的文字為姓名、年齡和性別
    • 2個TextField:連結IBOutlet為nameTextField與ageTextField
    • 1個SegmentedControl:連結IBOutlet為genderSegmentedControl
    • 1個Button:顯示的文字建立,連結IBAction為create,對應的事件為touchInside




3. 加入AFNetworking套件


  • 解開AFNetworking-master.zip後,找到AFNetworking資料匣,托拉至您的專案中,勾選"copy items..."copyAFNetworking至專案中



4. POST方法,建立用戶user
  • 於create方法中透過AFHTTPSessionManager物件呼叫RESTful SOA,而建立用戶user的HTTP Method是POST,因此可使用AFHTTPSessionManager物件的POST方法,將建立用戶user所需的資料傳送出去,以建立用戶user,完整的程式如下:

- (IBAction)create:(id)sender { //以NSURL表示RESTful SOA主機的位置 NSURL *host = [[NSURL alloc] initWithString:@"http://localhost:3000"]; //建立AFHTTPSessionManager物件, //並以RESTful SOA主機的位置作為存取的基礎位置。 AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL: host]; //透過NSMutableDictionary物件, //使用者從畫面輸入的資料。 NSMutableDictionary *data = [[NSMutableDictionary alloc] init]; [data setValue:self.nameTextField.text forKey:@"name"]; [data setValue:self.ageTextField.text forKey:@"age"]; [data setValue:(self.genderSegmentedControl.selectedSegmentIndex == 0 ? @"1" : @"0") forKey:@"gender"]; //記得,RESTful SOA建立資料是使用POST HTTP Method, //因此使用AFHTTPSessionManager物件的POST方法, //將建立用戶User的資料送出, //而parameters參數即代入存放資料的NSMutableDictionary物件。 [manager POST:@"users" parameters:data //呼叫成功,則呼叫success參數後的block, //以進行後續的處理。 success:^(NSURLSessionDataTask *task, id responseObject) { NSDictionary *result = responseObject; //1. 檢查是否有error, // 此error為成功存取RESTful SOA後的自訂error, // 如先前定義的姓名不可為空白、至少4個字元等等。 if([result objectForKey:@"error"]) { //取得錯誤代碼與訊息, //透過UIAlertView顯示。 NSString *code =[[result objectForKey:@"error"] objectForKey:@"code"]; NSString *message =[[result objectForKey:@"error"] objectForKey:@"message"]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:code message:message delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil]; [alert show]; } else { //透過UIAlertView顯示建立成功訊息 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"成功建立!" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil]; [alert show]; } } //failure為無法正常存取RESTful SOA, //如:網路問題、存取資源的路徑不正確皆可能產生此問題等等。 //若失敗,則呼叫failure參數後的block, //以進行後續的處理。 failure:^(NSURLSessionDataTask *task, NSError *error) { //透過UIAlertView顯示呼叫錯誤的原因資訊 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:[error description] delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil]; [alert show]; }]; }



5. 測試
  • 啟動RESTful SOA伺服器
    • 在此我們使用先前透過rails建立的RESTful SOA服務 - user_service_2_activerecord_full.zip
    • 下載後開啟終端機,切換到{user}\user_service_2目錄
    • 輸入rails server,透過rails server啟動伺服器
  • 測試1:
    • 姓名:KH
    • 年齡:31
    • 性別:男性
    • 預期結果:驗證錯誤 => code:0002 message:at least chars for name.


    • 測試2:
      • 姓名:KHLO
      • 年齡:31
      • 性別:男性
      • 預期結果:成功建立!



    範例程式:afnetworking_RESTful_SOA.zip


    同樣的,AFHTTPSessionManager提供對應於HTTP Method的GET、PUT與DELETE,讓您可以對應到RESTful SOA的URD(Update、Read、Delete),AFHTTPSessionManager類別的參考連結如下:
    http://cocoadocs.org/docsets/AFNetworking/2.0.0/Classes/AFHTTPSessionManager.html

    完整的AFNetworking參考連結:
    http://cocoadocs.org/docsets/AFNetworking/2.0.0/index.html

    注意事項:

    • 若您使用的iOS為6.1之前的版本,請以AFHTTPRequestOperationManager代替AFHTTPSessionManager。