RBRouteBuilder 提供了一种机制,可以在不打扰字符串的情况下制作请求的路由。
因此,而不是
NSString *path = [NSString stringWithFormat:@"users/%@/projects", userID];
可以使用
NSString *path = router().users.withID(userID).projects.path;
pod 'RBRouteBuilder'
注意: RBRouteBuilder 有一个相当奇怪的集成机制,因此它提供一个文件模板来简化此过程。可以从存储库根目录调用 install_templates.sh
脚本来安装它。
git clone https://github.com/railsware/RBRouteBuilder.git
cd RBRouteBuilder
sh install_templates.sh
要开始使用 RBRouteBuilder,需要做几件事情。
首先,应该添加与路由定义的协议,这个协议还可以有以下方法之一:
- (instancetype)root;
- 返回带有根路径的构建器实例
- (NSString *)path;
- 根据所有调用的方法生成 NSString
- (NSString *)URL
- 根据所有调用的方法生成 NSURL
可能协议定义
@protocol Router
- (instancetype)root;
- (NSString *)path;
- (NSURL *)URL;
- (instancetype)users;
- (instancetype)projects;
@end
注意:不用担心实现,所有这些都将由 RBRouteBuilder 内部完成。
构建器应由调用带有根路径作为参数的 rb_route_builder
方法来实例化。该方法在 RouterBulider.h
中定义,因此别忘了导入它。
以下是一个示例,说明如何完成它
static inline id<Router> routeBuilder()
{
return rb_route_builder(@"http://api.sample.com");
}
静态方法 routeBuilder
可以有任意可能的名称,但它的返回类型必须符合新创建的协议。此规则允许使用链式调用
routeBuilder().users.path;
routeBuilder().root.projects.URL;
RBRouteBuilder
有两个可能非常有用的辅助方法
add(NSString *)
- 向构建器添加字符串
withID(NSNumber *)
- 向构建器添加数字标识符
如果需要,这些方法也可以在协议中定义。它们使用块作为底层实现,并且与上一节中的 routeBuilder
方法具有相同的规则:为了允许链式调用,返回类型必须符合协议
- (id<Router> (^)(NSString *))add;
- (id<Router> (^)(NSNumber *))withID;
RBRouteBuilder
提供的 Xcode 模板可以用来避免所有这些常规操作。
以下是如何处理 GitHub API 路由的示例
// GHRouter.h
#import <RBRouteBuilder/RouteBuilder.h>
@protocol GHRouter
<NSObject>
@optional
- (instancetype)root;
- (NSString *)path;
- (NSURL *)URL;
- (id<GHRouter>(^)(NSString *))add;
- (id<GHRouter>(^)(NSNumbre *))withID;
// User-defined routes
- (instancetype)users;
- (instancetype)orgs;
@end
static id<GHRouter> router()
{
return rb_route_builder(@"https://api.github.com");
}
// ...
// ...
// ...
NSURL *orgsURL = router().users.add(@"AlexDenisov").orgs.URL;
// NSURL: /users/AlexDenisov/orgs
NSString *fullOrgPath = router().root.orgs.add(@"Railsware").path;
// NSString: https://api.github.com/orgs/Railsware
本项目采用MIT许可证进行分发。
查看LICENSE
文件获取更多详细信息。