为 iPhone 应用程序实现 RESTful Web API 的最便宜的方式(平台/语言)?

Posted

技术标签:

【中文标题】为 iPhone 应用程序实现 RESTful Web API 的最便宜的方式(平台/语言)?【英文标题】:Cheapest way (platform/language) to implement a RESTful web API for an iPhone app? 【发布时间】:2011-04-14 23:09:54 【问题描述】:

我正在开发一个 iPhone 应用程序,并希望创建某种 RESTful API,以便该应用程序的不同用户可以共享信息/数据。创建一个社区。​​p>

假设我的应用是某种游戏,我希望用户能够在全球排行榜上发布他们的高分,并维护朋友列表并查看他们的分数。我的应用与此完全不同,但它显示了我需要实现的那种集体信息访问。

我可以实现这一点的方法是设置一个 phpmysql 服务器,并有一个 php 脚本与数据库交互,并通过接受 GET 请求并返回一个JSON 字符串。

这是一个好方法吗?在我看来,与使用编译语言相比,使用 PHP 是一种较慢的实现方式。我可能是非常错误的。我正在努力降低托管费用,因为我计划免费发布该应用程序。我确实认识到,在 CPU 周期和 RAM 使用率方面表现更好的实现(例如用 C# 编写的东西?)可能需要比 LAMP 服务器更昂贵的托管解决方案,因此实际上最终可能会更贵/请求。

我还希望我的实现在很多人开始使用该应用的极少数情况下具有可扩展性。使用量是否会将性能/美元比率转向不同的实现? IE。如果我每天有 1k 请求,使用 PHP+MySQL 可能会更便宜,但是每天 1M 请求可能会使使用其他东西更便宜?

总而言之,您将如何实现一个(相当简单的)远程数据库,该数据库将使用 HTTP(S) 进行远程访问,以最大限度地减少托管费用?什么样的托管解决方案和什么样的平台/语言?

更新:根据 Karl 的建议,我尝试了:Ruby(语言)+ Sinatra(框架)+ Heroku(应用托管)+ Amazon S3(静态文件托管)。对于任何可能遇到与我相同的困境的读者来说,这个设置是惊人的:毫不费力地可扩展(到“无限”),价格实惠,易于使用。谢谢卡尔!

目前无法评论 DB 细节,因为我还没有实现,尽管对于我的简单查询需求,CouchDB 和 MongoDB 似乎是不错的选择,并且它们与 Heroku 集成。

【问题讨论】:

嗨,codenoob。有这方面的消息吗?你完成你的解决方案了吗?您有时间尝试应用引擎吗? 嘿 Johe,我已经实现了它,现在正在开发 ios 客户端。我使用 Ruby 和在 Heroku 上运行的 Sinatra,在 Amazon S3 上运行静态文件,在 MongoHQ 上运行 MongoDB 数据库。使用 Sinatra 实现 RESTful 协议非常简单,而且一切都具有极强的可扩展性,我只需为我使用的资源付费。我还没有尝试过应用引擎,因为这对我来说非常有效。 【参考方案1】:

这归结为成本与经验之间的权衡。

如果您有专业知识,我肯定会研究某种形式的基于云的基础架构,例如 Google App Engine。您使用哪个云平台取决于您对不同语言的经验(例如,AppEngine 仅适用于 Python/Java)。不过一般来说,可扩展的基于云的平台有更多的“陷阱”并且需要更多的专业知识,因为它们专门针对高端可扩展性进行了调整(因此在某些情况下需要了解企业级概念)。

如果您想尽可能快速简单地启动并运行,我个人会选择CakePHP 安装。设置模型数据以表示您正在管理的基本实体,然后使用 CakePHP 的奇妙的约定爱好魔法轻松地在这些模型上公开 CRUD 更新!

【讨论】:

我现在决定使用 Sinatra 和 Heroku,因为它似乎很容易做我想做的事。我看过 GAE 并且已经有一些 Java 经验,所以我将来也一定会尝试这个。感谢您的提示!【参考方案2】:

与使用 HTTP 的方式相比,您用于实现 REST 服务的技术对性能和托管成本的影响要小得多。学习利用 HTTP 不仅仅是学习如何使用 GET、PUT、POST 和 DELETE。

使用您已经知道的任何服务器端技术,并花一些时间阅读 RFC2616。您将为自己节省大量时间和金钱。

【讨论】:

【参考方案3】:

您是否考虑过使用 Sinatra 并将其托管在 [Heroku] 上?这正是 Sinatra 擅长的(REST 服务)。使用 Heroku 托管可能是免费的,具体取决于您需要存储的数据量。只需将所有支持文件(图像、javascript、css)保存在 S3 上。您很快就会在云端飞翔。

这可能不符合您的 PHP 需求,但老实说,它并没有比 Sinatra 更容易。

【讨论】:

这看起来很有趣,我会试一试。我想我现在可以摆脱免费的 Blossom 服务,如果应用程序的需求增长,价格上涨似乎非常合理。不过,我将来可能会尝试使用谷歌应用引擎。感谢您的信息!【参考方案4】:

在您的情况下,每个请求都会访问其数据库服务器。因此,即使您已经编译了语言(例如 C# 或 java),也没有多大关系(除非您正在进行一些数据转换或处理)。

所以数据库服务器必须很好地扩展。在这里,您选择的语言和数据库应该与主机操作系统一起配置好。

简而言之,如果您要发送/接收 JSON 字符串并以最少的数据处理在 DB 中存储/检索,那么 PHP+MySQL 会很好。

下一个应用程序变得流行,如果您的应用程序不需要频繁更新现有数据,那么您可以将此类数据移动到高度可扩展的数据库,如 MongoDB(JSON 友好)。

【讨论】:

以上是关于为 iPhone 应用程序实现 RESTful Web API 的最便宜的方式(平台/语言)?的主要内容,如果未能解决你的问题,请参考以下文章

通过 RESTful-Http 与 iPhone 应用程序中的 Web 服务进行通信的最佳方式是啥

如何在 PHP 中构建安全的 RESTful 服务?

扩展 restful_authentication/AuthLogic 以支持匿名 iPhone 的延迟登录的最佳方法是啥?

使用 Apache Shiro 保护 RESTful Web 服务

HTML5:为iPhone创建一个动态Google地图站点w/Marker

REST Web服务WSDL? [重复]