我正在Rails 4应用程序上构建一个ruby。网络版已准备就绪,我想设置/学习如何构建移动应用程序。
我知道并在许多文章中读到“走的路是使用rails-api并将json提供给各个客户”。
但我不确定它是否最合适:我不想仅仅因为它受欢迎而使用它。我想了解为什么(如果有的话)真的有必要。
我想尽可能按照here的说明建造一个“美丽的巨石”。 DHH(Rails gem的核心创建者)在Basecamp中使用了这种美丽的整体策略,这是一种混合方法,他说这是他们用来维护少数开发人员众多网络和移动应用程序的第一个节省时间的策略。
基本上,您将Rails控制器,Rails模型以及Rails应用程序和rails应用程序中的所有内容保留在一起,并使用phonegap容器在Web视图中注入视图。您只能以这种方式更改视图(使用Rails 4.2变体)。
https://signalvnoise.com/posts/3766-hybrid-how-we-took-basecamp-multi-platform-with-a-tiny-team
因此,使用此策略,让我们举例说明我们需要数据库数据。例如,如果有人加载我的移动应用程序: - iphone上的webview“主页”将加载ex:views / phone / projects / show.html.erb: 说我需要在这个页面中显示用户的名字,应用程序将在/app/controllers/homepage_controller.rb上获取它,这个控制器将有一个像@users = User.find(id)...的方法(活跃记录) 因此,它将成为标准数据库(不需要任何api或json)
所以,当我问'我真的想知道为什么人们起诉rails-api / josn知道我是否真的必须使用它,或者我是否可以使用DHH hybird方法'时,人们会说这里
80%的初学者使用它=>哇...不够理由。我想知道为什么要这样做。
你不能做“单页应用”和没有API / json的ajax调用
我检查过这是不正确的:如下所述,你可以在webview中完全使用ajax,可以通过白名单来完成:
http://www.telerik.com/forums/$-ajax-not-working-on-android-devices:
在开发Cordova驱动的混合应用程序时,您无需提出CORS请求。定期的XHR请求可以正常运行。这样做的原因是移动应用程序是从文件URI执行的,并且不符合交叉原始策略。移动应用程序可以替代此策略,称为域白名单。
Are pure and traditional Ajax Requests possible on native / hybrid mobile apps?:
PhoneGap应用程序在webview中运行,而不是在浏览器中运行,因此交叉来源不是PhoneGap应用程序的问题,您可以对任何URL执行AJAX调用。唯一需要注意的是配置中有一个白名单参数“access origin”,用于限制对某些特定URL的访问。
因此,如果我遵循DHH混合方法来保留我的Rails应用程序但更改web / iphone / android视图上的视图并使用我的数据库数据没有任何API或json,是否可能?
API / json真正带来了什么,为什么它们真的有必要,解释大多数大型多客户端应用程序使用它们?我的各种应用程序(网络应用程序,移动应用程序,电视应用程序)不能在没有任何API / json的情况下访问数据库吗?
我可能会遗漏一些明显的东西,所以请指教。
答案 0 :(得分:1)
这个问题并不适合堆栈溢出,因为答案可能非常基于意见,也取决于你真正想要实现的目标。但是,我会去:
你的第一个问题:
因此,如果我遵循DHH混合方法来保留我的Rails应用程序但是改变了 在web / iphone / android视图上查看并使用我的数据库数据WITHOUT 任何API或json,是否可能?
是的,这是可能的。请注意,它不会是移动设备上的“原生”应用,并且许多人认为此类“应用”较差(因为它们不是设备上安装的应用)。当然,最大的优势在于您无需学习如何编写本机移动应用程序(以及用于与之交谈的API)。另一个很大的优势是您只需要维护一个代码库(模型和控制器)来为所有用户提供服务。你应该真的谷歌原生应用程序与非原生应用程序,以查看完整的图片。
你的下一个问题:
API / json真正带来了什么,他们为什么会这样 必要的,解释大多数大客户应用程序使用它们?
将API从代码库的“前端”部分中分离出来,可以让不同的团队开发出不同的前端。因此,您可能拥有一个专注于构建非常优秀的移动原生应用的移动团队。您还可以让后端团队专注于API。因此对于大型企业而言,这很有意义。 API也更容易扩展 - 您可以拥有多个运行API的服务器,并且随着更多“前端用户”连接(无论是移动设备还是网络或其他),您可以提供更多的API副本以满足他们的需求。您需要的另一个选择是在需要时轻松向第三方开发人员开放API。使用DHH混合方法会有点困难。并非不可能,但更难。
你的上一个问题:
我的各种应用程序(网络应用程序,移动应用程序,电视应用程序)都无法点击 没有任何API / json的数据库?
是的,当然。这与第一个问题的确是同一个问题。您的不同视图将为不同的客户端提供不同的“前端”(基本上是HTML / JS / CSS)。但他们都打了相同的控制器/模型,因此数据库。只是不要忘记所有客户都是基于HTML的。大多数移动/平板电脑用户不喜欢打开浏览器来使用“应用”。他们想要本土体验(电视盒,游戏机等)也是如此。
顺便说一下,有很多方法可以开发共享单一代码库的移动应用程序(例如,参见appcelerator.com)。但那是另一种不同的方法!