如何启动期望JSON有效负载的Web服务请求

时间:2013-02-06 10:01:23

标签: iphone ios objective-c json jsonkit

我是JSON新手,无法找到有关如何模拟JSON有效负载请求的任何资料。

我的最终目标是能够构建一个可以处理这些请求响应的objective-c iOS应用程序。我知道ASIHttprequest框架及其解决的请求 - 响应机制。

但是现在我有一个webservice api,它需要各种json有效负载,并且还提供json格式的响应。这是一个例子:

示例网址:

https://mywebServiceURL/api/ApiKey/user/create

The ContentType header = “application/json”.

Payload:PUT有效负载是一个JSON字典,包含以下keyvalue对:

email
screenName
User’s screen name. 
password
passwordConfirm    
phoneNumber (optional)
User’s phone number (optional)
picture A png file (64x64), encoded as a Base64 string (optional)

现在我的问题:

1 - 如何正常模拟(在ios之外,只是为了测试)?我搜索谷歌但找不到我需要的东西,我得到了curl.exe但它给了我与浏览器给出的相同,如方法不允许等等。但这不是我想要的唯一的东西。在我知道PUT,GET,POST等之前它是如何工作的之前,我想要玩各种请求,提供价值并花一点时间来搭便车。

2 - 将这些内容整合到iOS中的最佳方法是什么?我已经有ASIHttp用于Web请求,JSONKit用于我的项目中包含的JSON处理。

我已经做过这种事情,但是使用xml响应,获取请求。 JSON我是第一次工作。只是一个指向这样的例子的指针将是一个很大的帮助。

2 个答案:

答案 0 :(得分:1)

  1. 您可以使用多种Chrome扩展程序(例如Advanced REST客户端或REST控制台)来模拟REST调用。这些可以非常快速,轻松地安装到您的浏览器中,并允许您构建请求并查看响应。

  2. 我建议使用开源iOS网络库AFNetworking。该库内置了对REST调用和JSON解析的支持。它非常容易启动和运行,如果您需要更高级的功能,它非常强大。

  3. 希望这有帮助。

答案 1 :(得分:1)

Jsut补充了Andy的建议,因为我在我最近的一个应用程序中使用过类似的东西。

  1. 用于测试REST通话的Chrome扩展程序海报。
  2. 使用ASIHttpRequest处理异步查询。
  3. 示例代码段

        //dictionaryData contains the login user details
        NSData* jsonData = [NSJSONSerialization dataWithJSONObject:dictionaryData  options:kNilOptions error:nil]; 
        NSString *jsonString = [[[NSString alloc] initWithData:jsonData                  encoding:NSUTF8StringEncoding]autorelease];                                         
        //Handling ASI requests
        ASIHTTPRequest* request = [ASIHTTPRequest requestWithURL:uri];
        [request addRequestHeader:@"Content-Type" value:@"application/json"];
        [request addRequestHeader:@"Accept" value:@"application/json"];
        [request appendPostData:[jsonData dataUsingEncoding:NSUTF8StringEncoding]];
        [request setRequestMethod:@"POST"];
        [ASIHTTPRequest setDefaultTimeOutSeconds:30];
        request.delegate = self;
        [request startAsynchronous];