API应该为int参数返回NULL吗? +如何处理

时间:2012-11-20 16:03:36

标签: objective-c ios api rest

目前,我们的API会针对任何没有值的NULL参数返回int

e.g。在我们的用户api中,我们的一个参数如下所示:

{
    ...
    "user_id":NULL
    ...
}

我理解这不能是0,因为它可能是一个有效的响应,但是有一个NULL指针会导致各种问题,因为int s不能{ {1}}指针。

我的想法是应该完全忽略这些值 - 然后它们将返回NULL值(在目标c中,例如nil),这似乎更合适,并且不检查null指针(看似错误,int和指针之间存在差异)。

否则,解决方法是将其变为需要指针的[dictionary objectForKey:@"user_id"] == nil对象,因此可以NSNumber。然后我可以做类似的事情:

NULL

但对我而言,这感觉从根本上是错误的,NSNumber *userID = [dictionary objectForKey:@"user_id"]; if(userID != [NSNull null]){ // its not null } 文档说的是:

  

请注意,数字对象不一定保留使用它们创建的类型。

这也让我觉得很脏。

(然后,我正在用字符串初始化NSNumber s ...所以我不知道为什么这会打扰我......)。

3 个答案:

答案 0 :(得分:2)

如果您的“API”预计会返回int,那么它永远不会返回NULL。就像你已经说过的那样,你可以使用NSNumber,在这种情况下你可以返回NULL。在谈论int时,NSNumber不会丢失数据,只有在非理性数字的情况下,不同的类型才会重要。

简而言之,如果要在某些情况下返回NULL / nil,则必须使用对象类型,而不是int。如果您使用int感觉更好,那么唯一的方法是使用特殊的“无效”值,例如-1-INT_MAX,让用户知道该值无效。或者,如果这是一个选项,您可以抛出异常 - 或者只是添加另一种方法来检查是否可以给出有效的响应。

答案 1 :(得分:1)

如果API没有用户且user_id是唯一返回的值,为什么不返回正文中没有任何内容的404状态代码。然后你只需检查状态代码。有道理,404 ==资源不存在。利用REST并使用您的状态代码,不要使用200个状态代码返回虚假资源。

但是,如果user_id只是返回的较大资源的一部分(如与另一个资源的关系),那么如果没有为返回的资源设置user_id,则NULL完全合理。

答案 2 :(得分:1)

如何使用API​​调用的成功结果创建状态键?这就是我在创建API响应时经常做的事情。它可能只是一个布尔值,表示它是否有效,或者是一个整数,表明如果它没有成功则发生了什么错误。这样,如果API失败,您甚至不需要触摸此示例中的user_id。

NSNumber *status= [dictionary objectForKey:@"status"];
if(status > 0){
    //succeed
}
else {
   //use status to indicate which error occured
}