你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS --- 使用RestKit與RESTful web服務器進行簡單交互

iOS --- 使用RestKit與RESTful web服務器進行簡單交互

編輯:IOS開發綜合

RestKit是一款專為iOS設計的Objective-C框架,旨在與RESTful web服務的交互變得更簡單快速。它基於強大的對象映射系統,並且結合了一個干淨、簡單的HTTP請求/響應API,大大減少了開發人員開發過程中所需的代碼量。

RestKit is a framework for consuming and modeling RESTful web resources on iOS and OS X.

主要特性:
1. 簡單高層次的HTTP請求/響應系統:RestKit在NSURLConnection的基礎上建立了HTTP客戶端,並且提供了一個有效方法庫來檢測MIME類型和狀態碼。同時讓提交表單數據變得更簡單,且一個本地參數對象還能夠輕松地創建多部分提交。
2. 框架支持切換服務器以及環境:RestKit使用基本的URL和資源路徑,而不是完整的URL,讓你可以快速地切換目標服務器。讓插值URL字符串和構建NSURL對象成為了過去式。
3. Core Data支持:以對象映射層為基礎,RestKit提供了與Apple的Core Data集成框架,用來擴展遠程資源映射到本地的對象。還提供一個很好地基於Core Data原語的API,用來簡化配置和查詢用例。
4. 對象映射系統:RestKit提供了一個建模層,有利於將映射進程數據負載到原生Cocoa對象聲明方式中去。這樣,程序員就不用擔心解析的問題,只需簡單的請求框架,異步獲取遠程資源以及調用委托結果即可。對象映射使用的是鍵值編碼來實現的,允許快速遍歷解析後的對象圖。反射是用在屬性類型上,以便將遠程日期編碼映射為字符串返回到NSDate對象。
5. 生成數據庫文件:當使用Core Data對象存儲時,你可以從數據文件集合中生成一個數據庫文件。這樣,你就可以將你的應用以及數據庫的應用程序包提交到App Store中,並且可以達到立即使用的效果。
6. 可插入解析層:RestKit目前通過SBJSON和YAJL解析器支持JSON。解析是在一個簡單接口背後實現的,允許額外的數據格式進行透明處理。

簡單的使用實例如下:

搭建HTTP server

在這裡使用Python的flask搭建一個簡單的http server.

# -*- coding: utf-8 -*-

#!/usr/bin/python

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/')
def index():
    return 'index'

#使用傳遞參數
@app.route('/hello/')
def hello_get(user):
    return 'hello get %s' % user

#使用POST請求
@app.route('/hello/', methods=['POST'])
def hello_post(user):
    return 'hello post %s' % user

@app.route('/json')
def hotCity():
    return jsonify({
                'article': {
                    'title': 'My Article',
                    'author': 'Blake',
                    'body': 'Very cool!!'
                }
            })

if __name__ == '__main__':
    app.run()

這樣, 通過訪問http://127.0.0.1:5000/json即可獲取到article的數據.

建立Model

新建Article類, 頭文件Article.h如下:

#import 

@interface Article : NSObject

@property (nonatomic) NSString *title;
@property (nonatomic) NSString *author;
@property (nonatomic) NSString *body;

@end

獲取JSON數據

通過RestKit獲取簡單的JSON數據, 步驟比較固定, 如下:

- (void)loadArticles {
    NSURL *baseURL = [NSURL URLWithString:@http://127.0.0.1:5000];
    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:baseURL];

    // 1. 初始化 RestKit, 與RESTful services交互
    RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:httpClient];

    // 2. 建立 mappings, 用於配置JSON與本地Model的映射信息
    RKObjectMapping *articleMapping = [RKObjectMapping mappingForClass:[Article class]];

    // 3. 解析字段, 有多種方式.
    // [articleMapping addAttributeMappingsFromArray:@[@title, @author, @body]];
    [articleMapping addAttributeMappingsFromDictionary:@{
                                                         @title: @title,
                                                         @author: @author,
                                                         @body: @body
                                                         }];

    NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful); // statuscode: 2xx

    // register mappings with the provider using a response descriptor
    // pathPattern: API路徑
    // keyPath: 對象在JSON數據中的路徑
    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:articleMapping method:RKRequestMethodGET pathPattern:@/json keyPath:@article statusCodes:[NSIndexSet indexSetWithIndex:200]];

    [objectManager addResponseDescriptor:responseDescriptor];

    // 4. 提交查詢
    NSDictionary *queryParams = nil;
    [[RKObjectManager sharedManager] getObjectsAtPath:@/json parameters:queryParams success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
        _articles = mappingResult.array;
        NSLog(@_articles.count : %ld, _articles.count);
        Article *article = [mappingResult firstObject];
        NSLog(@article : %@ - %@ - %@, article.title, article.author, article.body);
    } failure:^(RKObjectRequestOperation *operation, NSError *error) {
        NSLog(@Failed to get articles...);
    }];
}

結果如圖:
這裡寫圖片描述

更多使用方法請參考RestKit的github主頁: RestKit.

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved