123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- //
- // AFNPhalApiClient.m
- // PhalApiClientDemo
- //
- // Created by Aevit on 15/10/18.
- // Copyright © 2015年 Aevit. All rights reserved.
- //
- #import "AFNPhalApiClient.h"
- #import "PhalApiClientFilter.h"
- @implementation AFNPhalApiClient
- #pragma mark - generate a client
- /**
- * 生成单例
- *
- * @return 单例PhalApiClient
- */
- + (AFNPhalApiClient*)sharedClient {
- static AFNPhalApiClient *_sharedClient;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- _sharedClient = [[AFNPhalApiClient alloc] init];
- });
- return _sharedClient;
- }
- /**
- * 生成非单例
- *
- * @return 非单例PhalApiClient
- */
- + (AFNPhalApiClient*)create {
- AFNPhalApiClient *client = [[AFNPhalApiClient alloc] init];
- return client;
- }
- #pragma mark - request
- /**
- * 发起接口请求(POST请求)
- *
- * @param completeBlock 请求成功的回调
- * @param failureBlock 请求失败的回调
- *
- * @return 请求实例
- */
- - (id)request:(HttpCompleteBlock)completeBlock failureBlock:(HttpFailureBlock)failureBlock {
- return [self requestWithFormDataBlock:nil completeBlock:completeBlock failureBlock:failureBlock];
- }
- /**
- * 发起接口请求(提交表单)
- *
- * @param formDataBlock 表单内容
- * @param completeBlock 请求成功的回调
- * @param failureBlock 请求失败的回调
- *
- * @return 请求实例
- */
- - (id)requestWithFormDataBlock:(FormDataBlock)formDataBlock completeBlock:(HttpCompleteBlock)completeBlock failureBlock:(HttpFailureBlock)failureBlock {
-
- if (self.filter) {
- // 过滤器,可生成签名验证等
- [self.filter filter:self.service params:self.params];
- }
-
- NSString *url = self.host;
- if (self.service && self.service.length > 0) {
- // 一般来说,建议service以GET方式写在url里,其他所有参数,统一用POST方式
- url = [NSString stringWithFormat:@"%@?service=%@", self.host, self.service];
- }
-
- AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
- manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", @"text/plain", @"text/json", @"text/xml", nil];
- manager.requestSerializer.timeoutInterval = self.timeout;
-
- AFHTTPRequestOperation *operation = [manager POST:url parameters:self.params constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
- if (formDataBlock) {
- formDataBlock(formData);
- }
- } success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
- // 默认以JSON返回,如需其他格式(如XML,请上google搜索"AFNetworking XML"相关资料即可)
- if (completeBlock) {
- completeBlock(responseObject);
- }
- } failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) {
- if (error.code == NSURLErrorTimedOut) {
- NSDictionary *timeoutDict = @{@"ret": @408, @"data": @{}, @"msg": @"Request Timeout"};
- failureBlock(timeoutDict);
- return ;
- }
- if (failureBlock) {
- failureBlock(error);
- }
- }];
-
- return operation;
- }
- @end
|