Files
peko-ios/docs/getUserInfo_API_Documentation.md

7.4 KiB
Raw Blame History

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: NSIntegerHTTP 状态码或业务状态码
  • msg: NSString服务器返回的消息或错误信息

实现原理

1. API 端点

  • Base64 编码的路径: dXNlci9nZXQ=
  • 解码后的路径: user/get
  • 请求方法: GET

2. 请求流程

  1. 将用户ID作为参数传递给 makeRequest 方法
  2. makeRequest 方法通过 __FUNCTION__ 宏自动解析参数名
  3. 构造请求参数字典:@{@"uid": uid}
  4. 调用 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
  • 最后更新: 当前版本