7.4 KiB
7.4 KiB
getUserInfo API 使用说明文档
方法概述
getUserInfo:uid:
是 Api
类中的一个静态方法,用于获取指定用户的详细信息。
方法签名
+ (void)getUserInfo:(HttpRequestHelperCompletion)completion uid:(NSString *)uid;
参数说明
输入参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
completion | HttpRequestHelperCompletion | 是 | 请求完成后的回调函数 |
uid | NSString | 是 | 要查询的用户ID |
回调函数格式
typedef void(^HttpRequestHelperCompletion)(BaseModel* _Nullable data, NSInteger code, NSString * _Nullable msg);
回调参数说明:
data
: BaseModel 对象,包含服务器返回的数据code
: NSInteger,HTTP 状态码或业务状态码msg
: NSString,服务器返回的消息或错误信息
实现原理
1. API 端点
- Base64 编码的路径:
dXNlci9nZXQ=
- 解码后的路径:
user/get
- 请求方法: GET
2. 请求流程
- 将用户ID作为参数传递给
makeRequest
方法 makeRequest
方法通过__FUNCTION__
宏自动解析参数名- 构造请求参数字典:
@{@"uid": uid}
- 调用
HttpRequestHelper
发送 GET 请求
3. 参数自动映射
该方法使用了特殊的参数映射机制:
- 通过
__FUNCTION__
宏获取方法名 - 解析方法名中的参数部分(冒号后的部分)
- 自动将传入的参数值与参数名对应
使用示例
基本用法
// 获取用户ID为 "12345" 的用户信息
[Api getUserInfo:^(BaseModel *data, NSInteger code, NSString *msg) {
if (code == 200) {
// 请求成功
NSLog(@"用户信息: %@", data.data);
NSLog(@"消息: %@", msg);
} else {
// 请求失败
NSLog(@"错误码: %ld", (long)code);
NSLog(@"错误信息: %@", msg);
}
} uid:@"12345"];
错误处理示例
[Api getUserInfo:^(BaseModel *data, NSInteger code, NSString *msg) {
switch (code) {
case 200:
// 成功获取用户信息
[self handleUserInfoSuccess:data.data];
break;
case 404:
// 用户不存在
[self showUserNotFoundAlert];
break;
case 401:
// 未授权访问
[self handleUnauthorizedAccess];
break;
default:
// 其他错误
[self showErrorAlert:msg];
break;
}
} uid:userId];
在 ViewController 中使用
@interface UserProfileViewController ()
@property (nonatomic, strong) NSString *currentUserId;
@end
@implementation UserProfileViewController
- (void)loadUserInfo {
if (!self.currentUserId) {
NSLog(@"用户ID不能为空");
return;
}
[Api getUserInfo:^(BaseModel *data, NSInteger code, NSString *msg) {
dispatch_async(dispatch_get_main_queue(), ^{
if (code == 200) {
[self updateUIWithUserInfo:data.data];
} else {
[self showErrorWithMessage:msg];
}
});
} uid:self.currentUserId];
}
- (void)updateUIWithUserInfo:(id)userInfo {
// 更新UI显示用户信息
// userInfo 的具体结构需要根据后端返回的数据格式来确定
}
- (void)showErrorWithMessage:(NSString *)message {
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"错误"
message:message
preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil]];
[self presentViewController:alert animated:YES completion:nil];
}
@end
返回数据结构
BaseModel 结构
@interface BaseModel : NSObject
@property(nonatomic,assign) long timestamp; // 时间戳
@property (nonatomic , strong) id data; // 返回的数据
@property (nonatomic , assign) NSInteger code; // 状态码
@property (nonatomic , copy) NSString *message; // 消息
@property (nonatomic,assign) long long cancelDate; // 注销时间戳
@property (nonatomic,copy) NSString *date; // 日期
@property (nonatomic,copy) NSString *reason; // 封禁理由
@end
成功响应示例
{
"code": 200,
"message": "success",
"timestamp": 1640995200000,
"data": {
"uid": "12345",
"nickname": "用户昵称",
"avatar": "头像URL",
"level": 10,
"vip": false
// 其他用户信息字段...
}
}
错误响应示例
{
"code": 404,
"message": "用户不存在",
"timestamp": 1640995200000,
"data": null
}
注意事项
1. 线程安全
- 回调函数在后台线程执行
- UI 更新操作需要在主线程进行
2. 参数验证
- 确保
uid
参数不为空 - 建议在使用前验证
uid
的格式
3. 内存管理
- 避免在回调中造成循环引用
- 使用
__weak
修饰符防止内存泄漏
4. 网络状态
- 建议在调用前检查网络连接状态
- 处理网络超时和连接失败的情况
最佳实践
1. 参数验证
- (void)getUserInfoWithValidation:(NSString *)uid {
if (!uid || uid.length == 0) {
NSLog(@"用户ID不能为空");
return;
}
// 验证UID格式(根据实际需求调整)
if (![self isValidUID:uid]) {
NSLog(@"用户ID格式不正确");
return;
}
[Api getUserInfo:^(BaseModel *data, NSInteger code, NSString *msg) {
// 处理响应
} uid:uid];
}
- (BOOL)isValidUID:(NSString *)uid {
// 根据实际业务需求验证UID格式
return uid.length > 0;
}
2. 错误处理
- (void)handleApiError:(NSInteger)code message:(NSString *)msg {
switch (code) {
case 200:
// 成功
break;
case 400:
NSLog(@"请求参数错误: %@", msg);
break;
case 401:
NSLog(@"未授权访问,需要重新登录");
[self redirectToLogin];
break;
case 404:
NSLog(@"用户不存在: %@", msg);
break;
case 500:
NSLog(@"服务器内部错误: %@", msg);
break;
default:
NSLog(@"未知错误 (code: %ld): %@", (long)code, msg);
break;
}
}
3. 缓存策略
- (void)getUserInfoWithCache:(NSString *)uid {
// 先检查本地缓存
UserInfo *cachedUser = [self getCachedUserInfo:uid];
if (cachedUser) {
[self updateUIWithUserInfo:cachedUser];
}
// 从服务器获取最新数据
[Api getUserInfo:^(BaseModel *data, NSInteger code, NSString *msg) {
if (code == 200) {
// 更新缓存
[self cacheUserInfo:data.data forUID:uid];
[self updateUIWithUserInfo:data.data];
} else {
// 如果服务器请求失败,使用缓存数据(如果有)
if (!cachedUser) {
[self showErrorWithMessage:msg];
}
}
} uid:uid];
}
相关方法
getUserInfos:uids:
- 批量获取多个用户信息completeUserInfo:userInfo:
- 补全用户资料getUserWalletInfo:uid:ticket:
- 获取用户钱包信息
版本信息
- iOS 最低版本: iOS 15.6
- 创建时间: 2021/9/6
- 最后更新: 当前版本