AFNetworking + Google Places API 网络服务 + 具有多个 baseURL 的解析 SDK
AFNetworking + Google Places API web service + Parse SDK with multiple baseURL
我正在从事一个项目,我将结合使用这些服务:
- AF 网络
- Google 地点 API 网络服务
- 解析
尝试遵循 AFNetworking 文档中提到的最佳实践:
Developers targeting iOS 7 or Mac OS X 10.9 or later that deal
extensively with a web service are encouraged to subclass
AFHTTPSessionManager, providing a class method that returns a shared
singleton object on which authentication and other configuration can
be shared across the application.
所以,我创建了一个单例网络管理器,例如:
MyAppAPI.h
#import <Foundation/Foundation.h>
#import "AFHTTPSessionManager.h"
#import "AFNetworking.h"
@interface MyAppAPI : AFHTTPSessionManager
+(MyAppAPI *)sharedInstance;
@end
MyAppAPI.m
#import "MyAppAPI.h"
@implementation MyAppAPI
+(MyAppAPI*)sharedInstance
{
static MyAppAPI* sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[MyAppAPI alloc] initWithBaseURL:[NSURL URLWithString:kROOT_URL]];
});
return sharedInstance;
}
@end
其中 kROOT_URL
是 "https://maps.googleapis.com/maps/api/place/nearbysearch"
用法:
NSDictionary *params = @{@"some_param":@"some_value" };
[[MyAppAPI sharedInstance] GET: @"/json"
parameters:params
success:^(NSURLSessionDataTask *task, id responseObject){
} failure:^(NSURLSessionDataTask *task, NSError *error)
{
}];
现在,它仅适用于 Google 个地方 API 我们服务电话。
- 如果我想使用其他 Web 服务怎么办,如何更改
baseURL
,如果不可能,处理这种情况的最佳做法是什么?
- 如何使用管理器与 Parse 一起工作?任何好的做法。
我需要结合 Parse、AFNetworking 和 Google Places API 网络服务的最佳实践建议。
已找到:changing AFNetworking baseURL 但没有帮助
做你正在做的事情是非常好的。重要的想法是该文档建议的单例是每个服务单例。对单例名称的选择稍作调整可能有助于澄清,所以而不是...
// MyAppAPI.h
@interface MyAppAPI : AFHTTPSessionManager
考虑一下您到目前为止所写的内容应该称为...
// GooglePlacesAPI.h
@interface GooglePlacesAPI : AFHTTPSessionManager
...并包含类似...
的方法
- (void)nearbySearch:(NSString *)value
success:(void (^)(NSURLSessionDataTask *, id))success
failure:(void (^)(NSURLSessionDataTask *, NSError *))failure {
NSDictionary *params = @{@"some_param":value };
[self GET: @"/json" parameters:params success:success failure:failure];
}
此 class 的客户然后会说...
[GooglePlacesAPI nearbySearch:@"some value" success:^(NSURLSessionDataTask *task, id responseObject) {
// handle success
} failure:^(NSURLSessionDataTask *task, NSError *error) {
// handle failure
}];
Parse 为您提供了使用 REST API 的选项,并且您可以按照相同的模式为 Parse 创建单例...
// ParseAPI.h
@interface ParseAPI : AFHTTPSessionManager
值得一提的是,Parse 还提供了完整的 iOS SDK,它以类似于 AFNetworking 的方式包装网络代码,因此如果您选择 SDK 而不是 REST API.
简单的答案是根本不编写自己的代码。使用 Parse's SDK for anything on Parse and Google's Places SDK 用于任何需要地点的地方。两者都有 CocoaPods。否则,按照 danh 的概述,将客户分成他们自己的单身人士。
我正在从事一个项目,我将结合使用这些服务:
- AF 网络
- Google 地点 API 网络服务
- 解析
尝试遵循 AFNetworking 文档中提到的最佳实践:
Developers targeting iOS 7 or Mac OS X 10.9 or later that deal extensively with a web service are encouraged to subclass AFHTTPSessionManager, providing a class method that returns a shared singleton object on which authentication and other configuration can be shared across the application.
所以,我创建了一个单例网络管理器,例如:
MyAppAPI.h
#import <Foundation/Foundation.h>
#import "AFHTTPSessionManager.h"
#import "AFNetworking.h"
@interface MyAppAPI : AFHTTPSessionManager
+(MyAppAPI *)sharedInstance;
@end
MyAppAPI.m
#import "MyAppAPI.h"
@implementation MyAppAPI
+(MyAppAPI*)sharedInstance
{
static MyAppAPI* sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[MyAppAPI alloc] initWithBaseURL:[NSURL URLWithString:kROOT_URL]];
});
return sharedInstance;
}
@end
其中 kROOT_URL
是 "https://maps.googleapis.com/maps/api/place/nearbysearch"
用法:
NSDictionary *params = @{@"some_param":@"some_value" };
[[MyAppAPI sharedInstance] GET: @"/json"
parameters:params
success:^(NSURLSessionDataTask *task, id responseObject){
} failure:^(NSURLSessionDataTask *task, NSError *error)
{
}];
现在,它仅适用于 Google 个地方 API 我们服务电话。
- 如果我想使用其他 Web 服务怎么办,如何更改
baseURL
,如果不可能,处理这种情况的最佳做法是什么? - 如何使用管理器与 Parse 一起工作?任何好的做法。
我需要结合 Parse、AFNetworking 和 Google Places API 网络服务的最佳实践建议。
已找到:changing AFNetworking baseURL 但没有帮助
做你正在做的事情是非常好的。重要的想法是该文档建议的单例是每个服务单例。对单例名称的选择稍作调整可能有助于澄清,所以而不是...
// MyAppAPI.h
@interface MyAppAPI : AFHTTPSessionManager
考虑一下您到目前为止所写的内容应该称为...
// GooglePlacesAPI.h
@interface GooglePlacesAPI : AFHTTPSessionManager
...并包含类似...
的方法- (void)nearbySearch:(NSString *)value
success:(void (^)(NSURLSessionDataTask *, id))success
failure:(void (^)(NSURLSessionDataTask *, NSError *))failure {
NSDictionary *params = @{@"some_param":value };
[self GET: @"/json" parameters:params success:success failure:failure];
}
此 class 的客户然后会说...
[GooglePlacesAPI nearbySearch:@"some value" success:^(NSURLSessionDataTask *task, id responseObject) {
// handle success
} failure:^(NSURLSessionDataTask *task, NSError *error) {
// handle failure
}];
Parse 为您提供了使用 REST API 的选项,并且您可以按照相同的模式为 Parse 创建单例...
// ParseAPI.h
@interface ParseAPI : AFHTTPSessionManager
值得一提的是,Parse 还提供了完整的 iOS SDK,它以类似于 AFNetworking 的方式包装网络代码,因此如果您选择 SDK 而不是 REST API.
简单的答案是根本不编写自己的代码。使用 Parse's SDK for anything on Parse and Google's Places SDK 用于任何需要地点的地方。两者都有 CocoaPods。否则,按照 danh 的概述,将客户分成他们自己的单身人士。