代码之家  ›  专栏  ›  技术社区  ›  lmirosevic

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

  •  10
  • lmirosevic  · 技术社区  · 14 年前

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

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

    我可以实现这一点的方法是设置一个PHP和MySQL服务器,并使用一个PHP脚本来与数据库进行交互,并通过接受GET请求并返回一个JSON字符串来在数据库和iPhone上的每个用户之间调解请求。

    这是个好方法吗?在我看来,使用PHP是实现这一点的缓慢方式,而不是说编译语言。但我可能是错的。因为我计划免费发布这个应用程序,所以我尽量减少托管费用。我确实认识到,在CPU周期和RAM使用方面性能更好的实现(例如,用C编写的代码)可能需要比LAMP服务器更昂贵的托管解决方案,因此最终可能会比LAMP服务器的美元/请求更昂贵。

    我还希望我的实现在很少有人开始使用这个应用程序的情况下是可伸缩的。使用量是否会将性能/美元比率转移到不同的实现中?也就是说,如果我每天有1K的请求,使用php+mysql可能会更便宜,但是每天有1M的请求可能会使使用其他更便宜的东西?

    总而言之,您将如何实现一个(相当简单的)远程数据库,该数据库将使用HTTP(s)远程访问,以尽量减少托管账单?什么样的托管解决方案,什么样的平台/语言?

    更新 :根据卡尔的建议,我尝试了:Ruby(语言)+Sinatra(框架)+Heroku(应用程序托管)+AmazonS3(静态文件托管)。对于任何读到这篇文章的人来说,他们可能会遇到和我一样的困境,这个设置是令人惊奇的:可以轻松地扩展(到“无限”)、负担得起、易于使用。谢谢卡尔!

    我还不能对数据库的细节发表评论,因为我还没有实现它,尽管对于我的简单查询需求,CouchDB和MongoDB看起来是不错的选择,并且它们与Heroku集成在一起。

    4 回复  |  直到 14 年前
        1
  •  5
  •   Karl    14 年前

    你考虑过使用吗 Sinatra 把它放在[英雄]上?这正是西纳特拉擅长的(休息服务)。根据需要存储的数据量,使用Heroku托管可能是免费的。只需将所有支持文件(图像、javascript、css)保存在S3上。你很快就会在云中飞去。

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

        2
  •  0
  •   Sam Day    14 年前

    归根结底是成本与经验的权衡。

    如果你有专业知识,我肯定会研究一些基于云的基础设施,比如 Google App Engine . 你使用哪个云平台取决于你使用不同语言的体验(AppEngine只对Python/Java进行E.g)。不过,一般来说,可扩展的基于云的平台有更多的“gotchas”,需要更多的专业知识,因为它们专门针对高端可扩展性进行了调整(因此在某些情况下需要了解企业级概念)。

    如果你想尽快简单地启动和运行,我会亲自去 CakePHP 安装。设置模型数据以表示您正在管理的基本实体,然后使用Cakephp奇妙的、热爱约定的魔力,轻松地公开这些模型上的CRUD更新!

        3
  •  0
  •   Darrel Miller    14 年前

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

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

        4
  •  0
  •   hashtd    14 年前

    在您的案例中,它的数据库服务器在每次请求时都会被访问。因此,即使你已经编译了语言(比如C语言或Java语言),它也没什么关系(除非你正在做一些数据转换或处理)。

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

    简而言之,如果您发送/接收JSON字符串并以最少的数据处理在数据库中存储/检索,php+mysql是很好的。

    下一个应用变得流行,如果你的应用不需要经常更新现有的数据,那么你可以将这些数据移动到像MongoDB(支持JSON)这样的高度可扩展的数据库中。