RoutingHTTPServer 1.0.0

RoutingHTTPServer 1.0.0

测试已测试
语言语言 Objective-CObjective C
许可证 MIT
发布上次发布2014年12月

无人认领 管理。



  • Matt Stevens

CocoaHTTPServer 的基础上添加了一个受到 Sinatra 启发的路由 API。

支持 iOS 4+ 和 OS X 10.7+

安装

  1. CocoaHTTPServer 添加到您的项目中
  2. 添加源目录中的文件

用法

http = [[RoutingHTTPServer alloc] init];
[http setPort:8000];
[http setDefaultHeader:@"Server" value:@"YourAwesomeApp/1.0"];

[http handleMethod:@"GET" withPath:@"/hello" block:^(RouteRequest *request, RouteResponse *response) {
    [response setHeader:@"Content-Type" value:@"text/plain"];
    [response respondWithString:@"Hello!"];
}];

提供了针对 GET/POST/PUT/DELETE 的便捷方法

[http get:@"/hello/:name" withBlock:^(RouteRequest *request, RouteResponse *response) {
    [response setHeader:@"Content-Type" value:@"text/plain"];
    [response respondWithString:[NSString stringWithFormat:@"Hello %@!", [request param:@"name"]]];
}];

请注意,在本示例中,路径为 /hello/:name,这将匹配 /hello/world/hello/you 等。路径中的命名参数将添加到请求对象的 params 字典中。查询参数也包括在这个字典中。

路径可以使用通配符

[http get:@"/files/*.*" withBlock:^(RouteRequest *request, RouteResponse *response) {
    // The "wildcards" parameter is an NSArray of wildcard matches
}];

或者您可以使用大括号将字符串括起来来自定义正则表达式

[http get:@"{^/page/(\\d+)}" withBlock:^(RouteRequest *request, RouteResponse *response) {
    // The "captures" parameter is an NSArray of capture groups
}];

可以使用选择器来处理路由

- (void)setupRoutes {
    [http handleMethod:@"GET" withPath:@"/hello" target:self selector:@selector(handleHelloRequest:withResponse:)];
}

- (void)handleHelloRequest:(RouteRequest *)request withResponse:(RouteResponse *)response {
    [response respondWithString:@"Hello!"];
}

RouteResponses 可以响应一个 NSString 或 NSData 对象、一个文件的路径或现有的 HTTPResponse 类。响应也可以是空的,只要设置了状态码或自定义头即可。例如,执行重定向:

[http get:@"/old" withBlock:^(RouteRequest *request, RouteResponse *response) {
    [response setStatusCode:302]; // or 301
    [response setHeader:@"Location" value:[self.baseURL stringByAppendingString:@"/new"]];
}];

服务器对象还进行了一些增强

  • 可以通过 setDefaultHeader:value: 设置默认头,或将字典传递给 setDefaultHeaders。这允许您添加诸如 Server 标头之类的内容。

  • 每个响应都添加了 Connection 头。如果您想强制关闭保持连接,可以显式在响应对象中设置它。

  • 可以更改处理路由的 dispatch queue。默认情况下,路由会在 CocoaHTTPServer 的连接队列上处理,将此更改为 dispatch_get_main_queue() 将会在主线程上处理所有路由。连接处理仍在后台进行,只有路由处理受到影响。