RESTful iPhone客户端和模型层次结构

时间:2009-03-16 14:38:36

标签: iphone cocoa cocoa-touch web-services rest

我很好奇大多数人为了在模型层次结构方面构建可靠的RESTful iPhone客户端而采用的策略。模型层次结构的意思是我有一个REST服务器,其中有几个资源相互关联。例如,假设我有一个REST服务器,它会泄露有关学校的信息。如果我想抓住特定班级的所有学生,我首先需要查询REST服务器以获取有关学校的信息,然后我需要向服务器查询学校提供的所有课程的信息,然后是随后要求特定班级的所有学生。在一天结束时,客户端引入了3个独特的XML树。那时,你们大多数人都会编写自己的算法来构建最终的树,这最终会成为你的数据源吗?你不是在这方面聚合XML树而是使用不同的方法吗?

您如何更喜欢在服务器上获取大量相关资源并将它们放入一个对客户端有意义的树中?

感谢您的见解。

4 个答案:

答案 0 :(得分:2)

如何选择存储在iPhone上管理模型数据可能取决于您处理的XML数据可能会有多大变化,以及它可能会变得多么臃肿。

如果这是一个不太可能改变的简单XML模型,并且不会携带非常多的冗余信息,那么您可以使用您按原样描述的XML树。

但是对于任何稍微复杂一点的东西,我更喜欢将XML表示转换为最容易被Objective-C代码操纵的格式。例如,考虑一下您的应用程序扩展一天以支持提供类似数据的其他基于Web的服务,但作为JSON或SOAP格式数据的可能性。现在,您开始遇到在应用程序中维护3种不同类型模型的麻烦,而最好只维护一种模型。

我会将基于XML的REST资源视为需要按摩成本地可操作格式的“外来数据”。如果您采用最大化执行特定于应用程序的操作的本地格式,那么您可以调整来自任何其他外国格式的输入,并根据需要转换回外来格式以进行上传/编辑/其他。

丹尼尔

答案 1 :(得分:2)

有一个名为IPhone on Rails的项目,他们在那里创建了ActiveResource的Objective-C实现。我还没有机会玩它,但它可能值得一试。

答案 2 :(得分:0)

我目前正在开发一个解决这个问题的项目,当我们将代码发送到稳定点时,我们将发布代码。

如果您没有标准化系统来序列化从服务器返回的所有对象,那么这是一个非常棘手的问题。幸运的是,在这个项目中我们有一个通用的序列化机制,所以我们构建了一个抽象的SAX解析器,我们继承它,然后使用type introspectionNSCoding来弥合Objective-C和XML之间的差距。你可以自己做一个类似的概念。

在这个项目开始之前,我刚刚构建/重用了几个类来处理NSURLConnectionNSXMLParser工作,但我没有使用类型内省,而是使用了Delegation Pattern

答案 3 :(得分:0)

就我自己而言,我一直在使用ASIHTTPRequest周围的包装器来构建RESTful查询。我一直使用libxml2处理结果,直接解析为呈现在用户界面中的模型对象。

我不确定我是否有适合您的解决方案,但我认为您将从功能分离到不同的可重用方法中获得很多收益。这样,您就不必担心返回的XML树的数量。您只需向您拥有的任何内容发出查询,以便填充您的界面。