/AFHTTPSessionManager-RACExtensions

AFHTTPSessionManager reactive extensions using ReactiveCocoa

Primary LanguageObjective-CMIT LicenseMIT

AFHTTPSessionManager-RACExtensions

AFHTTPSessionManager usage via ReactiveCocoa (ReactiveCocoa + AFNetworking)

Contents

Description

Inspired by AFNetworking-RACExtensions

It takes functionallity from this and change it code to make more readable and open for change. Simple and helpful, enjoy.

Using AFNetworking (3.1.0) ReactiveCocoa (2.5)

Usage

Normally, we create a network layer manager and configure it to use AFNetworking :

- (instancetype) init
{
    self                              = [super init];
    NSURL *baseURL                    = [NSURL URLWithString:kBaseURL];
    _sessionManager                   = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL];
    _sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
    
    return self;
}

Nothing specific. Next step is to have your net methods in NetworkManager.h Just like this:

@interface NetworkManager : NSObject

+ (instancetype)sharedManager;

- (RACSignal *)postAdWithTitle:(NSString *)title
                   description:(NSString *)description
                        cityId:(NSNumber *)cityId
                          cost:(NSNumber *)cost
                    currencyId:(NSNumber *)currencyId
                      imageIds:(NSArray *)imageIds;
@end

Then you go to implement them (in NetworkManager.m) :

@interface NetworkManager ()
@property (strong, nonatomic) AFHTTPSessionManager *sessionManager;

@end

static NSString * const kBaseURL           = @"http://<#your-api-base-url#>";
static NSString * const kPostNewAd         = @"advertisement/postAd";

@implementation NetworkManager

#pragma mark - Initialization

+ (instancetype)sharedManager
{
    static NetworkManager *sharedManager;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedManager = [self new];
    });
    
    return sharedManager;
}

- (instancetype) init
{
    self                              = [super init];
    NSURL *baseURL                    = [NSURL URLWithString:kBaseURL];
    _sessionManager                   = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL];
    _sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
    
    return self;
}

#pragma mark - Adverts

- (RACSignal *)postAdWithTitle:(NSString *)title
                   description:(NSString *)description
                        cityId:(NSNumber *)cityId
                          cost:(NSNumber *)cost
                    currencyId:(NSNumber *)currencyId
                         years:(NSNumber *)years
                      imageIds:(NSArray *)imageIds
{
    NSDictionary *parameters = @{@"title" : title,
                                 <#all other parameters#>
                                 };
    
    NSLog(@"NetworkManager post ad with parameters : %@",parameters);
    
    return [_sessionManager rac_requestWithMethod:POST
                                              URL:kPostNewAd
                                       parameters:parameters];
}
@end

So, next step is to use it:

[[NetworkManager sharedManager] postAdWithTitle:_title
                                    description:_descr
                                         cityId:_city.id
                                           cost:_cost
                                     currencyId:_currencyId
                                       imageIds:imageIds] 
     subscribeNext:^(id x) {
         NSLog(@"testPostAd : %@",x);
     }
     error:^(NSError *error) {
         NSLog(@"Error testPostAd : %@", error);
     }];

Example

You can find real usage example in PixabayTest app, it's really simple, but hope useful.

Just go into /PixabayTest/Model/Network/PBApiManager

You also can download and play with it

Contact

Aleksandr Zaporozhchenko [github] [gmail] [fb] [in]

License

AFHTTPSessionManager-RACExtensions is released under the MIT license. See LICENSE for details.