4

目前,我们的 API 正在返回NULL任何int没有值的参数。

例如,在我们的用户 api 中,我们的参数之一如下所示:

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

我知道这不可能0,因为这可能是一个有效的响应,但是有一个NULL指针会导致各种问题,因为ints 不能是NULL指针。

我的想法是这些值应该完全被忽略 - 然后它们会返回看起来更合适nil的值(在目标 c 中,例如[dictionary objectForKey:@"user_id"] == nil),并且不检查空指针(这似乎是错误的,int 之间存在差异和一个指针)。

否则,一种解决方法是将其变成一个NSNumber需要指针的对象,因此可以是NULL. 然后我可以做类似的事情:

NSNumber *userID = [dictionary objectForKey:@"user_id"];
if(userID != [NSNull null]){
  // its not null
}

但对我来说,这感觉根本上是错误的,NSNumber文档中说的是:

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

这也让我感到肮脏。

(再说一次,我正在NSDecimalNumber用字符串初始化 s ......所以我不知道为什么这会打扰我......)。

4

3 回答 3

2

如果您的“API”预计会返回一个int,那么它不应该返回 NULL。就像您已经说过的那样,您可以使用NSNumber,在这种情况下您可以返回 NULL。在谈论时intNSNumber不会丢失数据,只有在诸如无理数之类的情况下,不同的类型才重要。

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

于 2012-11-20T16:12:55.790 回答
1

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

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

于 2012-11-20T16:06:36.650 回答
1

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

NSNumber *status= [dictionary objectForKey:@"status"];
if(status > 0){
    //succeed
}
else {
   //use status to indicate which error occured
}
于 2012-11-20T16:20:56.007 回答