【问题标题】:Developing An iOS SDK for a REST API为 REST API 开发 iOS SDK
【发布时间】:2012-08-19 11:06:48
【问题描述】:

我这几天一直在努力解决这个问题,但似乎无法弄清楚如何最好地构建它。我绝不是 Objective C 方面的专家。

我们已经为我们的 Drupal 应用程序开发了一个 RESTful API,并且我们目前在 App Store 中有一个使用 ASIHTTPRequest 连接到它的 iOS 应用程序。但是,正如你们中的一些人可能知道的那样,它不再受支持。所以我们决定过渡到 AFNetworking,并希望以这样一种方式构建它,以便我们可以将它作为一个库开源以与我们的 API 一起使用。

我们当前的应用程序使用 CoreData 并将所有数据存储到 SQLite 数据库中。目前的工作流程如下所示:

获取请求 接收 JSON 解析 JSON 并将其映射到 CoreData NSManagedObject 保存上下文

关于你们建议我将源代码作为库开源的路径,我有几个问题。

只是给一个粗略的概述:

我们有成员、组、事件、消息(最简单的)。

我一直在考虑解决这个问题的几种方法:

将 AFNetworking api 调用和解析/映射方法添加到 NSManagedObject

我喜欢这个概念,但我不确定它是否有意义。然后核心数据模式成为 API 的模式,这很棒。但我担心的是——如果其他使用它的开发人员不想在他们的应用程序中使用核心数据怎么办?最重要的是,我不确定返回多个实例的方法会是什么样子。例如,如果我有一个 NSManagedObject 组,我应该在哪里调用以获取组索引?此外,我们是否会将某人锁定在特定的核心数据模型中,这是一件好事吗?

拥有独立的对象,它们知道如何从 API 中检索自己的数据,将其解析为自己的属性,然后在公共库之外的某个地方映射到 NSManaged 对象

这种方式听起来也不错,但是我有非常相似的对象具有非常相似的属性。

类别

我在这里阅读了一些可以使用类别添加方法的内容 add additional properties to NSManagedObject with secondary .h .m files 我不确定这是否有意义。

API 类、核心数据类和映射器类。

绝对是乱七八糟的。

欢迎提出更好的建议!

我尝试查看其他一些示例,但我认为我没有足够的 Objective C 知识来正确剖析它们。

主要目标是:

抽象为可在其他应用中重复使用的请求库。 为对象强制执行模式是一个加号 如果他们不想,不要将人们锁定在 CoreData 模型或使用 CoreData。

提前感谢您的帮助!

【问题讨论】:

    标签: objective-c ios xcode api sdk


    【解决方案1】:

    如果您尝试强制实施您的架构,您应该创建自己的模型类。这可以通过子类 NSObject(或任何有意义的东西)或使用 Core Data/NSManagedObject Route 来完成。如果您这样做,只需包含所需的文件。

    就我个人而言,我会单独管理服务器调用。看看 Facebook SDK 3.0 可能会给您一些帮助。基本上创建一个或多个类来处理您的服务器调用,解析信息,然后以对您的用户有意义的方式将其传递回委托/块。

    在这里,您可以返回您的自定义对象(或它们的数组等)。您可以在任何网络层之上构建这一切。我是 AFNetworking 的粉丝,但任何方法都可以。只需在子项目/子模块/等中包含所需的代码。只需确保将功劳归功于您使用的所有库。

    另一种选择是创建一个框架或静态库,将所有这些封装在一起,并且不允许其他开发人员更改您的内部代码。希望这是一个开始。

    【讨论】:

    • 嗨詹姆斯,感谢您的回复!我只是想澄清一些事情:我已经有一个核心数据模式,所以我可以扩展 NSManagedObjects 以在 API 上强制实施模式。但是您建议分离进行 API 调用的类、解析数据并返回扩展 NS Object 的内容。我是否可以翻转它并将 API 调用类返回的内容扩展为托管对象?对不起,我可能在这里错过了很多点。我读了几遍,并不能特别理解。你介意把它分解一下吗(对于一个 n00b :)
    • 坐了一会儿,我认为它开始有意义了。基本上,您是说创建几个模型 - 组、消息、用户等。然后有一个控制器/多个控制器来进行 api 调用、解析器和填充这些模型,然后返回它们。然后播种 NSManagedObjects 并根据模型使用来自这些对象的数据填充它们。对吗?
    猜你喜欢
    • 1970-01-01
    • 2012-11-17
    • 2015-09-11
    • 2019-06-19
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多