RestKit base URL - 域名后的目录

RestKit base URL - directory following domain name

我正在尝试将 RestKit 的基础 URL 设置为 http://example.com/api,如下所示:

// initialize AFNetworking HTTPClient
NSURL *baseURL = [NSURL URLWithString:@"http://example.com/api"];
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];

// initialize RestKit
RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];
[RKObjectManager setSharedManager:objectManager];

但是由于某些原因,它只将域 http://example.com 保存为基础 URL,并且在它之后没有后续目录。

我可以简单地在所有 API 路径调用前添加 /api(例如 /api/events/active 而不是 /events/active),但如果我最终要使用 API 之类的不同版本(例如 /v1)。理想情况下,我将能够只更改基础 URL 而不是所有单独的路径。为什么我不能正确设置基数 URL 有什么想法吗?

非常感谢! -瑞安

已解决:

Base URL 之前存储为“http://example.com/api”,路径为“/events”。

感谢 Paul 在下面的回答,正确的方法是将基础 URL 存储为“http://example.com/api/”,并将路径存储为 "events".

在后台 AFHTTPClient 使用 -[NSURL URLWithString:relativeToURL:] 构建您的 URL。如果您查看 docs for this method you'll see that it expects a trailing slash. You can get away with this as AFHTTPClient 似乎为您附加了此内容。

这就给我们留下了这个潜在的问题

NSURL *baseURL = [NSURL URLWithString:@"https://example.com/api/"];
NSLog(@"%@", [[NSURL URLWithString:@"/events" relativeToURL:baseURL] absoluteURL]);
//=> https://example.com/events
NSLog(@"%@", [[NSURL URLWithString:@"events"  relativeToURL:baseURL] absoluteURL]);
//=> https://example.com/api/events

如果您在前面加上一个正斜杠,它会删除所有路径组件并只使用 url 的主机部分。所以请确保您没有在路径中添加斜线