Tôi mới phát triển iOS và tôi gặp sự cố khi thực hiện yêu cầu Json POST đơn giản. Tôi có một NSDictionary có chứa một người sử dụng và mật khẩu và tôi muốn gửi những giá trị như một Json đến một máy chủ và nhận được một phản ứng. Tôi đã làm việc đó mà không cần sử dụng bộ lưu trữ nhưng tôi không thể tìm ra cách để thực hiện tương tự bằng cách sử dụng RestKit và không thể tìm thấy một ví dụ tốt về những gì tôi muốn.Thực hiện một bài đăng đơn giản bằng cách sử dụng RESTKit
- (bool) login{
NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
[params setValue:self.email forKey:@"email"];
[params setValue:self.password forKey:@"password"];
NSMutableDictionary* rpcData = [[NSMutableDictionary alloc] init];
[rpcData setValue:@"2.0" forKey:@"jsonrpc"];
[rpcData setValue:@"authenticate" forKey:@"method"];
[rpcData setValue:@"" forKey:@"id"];
[rpcData setValue:params forKey:@"params"];
[[RKClient sharedClient] post:@"/api/rpc/" params:rpcData delegate:self];
return nil;
}
Các máy chủ được mong đợi một Json như thế này:
{
jsonrpc : '2.0',
method : 'authenticate', // method name goes here
params : { // params are method-specific
email : '[email protected]',
password : 'secret'
},
id : 2 // The id can be anything, it will be sent back with the response
}
Tôi hiểu rằng có một phân tích cú pháp JSON bao gồm trong RestKit nhưng tôi không thể tìm thấy bất kỳ tài liệu hướng dẫn về cách phân tích từ điển rpcData của tôi, tôi có cần sử dụng thư viện bên ngoài không ?.
Ngay bây giờ giao tiếp với máy chủ thì không sao, nhưng tôi không gửi những gì được mong đợi. Từ điển của tôi được ánh xạ theo cách "key = value? Key2 = value2 ...". Đây là câu hỏi rất ngớ ngẩn nhưng tôi bị mắc kẹt.
Cập nhật
Vào thời điểm tôi viết bài này, nó làm việc nhưng Restkit đã được cập nhật vì vậy tôi không chắc chắn nếu điều này sẽ làm việc, xin vui lòng kiểm tra giấy tờ của họ
Dưới đây là giải pháp cho vấn đề của tôi, những gì tôi đang làm là lý tưởng để làm việc với các API RPC khi bạn cần gọi một dịch vụ:
1. Trước tiên, bạn cần nhập Restkit và RKRequestSerialization, điều này rất quan trọng:
#import <RestKit/RestKit.h>
#import <RestKit/RKRequestSerialization.h>
@interface myObject : NSObject <RKRequestDelegate,RKObjectLoaderDelegate>
2.- Dưới đây là chức năng đăng nhập gửi bài:
- (void) login:(NSString *)username :(NSString *)password{
RKClient *myClient = [RKClient sharedClient];
NSMutableDictionary *rpcData = [[NSMutableDictionary alloc] init ];
NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
//User and password params
[params setObject:password forKey:@"password"];
[params setObject:username forKey:@"email"];
//The server ask me for this format, so I set it here:
[rpcData setObject:@"2.0" forKey:@"jsonrpc"];
[rpcData setObject:@"authenticate" forKey:@"method"];
[rpcData setObject:@"" forKey:@"id"];
[rpcData setObject:params forKey:@"params"];
//Parsing rpcData to JSON!
id<RKParser> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:RKMIMETypeJSON];
NSError *error = nil;
NSString *json = [parser stringFromObject:rpcData error:&error];
//If no error we send the post, voila!
if (!error){
[[myClient post:@"/" params:[RKRequestSerialization serializationWithData:[json dataUsingEncoding:NSUTF8StringEncoding] MIMEType:RKMIMETypeJSON] delegate:self] send];
}
}
Không rõ vấn đề là gì. Dữ liệu không được gửi? Không nhận được? Yêu cầu và tiêu đề phản hồi của bạn trông như thế nào? Cân nhắc sử dụng http://www.charlesproxy.com/ để được trợ giúp. Ngoài ra, đừng quên kiểm tra dấu kiểm màu xanh bên cạnh câu trả lời hay nhất cho các câu hỏi trước của bạn. Bạn sẽ nhận được nhiều phản hồi hơn theo cách đó. –
Trong cách mã của tôi, tôi không gửi yêu cầu JSON.Tôi đã rõ ràng, máy chủ đang nhận dữ liệu như "? Jsonrpc = '2.0' & method = 'authenticate' ..." Tôi cần biết cách phân tích cú pháp đó thành JSON – clopez
Bạn có thể kiểm tra yêu cầu do Restkit gửi bằng cách kích hoạt gỡ lỗi đăng nhập thông qua dòng này trong mã 'RKLogConfigureByName (" RestKit/Network ", RKLogLevelTrace);' – redDragonzz