forked from carabina/HTWebService
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHTWebService.h
More file actions
223 lines (192 loc) · 8.44 KB
/
HTWebService.h
File metadata and controls
223 lines (192 loc) · 8.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
//
// HTWebservice.h
// HTStandard
//
// Created by Pan on 15/9/22.
// Copyright (c) 2015年 Insigma Hengtian Software Co.,Ltd All rights reserved.
//
#import <AFNetWorking/AFNetworking.h>
#import "HTStandardResponse.h"
#import "HTWSFailureEntity.h"
#import "HTWSProtocol.h"
@class HTStandardResponse;
UIKIT_EXTERN NSNotificationName _Nonnull const HTWebServiceNeedShowTipsNofitification;
/**
* 网络层请求类型定义,分别对应 RESTful 的六种请求。
*/
typedef NS_ENUM(NSInteger, HTHTTPMethod) {
/** GET 请求 */
HTHTTPMethodGET,
/** POST 请求 */
HTHTTPMethodPOST,
/** PUT 请求 */
HTHTTPMethodPUT,
/** PATCH 请求 */
HTHTTPMethodPATCH,
/** DELETE 请求 */
HTHTTPMethodDELETE,
/** HEAD 请求 */
HTHTTPMethodHEAD,
};
/**
* 网络层核心类,负责 RESTful 请求、Json -> Model 映射,分离业务和请求等。
*/
@interface HTWebService<T: id<HTWSResponse>> : AFHTTPSessionManager
/** 业务成功的回调Block*/
typedef void (^HTBusinessSuccessBlock)(_Nonnull T response);
/** 业务失败的回调Block*/
typedef void (^HTBusinessFailureBlock)(T _Nonnull failureRespone);
/** 请求失败的回调Block*/
typedef void (^HTRequestFailureBlock)(HTWSFailureEntity *_Nonnull failureEntity);
/** 不管业务成功失败总是会执行的Block*/
typedef void (^HTAlwaysExecuteBlock)();
/**
* 该类的配置对象
*/
@property (nonatomic, strong, readonly, nonnull) id<HTWSConfig> config;
/**
* 该类的返回数据数据结构对象
*/
@property (nonatomic, strong, readonly, nonnull) T responseStructure;
/**
* 创建并返回一个 `HTWebService` 对象
* @param configuration 必传参数,实现了 HTWSConfig 的配置对象。
* @param response 可选参数,实现了 HTWSResponse 的返回 JSON 结构表示对象。如果传nil,则会采用HTStandardResponse
* @return HTWebService
*/
- (nonnull instancetype)initWithConfig:(nonnull id<HTWSConfig>)configuration
responseStructure:(nullable T)response NS_DESIGNATED_INITIALIZER;
/**
* 为请求头添加信息
* @param value 值
* @param field 键
*/
- (void)setValue:(nullable NSString *)value forHTTPHeaderField:(nonnull NSString *)field;
#pragma mark - Core Method
/**
* 简化请求,出错后框架会自动处理。
* @param method HTTP Method
* @param subPath API地址
* @param parameters 参数
* @param bizSuccessBlock 业务成功执行此block NONULL
* @param bizFailureBlock 业务失败执行此block
* @param reqFailureBlock 请求失败执行此block
* @param alwaysExecuteBlock 如果非nil 则不论请求成功或者失败,都会执行
*/
- (void)requestEasilyWithMethod:(HTHTTPMethod)method
path:(nonnull NSString *)subPath
parameters:(nullable id)parameters
businessSuccess:(nonnull HTBusinessSuccessBlock)bizSuccessBlock
finally:(nullable HTAlwaysExecuteBlock)alwaysExecuteBlock;
/**
* 静默请求,出错后框架会吞掉错误。
* @param method HTTP Method
* @param subPath API地址
* @param parameters 参数
* @param bizSuccessBlock 业务成功执行此block NONULL
* @param alwaysExecuteBlock 如果非nil 则不论请求成功或者失败,都会执行
*/
- (void)requestSilentlyWithMethod:(HTHTTPMethod)method
path:(nonnull NSString *)subPath
parameters:(nullable id)parameters
businessSuccess:(nonnull HTBusinessSuccessBlock)bizSuccessBlock
finally:(nullable HTAlwaysExecuteBlock)alwaysExecuteBlock;
/**
* 完整的请求,框架不会统一处理错误。
* @param method HTTP Method
* @param subPath API地址
* @param parameters 参数
* @param bizSuccessBlock 业务成功执行此block NONULL
* @param bizFailureBlock 业务失败执行此block
* @param reqFailureBlock 请求失败执行此block
* @param alwaysExecuteBlock 如果非nil 则不论请求成功或者失败,都会执行
*/
- (void)requestWithHTTPMethod:(HTHTTPMethod)method
path:(nonnull NSString *)subPath
parameters:(nullable id)parameters
businessSuccess:(nonnull HTBusinessSuccessBlock)bizSuccessBlock
businessFailure:(nullable HTBusinessFailureBlock)bizFailureBlock
requestFailure:(nullable HTRequestFailureBlock)reqFailureBlock
finally:(nullable HTAlwaysExecuteBlock)alwaysExecuteBlock;
#pragma mark - Convience Call Method
/**
* 简化版GET请求,只处理业务成功的状态。其他状态默认展现一下提示窗口。
*
* @param subPath API地址
* @param parameters 参数
* @param bizSuccessBlock 业务成功执行此block NONULL
* @param alwaysExecuteBlock 如果非nil 则不论请求成功或者失败,都会执行
*/
- (void)getEasilyWithPath:(nonnull NSString *)subPath
parameters:(nullable id)parameters
businessSuccess:(nonnull HTBusinessSuccessBlock)bizSuccessBlock
finally:(nullable HTAlwaysExecuteBlock)alwaysExecuteBlock;
/**
* 简化版POST请求,只处理业务成功的状态。其他状态默认展现一下提示窗口。
*
* @param subPath API地址
* @param parameters 参数
* @param bizSuccessBlock 业务成功执行此block NONULL
* @param alwaysExecuteBlock 如果非nil 则不论请求成功或者失败,都会执行
*/
- (void)postEasilyWithPath:(nonnull NSString *)subPath
parameters:(nullable id)parameters
businessSuccess:(nonnull HTBusinessSuccessBlock)bizSuccessBlock
finally:(nullable HTAlwaysExecuteBlock)alwaysExecuteBlock;
/**
* 静默的GET请求,只处理业务成功的状态。其他状态不进行任何提示
*
* @param subPath API地址
* @param parameters 参数
* @param bizSuccessBlock 业务成功执行此block NONULL
* @param alwaysExecuteBlock 如果非nil 则不论请求成功或者失败,都会执行
*/
- (void)getSilentlyWithPath:(nonnull NSString *)subPath
parameters:(nullable id)parameters
businessSuccess:(nonnull HTBusinessSuccessBlock)bizSuccessBlock
finally:(nullable HTAlwaysExecuteBlock)alwaysExecuteBlock;
/**
* 静默的POST请求,只处理业务成功的状态。其他状态不进行任何提示
*
* @param subPath API地址
* @param parameters 参数
* @param bizSuccessBlock 业务成功执行此block NONULL
* @param alwaysExecuteBlock 如果非nil 则不论请求成功或者失败,都会执行
*/
- (void)postSilentlyWithPath:(nonnull NSString *)subPath
parameters:(nullable id)parameters
businessSuccess:(nonnull HTBusinessSuccessBlock)bizSuccessBlock
finally:(nullable HTAlwaysExecuteBlock)alwaysExecuteBlock;
/**
* GET 请求
*
* @param subPath API地址
* @param parameters 参数
* @param bizSuccessBlock 业务成功执行此block NONULL
* @param bizFailureBlock 业务失败执行此block
* @param reqFailureBlock 请求失败执行此block
* @param alwaysExecuteBlock 如果非nil 则不论请求成功或者失败,都会执行
*/
- (void)getWithPath:(nonnull NSString *)subPath
parameters:(nullable id)parameters
businessSuccess:(nonnull HTBusinessSuccessBlock)bizSuccessBlock
businessFailure:(nullable HTBusinessFailureBlock)bizFailureBlock
requestFailure:(nullable HTRequestFailureBlock)reqFailureBlock
finally:(nullable HTAlwaysExecuteBlock)alwaysExecuteBlock;
/**
* POST 请求
*
* @param subPath API地址
* @param parameters 参数
* @param bizSuccessBlock 业务成功执行此block NONULL
* @param bizFailureBlock 业务失败执行此block
* @param reqFailureBlock 请求失败执行此block
* @param alwaysExecuteBlock 如果非nil 则不论请求成功或者失败,都会执行
*/
- (void)postWithPath:(nonnull NSString *)subPath
parameters:(nullable id)parameters
businessSuccess:(nonnull HTBusinessSuccessBlock)bizSuccessBlock
businessFailure:(nullable HTBusinessFailureBlock)bizFailureBlock
requestFailure:(nullable HTRequestFailureBlock)reqFailureBlock
finally:(nullable HTAlwaysExecuteBlock)alwaysExecuteBlock;
@end