lipengwei
2020-01-13 d08f6f9886c8845d4bc21c5cbd0be61bdf6ef98f
commit | author | age
6e1425 1 // AFURLResponseSerialization.h
633752 2 // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ )
6e1425 3 //
H 4 // Permission is hereby granted, free of charge, to any person obtaining a copy
5 // of this software and associated documentation files (the "Software"), to deal
6 // in the Software without restriction, including without limitation the rights
7 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 // copies of the Software, and to permit persons to whom the Software is
9 // furnished to do so, subject to the following conditions:
10 //
11 // The above copyright notice and this permission notice shall be included in
12 // all copies or substantial portions of the Software.
13 //
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 // THE SOFTWARE.
21
22 #import <Foundation/Foundation.h>
23 #import <CoreGraphics/CoreGraphics.h>
24
25 NS_ASSUME_NONNULL_BEGIN
26
27 /**
633752 28  Recursively removes `NSNull` values from a JSON object.
L 29 */
30 id AFJSONObjectByRemovingKeysWithNullValues(id JSONObject, NSJSONReadingOptions readingOptions);
31
32 /**
6e1425 33  The `AFURLResponseSerialization` protocol is adopted by an object that decodes data into a more useful object representation, according to details in the server response. Response serializers may additionally perform validation on the incoming response and data.
H 34
35  For example, a JSON response serializer may check for an acceptable status code (`2XX` range) and content type (`application/json`), decoding a valid JSON response into an object.
36  */
37 @protocol AFURLResponseSerialization <NSObject, NSSecureCoding, NSCopying>
38
39 /**
40  The response object decoded from the data associated with a specified response.
41
42  @param response The response to be processed.
43  @param data The response data to be decoded.
44  @param error The error that occurred while attempting to decode the response data.
45
46  @return The object decoded from the specified response data.
47  */
48 - (nullable id)responseObjectForResponse:(nullable NSURLResponse *)response
49                            data:(nullable NSData *)data
633752 50                           error:(NSError * _Nullable __autoreleasing *)error NS_SWIFT_NOTHROW;
6e1425 51
H 52 @end
53
54 #pragma mark -
55
56 /**
57  `AFHTTPResponseSerializer` conforms to the `AFURLRequestSerialization` & `AFURLResponseSerialization` protocols, offering a concrete base implementation of query string / URL form-encoded parameter serialization and default request headers, as well as response status code and content type validation.
58
59  Any request or response serializer dealing with HTTP is encouraged to subclass `AFHTTPResponseSerializer` in order to ensure consistent default behavior.
60  */
61 @interface AFHTTPResponseSerializer : NSObject <AFURLResponseSerialization>
62
63 - (instancetype)init;
64
633752 65 @property (nonatomic, assign) NSStringEncoding stringEncoding DEPRECATED_MSG_ATTRIBUTE("The string encoding is never used. AFHTTPResponseSerializer only validates status codes and content types but does not try to decode the received data in any way.");
6e1425 66
H 67 /**
68  Creates and returns a serializer with default configuration.
69  */
70 + (instancetype)serializer;
71
72 ///-----------------------------------------
73 /// @name Configuring Response Serialization
74 ///-----------------------------------------
75
76 /**
77  The acceptable HTTP status codes for responses. When non-`nil`, responses with status codes not contained by the set will result in an error during validation.
78
79  See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
80  */
81 @property (nonatomic, copy, nullable) NSIndexSet *acceptableStatusCodes;
82
83 /**
84  The acceptable MIME types for responses. When non-`nil`, responses with a `Content-Type` with MIME types that do not intersect with the set will result in an error during validation.
85  */
633752 86 @property (nonatomic, copy, nullable) NSSet <NSString *> *acceptableContentTypes;
6e1425 87
H 88 /**
89  Validates the specified response and data.
90
91  In its base implementation, this method checks for an acceptable status code and content type. Subclasses may wish to add other domain-specific checks.
92
93  @param response The response to be validated.
94  @param data The data associated with the response.
95  @param error The error that occurred while attempting to validate the response.
96
97  @return `YES` if the response is valid, otherwise `NO`.
98  */
99 - (BOOL)validateResponse:(nullable NSHTTPURLResponse *)response
100                     data:(nullable NSData *)data
633752 101                    error:(NSError * _Nullable __autoreleasing *)error;
6e1425 102
H 103 @end
104
105 #pragma mark -
106
107
108 /**
109  `AFJSONResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes JSON responses.
110
111  By default, `AFJSONResponseSerializer` accepts the following MIME types, which includes the official standard, `application/json`, as well as other commonly-used types:
112
113  - `application/json`
114  - `text/json`
115  - `text/javascript`
633752 116
L 117  In RFC 7159 - Section 8.1, it states that JSON text is required to be encoded in UTF-8, UTF-16, or UTF-32, and the default encoding is UTF-8. NSJSONSerialization provides support for all the encodings listed in the specification, and recommends UTF-8 for efficiency. Using an unsupported encoding will result in serialization error. See the `NSJSONSerialization` documentation for more details.
6e1425 118  */
H 119 @interface AFJSONResponseSerializer : AFHTTPResponseSerializer
120
121 - (instancetype)init;
122
123 /**
124  Options for reading the response JSON data and creating the Foundation objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONReadingOptions". `0` by default.
125  */
126 @property (nonatomic, assign) NSJSONReadingOptions readingOptions;
127
128 /**
129  Whether to remove keys with `NSNull` values from response JSON. Defaults to `NO`.
130  */
131 @property (nonatomic, assign) BOOL removesKeysWithNullValues;
132
133 /**
134  Creates and returns a JSON serializer with specified reading and writing options.
135
136  @param readingOptions The specified JSON reading options.
137  */
138 + (instancetype)serializerWithReadingOptions:(NSJSONReadingOptions)readingOptions;
139
140 @end
141
142 #pragma mark -
143
144 /**
145  `AFXMLParserResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLParser` objects.
146
147  By default, `AFXMLParserResponseSerializer` accepts the following MIME types, which includes the official standard, `application/xml`, as well as other commonly-used types:
148
149  - `application/xml`
150  - `text/xml`
151  */
152 @interface AFXMLParserResponseSerializer : AFHTTPResponseSerializer
153
154 @end
155
156 #pragma mark -
157
158 #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED
159
160 /**
161  `AFXMLDocumentResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLDocument` objects.
162
163  By default, `AFXMLDocumentResponseSerializer` accepts the following MIME types, which includes the official standard, `application/xml`, as well as other commonly-used types:
164
165  - `application/xml`
166  - `text/xml`
167  */
168 @interface AFXMLDocumentResponseSerializer : AFHTTPResponseSerializer
169
170 - (instancetype)init;
171
172 /**
633752 173  Input and output options specifically intended for `NSXMLDocument` objects. For possible values, see the `NSXMLDocument` documentation section "Input and Output Options". `0` by default.
6e1425 174  */
H 175 @property (nonatomic, assign) NSUInteger options;
176
177 /**
178  Creates and returns an XML document serializer with the specified options.
179
180  @param mask The XML document options.
181  */
182 + (instancetype)serializerWithXMLDocumentOptions:(NSUInteger)mask;
183
184 @end
185
186 #endif
187
188 #pragma mark -
189
190 /**
191  `AFPropertyListResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLDocument` objects.
192
193  By default, `AFPropertyListResponseSerializer` accepts the following MIME types:
194
195  - `application/x-plist`
196  */
197 @interface AFPropertyListResponseSerializer : AFHTTPResponseSerializer
198
199 - (instancetype)init;
200
201 /**
202  The property list format. Possible values are described in "NSPropertyListFormat".
203  */
204 @property (nonatomic, assign) NSPropertyListFormat format;
205
206 /**
207  The property list reading options. Possible values are described in "NSPropertyListMutabilityOptions."
208  */
209 @property (nonatomic, assign) NSPropertyListReadOptions readOptions;
210
211 /**
212  Creates and returns a property list serializer with a specified format, read options, and write options.
213
214  @param format The property list format.
215  @param readOptions The property list reading options.
216  */
217 + (instancetype)serializerWithFormat:(NSPropertyListFormat)format
218                          readOptions:(NSPropertyListReadOptions)readOptions;
219
220 @end
221
222 #pragma mark -
223
224 /**
225  `AFImageResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes image responses.
226
227  By default, `AFImageResponseSerializer` accepts the following MIME types, which correspond to the image formats supported by UIImage or NSImage:
228
229  - `image/tiff`
230  - `image/jpeg`
231  - `image/gif`
232  - `image/png`
233  - `image/ico`
234  - `image/x-icon`
235  - `image/bmp`
236  - `image/x-bmp`
237  - `image/x-xbitmap`
238  - `image/x-win-bitmap`
239  */
240 @interface AFImageResponseSerializer : AFHTTPResponseSerializer
241
633752 242 #if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH
6e1425 243 /**
H 244  The scale factor used when interpreting the image data to construct `responseImage`. Specifying a scale factor of 1.0 results in an image whose size matches the pixel-based dimensions of the image. Applying a different scale factor changes the size of the image as reported by the size property. This is set to the value of scale of the main screen by default, which automatically scales images for retina displays, for instance.
245  */
246 @property (nonatomic, assign) CGFloat imageScale;
247
248 /**
249  Whether to automatically inflate response image data for compressed formats (such as PNG or JPEG). Enabling this can significantly improve drawing performance on iOS when used with `setCompletionBlockWithSuccess:failure:`, as it allows a bitmap representation to be constructed in the background rather than on the main thread. `YES` by default.
250  */
251 @property (nonatomic, assign) BOOL automaticallyInflatesResponseImage;
252 #endif
253
254 @end
255
256 #pragma mark -
257
258 /**
259  `AFCompoundSerializer` is a subclass of `AFHTTPResponseSerializer` that delegates the response serialization to the first `AFHTTPResponseSerializer` object that returns an object for `responseObjectForResponse:data:error:`, falling back on the default behavior of `AFHTTPResponseSerializer`. This is useful for supporting multiple potential types and structures of server responses with a single serializer.
260  */
261 @interface AFCompoundResponseSerializer : AFHTTPResponseSerializer
262
263 /**
264  The component response serializers.
265  */
633752 266 @property (readonly, nonatomic, copy) NSArray <id<AFURLResponseSerialization>> *responseSerializers;
6e1425 267
H 268 /**
269  Creates and returns a compound serializer comprised of the specified response serializers.
270
271  @warning Each response serializer specified must be a subclass of `AFHTTPResponseSerializer`, and response to `-validateResponse:data:error:`.
272  */
633752 273 + (instancetype)compoundSerializerWithResponseSerializers:(NSArray <id<AFURLResponseSerialization>> *)responseSerializers;
6e1425 274
H 275 @end
276
277 ///----------------
278 /// @name Constants
279 ///----------------
280
281 /**
282  ## Error Domains
283
284  The following error domain is predefined.
285
286  - `NSString * const AFURLResponseSerializationErrorDomain`
287
288  ### Constants
289
290  `AFURLResponseSerializationErrorDomain`
291  AFURLResponseSerializer errors. Error codes for `AFURLResponseSerializationErrorDomain` correspond to codes in `NSURLErrorDomain`.
292  */
633752 293 FOUNDATION_EXPORT NSString * const AFURLResponseSerializationErrorDomain;
6e1425 294
H 295 /**
296  ## User info dictionary keys
297
298  These keys may exist in the user info dictionary, in addition to those defined for NSError.
299
300  - `NSString * const AFNetworkingOperationFailingURLResponseErrorKey`
301  - `NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey`
302
303  ### Constants
304
305  `AFNetworkingOperationFailingURLResponseErrorKey`
306  The corresponding value is an `NSURLResponse` containing the response of the operation associated with an error. This key is only present in the `AFURLResponseSerializationErrorDomain`.
307
308  `AFNetworkingOperationFailingURLResponseDataErrorKey`
309  The corresponding value is an `NSData` containing the original data of the operation associated with an error. This key is only present in the `AFURLResponseSerializationErrorDomain`.
310  */
633752 311 FOUNDATION_EXPORT NSString * const AFNetworkingOperationFailingURLResponseErrorKey;
6e1425 312
633752 313 FOUNDATION_EXPORT NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey;
6e1425 314
H 315 NS_ASSUME_NONNULL_END