iPhone和Rest Web服务-最佳做法是什么?

问题描述 投票:1回答:1

我正在开发将所有功能都使用php Web服务的iPhone应用程序。 我打算创建模型对象以在UI和Web服务之间进行通信。

在php上创建模型类以在iphone模型和数据库之间进行通信是否更好? 还是可以直接从数据库与iPhone的模型类进行通信?

以下哪一项是处理此通信的正确方法?

  • iphone-ui- => iphone-model-classes =>网络服务==>数据库
  • iphone-ui => iphone-model-classes => php-model-classes => Web服务==>数据库
iphone web-services model communication
1个回答
0
投票

为什么要使用PHP? 只需使用相关的数据库库,然后直接从设备连接到数据库!

有很多原因使您可能需要在电话和数据库服务器之间放置一些东西:

  • 认证方式
  • 数据验证/完整性检查
  • 记录/审核
  • 模式变更

完整的模型类似乎有点重量级(特别是因为PHP不缓存任何内容),但是您需要确定如何在服务器端执行操作。 特别是,您可能希望使用模型类和持久层,以避免直接处理Sqlite / MySQL / Postgres / ODBC / blah。

为什么PHP不是Web服务的最佳语言也有很多原因...

编辑:我在玩魔鬼的提倡者。

与数据库的“连接”通常只是TCP连接(尽管几乎所有现代POSIXish DB都支持通过Unix套接字进行连接,这在某种程度上更为安全)。 通常,您需要实现数据库的协议。 最简单的方法是使用数据库提供的C库(用于Postgresql 8.4的libpq5,用于MySQL 5.1的libmysqlclient16等)。 我敢肯定,iOS默认不包含它们(但Postgres附带有IIRC OSX旧版本)。

但是,出于安全原因,这非常糟糕:

  • 大多数Linux发行版都将DB服务器配置为仅在Unix套接字上侦听(即,您不能通过localhost连接到它们)。 控制访问权限要容易得多(只有可以访问文件的人才能连接),并且还可以轻松进行身份验证(您可以在连接的另一端获取进程的用户ID,这意味着您不需要完全没有密码-这是Postgres的默认配置)。
  • 大多数允许通过TCP连接的配置都是这样做的,因为Java DB库通常不支持Unix套接字(因为“纯Java”实现据称具有优势,尽管您需要使用Unix套接字的本地代码数量很少)。 通常,这些仅允许来自本地主机的连接(而不是Internet上的随机位置)。
  • 如果您对整个Internet具有对相关表的只读访问权限感到满意,那么这可能是明智的。 否则,您将需要某种访问控制:
    • 允许更广泛的Internet写入您的数据库是不好的。 您不能只是在应用程序中嵌入密码; 该应用将在几天/几周内被破解,如果攻击者足够好奇,密码将被提取。
    • 数据库访问控制是按数据库或按表的,而您希望按行控制访问(即,用户可以在“用户”表中看到他们自己的行,而其他用户则看不到该行)。其他用户的数据)。
    • 数据库服务器通常不对帐户登录进行任何形式的速率限制,这使得进行在线暴力攻击变得微不足道。

再说一次,您很少希望电话直接与数据库通话。 这意味着您在更新架构时应用程序将停止运行(不可以;不应该强迫用户升级)。 可能可以将某些视图/触发器/等放在一起作为兼容性层。 恶心。

其次,关系数据库通常不适合真正的应用程序。 您要向下滚动表格视图。 每个单元格都从数据库行加载。 每行都通过网络加载。 (使用CoreData 一次之后 ,我再也不想回头了。它使我的生活变得更加轻松。虽然我不会在服务器端使用它(我们的服务器运行Debian,而我们的Web服务大多是用Python编写的),要使用Objective-C编写应用程序,Core Data不会再增加任何供应商锁定-我不知道有人认真对待GNUstep。

相反,它有助于考虑要提供给Web客户端的API。 大多数Web服务(Facebook,Twitter,可能还有其他)似乎都提供了一个相当“愚蠢”的扁平模型。 编写最简单的东西,使您可以实现所需的API。 如果这样做足够容易,这可能意味着使用模型类(Google App Engine的建模抽象很好;显然基于Django的建模抽象)。

© www.soinside.com 2019 - 2024. All rights reserved.