Ruby on rails Rails多客户端应用程序-我真的应该使用API/json吗?

Ruby on rails Rails多客户端应用程序-我真的应该使用API/json吗?,ruby-on-rails,ruby-on-rails-4,rails-api,Ruby On Rails,Ruby On Rails 4,Rails Api,我正在构建一个RubyonRails4应用程序。网络版已经准备好了,我想设置/学习如何构建移动应用程序 我知道并在许多文章中读到“方法是使用rails api并向各种客户机提供json” 但我不确定它是否最合适:我不想仅仅因为它受欢迎就使用它。我想知道为什么(如果是)真的有必要 如果可能的话,我想建立一个“美丽的巨石”解释。 DHH(Rails gem的核心创建者)在Basecamp中使用了这一美丽的整体战略,他表示,这是一种混合的方法,是他们使用的第一种节省时间的策略,能够与少数开发人员一起维

我正在构建一个RubyonRails4应用程序。网络版已经准备好了,我想设置/学习如何构建移动应用程序

我知道并在许多文章中读到“方法是使用rails api并向各种客户机提供json”

但我不确定它是否最合适:我不想仅仅因为它受欢迎就使用它。我想知道为什么(如果是)真的有必要

如果可能的话,我想建立一个“美丽的巨石”解释。 DHH(Rails gem的核心创建者)在Basecamp中使用了这一美丽的整体战略,他表示,这是一种混合的方法,是他们使用的第一种节省时间的策略,能够与少数开发人员一起维护众多的web和移动应用程序

基本上,您在Rails应用程序和Rails应用程序中保留Rails控制器、Rails模型和所有内容,并使用phonegap容器在web视图中插入视图。您只能以这种方式更改视图(使用Rails 4.2变体)

有了这个策略,让我们举一个例子,在这里我们需要保存数据库数据。例如,如果有人加载我的移动应用程序: -iphone上的webview“主页”将加载例如:views/phone/projects/show.html.erb: 假设我需要在此页面中显示用户的名称,应用程序将在/app/controllers/homepage_controller.rb上获取它,并且此控制器将具有类似@users=user.find(id)的方法。。。(活动记录) 因此它将进入标准数据库(不需要任何api或json)

所以当我问“我真的很想知道为什么人们起诉rails api/josn来知道我是否真的必须使用它,或者我是否可以使用DHH hybird方法”时,人们会这么说

  • 80%的初创企业使用it=>blah…这还不够。我想知道我为什么要这么做

  • 如果没有API/json,您无法进行“单页应用”和ajax调用

  • 我在这里检查了一下,发现它是不正确的:如下所述,您可以在webview中完全使用ajax,也可以通过白名单来实现:

    :

    当您开发Cordova混合动力应用程序时,无需发出CORS请求。常规XHR请求将毫无问题地工作。原因是移动应用程序是从文件URI执行的,不符合跨源策略。移动应用程序有一个替代策略,称为域白名单

    :

    PhoneGap应用程序在webview中运行,而不是在浏览器中运行,因此PhoneGap应用程序不存在跨源问题,您可以对任何URL执行AJAX调用。唯一需要注意的是,config中有一个白名单参数“accessorigin”,用于限制对某些特定URL的访问

    因此,如果我遵循DHH混合方法保留我的Rails应用程序,但在web/iphone/android视图上更改视图,并在没有任何API或json的情况下使用我的数据库数据,这有可能吗

    API/json到底带来了什么,为什么它们真的是必要的,解释了大多数大型多客户端应用程序都使用它们?难道我的各种应用程序(web应用程序、移动应用程序、电视应用程序)不能在没有任何API/json的情况下访问数据库吗


    我可能遗漏了一些明显的问题,因此请提供建议。

    这个问题并不真正适合堆栈溢出,因为答案可能非常基于意见,也取决于您真正想要实现的目标。不过,我还是要试一试:

    你的第一个问题:

    因此,如果我遵循DHH混合方法保留我的Rails应用程序,但更改 在web/iphone/android上查看和使用我的数据库数据 任何API或json都可以吗

    是的,这是可能的。注意,它不会是移动设备上的“原生”应用程序,很多人认为这样的“应用程序”是低劣的(因为它们并不是真正安装在设备上的应用程序)。当然,最大的优势是您不必学习如何编写本机移动应用程序(以及与之对话的API)。另一个最大的优点是,您只需维护一个代码库(模型和控制器)即可为所有用户提供服务。你真的应该谷歌原生应用程序与非原生应用程序,才能看到完整的画面

    你的下一个问题:

    API/json到底给表带来了什么,为什么它们真的 必要时,解释大多数大型多客户端应用程序使用它们

    将API与代码库的“前端”部分分离,可以让不同的团队开发不同的前端。所以你可能有一个移动团队,专注于构建一个非常完善的移动原生应用程序。您还可以让后端团队关注API。因此,对于大型企业来说,这很有意义。该API也更易于扩展-您可以让多台服务器运行该API,并且随着更多“前端用户”的连接(无论是移动还是网络或其他形式),您可以提供更多的API副本以满足他们的需求。另一个选择是,如果需要,可以轻松地向第三方开发人员开放API。如果使用DHH混合方法,这将有点困难。不是不可能,而是更难

    最后一个问题:

    难道我的各种应用程序(web应用程序、移动应用程序、电视应用程序)都不能点击吗 没有任何API/json的数据库

    当然可以。这和第一个问题是同一个问题。不同的视图将为不同的客户端提供不同的“前端”(基本上是HTML/JS/CSS)。但它们都击中了相同的控制器/模型,因此也击中了数据库。只是别忘了你所有的客户端都是基于HTML的。大多数手机/平板电脑用户不喜欢必须打开浏览器才能使用“应用程序”。他们想要本土体验(电视盒、控制台等也是如此)


    顺便说一句,有很多方法可以开发共享一个代码库的移动应用程序(例如,请参阅appcelerator.com)。但这是另一种不同的方法

    因为你提到了Basecamp应用程序。据我所知,他们有一个手机网页,看起来像他们的应用程序,但我认为他们自己写应用程序…好吧,没关系。他们的解决方案正如你提到的。看起来很内敛