Rails 多客户端应用程序 - 我真的应该使用 API / json 吗?
Rails multi-client app - Should I really use an API / json?
我正在 Rails 4 应用程序上构建 ruby。网页版已经准备好了,我想设置up/learn如何构建移动应用程序。
我知道并在许多文章中读到 "way to go is to use rails-api and feed json to the various clients"。
但我不确定它是否最合适:我不想仅仅因为它很受欢迎而使用它。我想了解为什么(如果有的话)真的有必要。
如果可能的话,我希望按照 here 的解释构建一个 "beautiful monolith"。
DHH(Rails gem 的核心创建者)在 Basecamp 中使用了这个漂亮的整体策略,他说这是一种混合方法,他们使用这种方法可以用很少的开发人员维护大量的网络和移动应用程序。
基本上,您保留 Rails 控制器、Rails 模型以及 Rails 应用程序和 rails 应用程序中的所有内容,并使用 phonegap 容器注入网络视图观点。您只能通过这种方式更改视图(使用 Rails 4.2 变体)。
https://signalvnoise.com/posts/3766-hybrid-how-we-took-basecamp-multi-platform-with-a-tiny-team
所以使用这个策略,让我们举一个我们需要数据库数据的例子。例如,如果有人加载我的移动应用程序:
- iphone 上的网络视图 'homepage' 将加载例如:views/phone/projects/show.html.erb:
假设我需要在此页面中显示用户名,应用程序将在 /app/controllers/homepage_controller.rb 上获取它,并且此控制器将具有类似 @users = User.find(id)... (活动记录)
所以它将进入标准数据库(不需要任何 api 或 json)
所以当我问“我真的很想知道为什么人们起诉 rails-api/josn 以了解我是否真的必须使用它,或者我是否可以使用 DHH 混合方法”时,这里是人们所说的
80% 的初创公司都使用它 => 废话……这不是一个足够的理由。我想知道我为什么要这样做。
没有 API/json
就无法调用 "single page apps" 和 ajax
我在这里检查了一下,它是不正确的:如下所述,您完全可以在 webview 中使用 ajax 完全可以通过白名单来完成:
http://www.telerik.com/forums/$-ajax-not-working-on-android-devices :
When you are developing a Cordova powered hybrid app, you do not need to make CORS requests. Regular XHR requests will work without a problem. The reason for this is that a mobile app is executed from a file URI and does not comply to the cross origin policy. Mobile apps have an alternative to this policy which is called domain whitelisting.
Are pure and traditional Ajax Requests possible on native / hybrid mobile apps?:
PhoneGap apps run in webview not in browser, so cross origin is not an issue with PhoneGap apps, you can perform AJAX calls to any URL. The only thing to care of is that there is a white list parameter "access origin" in config used to restrict the access to some specific URLs.
因此,如果我遵循 DHH 混合方法来保留我的 Rails 应用程序,但更改 web/iphone/android 视图上的视图并使用我的数据库数据而不使用任何 API 或 json, 可能吗?
API/json 真正给 table 带来了什么,为什么它们真的是必需的,解释大多数大型多客户端应用程序使用它们?难道我的各种应用程序(网络应用程序、移动应用程序、电视应用程序)都不能在没有任何 API/json 的情况下直接访问数据库吗?
我可能遗漏了一些明显的东西,请指教。
这个问题不太适合堆栈溢出,因为答案可能非常 opinion-based 并且还取决于您真正想要实现的目标。不过,我会去的:
你的第一个问题:
So if I follow DHH hybrid approach to keep my Rails app but change the
views on the web/iphone/android views and use my database data WITHOUT
any API or json, is it possible?
是的,这是可能的。请注意,它不会是移动设备上的 'native' 应用程序,许多人认为这样的 'apps' 是次等的(因为它们并不是真正安装在设备上的应用程序)。当然,最大的优势是您不必学习如何编写本机移动应用程序(以及与之交谈的 API)。另一大优势是您只需维护一个 code-base(模型和控制器)即可为所有用户提供服务。你真的应该 google 本机应用程序与 non-native 才能看到完整的画面。
你的下一个问题:
What does API/json really bring to the table, why would they be really
necessary, explaining most large multi clients app use them?
将代码库的 API 部分与 'front end' 部分分开可以让不同的团队开发不同的前端。因此,您可能拥有一个专注于构建非常精美的移动原生应用程序的移动团队。您还可以让后端团队专注于 API。因此,对于大型企业来说,这很有意义。 API 也更容易扩展 - 你可以有多个服务器 运行 API 和更多的 'frontend users' 连接(无论是移动还是网络或其他)你可以调出您的 API 的更多副本以满足他们的需求。如果需要,您的另一个选择是轻松地 open-up 您的 API 给第 3 方开发人员。对于 DHH 混合方法,这会有点困难。不是不可能,而是更难。
你的最后一个问题:
Can't each of my various apps (web app, mobile app, tv app) just hit
the database without any API/json ?
当然可以。这实际上与第一个问题相同。您的不同视图将为不同的客户提供不同的 'frontends'(基本上 HTML/JS/CSS)。但是他们都命中了相同的 controllers/models 和数据库。只是不要忘记您所有的客户都是基于 HTML 的。大多数 mobile/tablet 用户不喜欢必须打开浏览器才能使用 'app'。他们想要原生体验(电视盒、游戏机等也是如此)。
顺便说一句,有一些方法可以开发共享 one-code 基础的移动应用程序(参见 appcelerator.com 示例)。但这是另一种不同的方法!
我正在 Rails 4 应用程序上构建 ruby。网页版已经准备好了,我想设置up/learn如何构建移动应用程序。
我知道并在许多文章中读到 "way to go is to use rails-api and feed json to the various clients"。
但我不确定它是否最合适:我不想仅仅因为它很受欢迎而使用它。我想了解为什么(如果有的话)真的有必要。
如果可能的话,我希望按照 here 的解释构建一个 "beautiful monolith"。 DHH(Rails gem 的核心创建者)在 Basecamp 中使用了这个漂亮的整体策略,他说这是一种混合方法,他们使用这种方法可以用很少的开发人员维护大量的网络和移动应用程序。
基本上,您保留 Rails 控制器、Rails 模型以及 Rails 应用程序和 rails 应用程序中的所有内容,并使用 phonegap 容器注入网络视图观点。您只能通过这种方式更改视图(使用 Rails 4.2 变体)。
https://signalvnoise.com/posts/3766-hybrid-how-we-took-basecamp-multi-platform-with-a-tiny-team
所以使用这个策略,让我们举一个我们需要数据库数据的例子。例如,如果有人加载我的移动应用程序: - iphone 上的网络视图 'homepage' 将加载例如:views/phone/projects/show.html.erb: 假设我需要在此页面中显示用户名,应用程序将在 /app/controllers/homepage_controller.rb 上获取它,并且此控制器将具有类似 @users = User.find(id)... (活动记录) 所以它将进入标准数据库(不需要任何 api 或 json)
所以当我问“我真的很想知道为什么人们起诉 rails-api/josn 以了解我是否真的必须使用它,或者我是否可以使用 DHH 混合方法”时,这里是人们所说的
80% 的初创公司都使用它 => 废话……这不是一个足够的理由。我想知道我为什么要这样做。
没有 API/json
就无法调用 "single page apps" 和 ajax
我在这里检查了一下,它是不正确的:如下所述,您完全可以在 webview 中使用 ajax 完全可以通过白名单来完成:
http://www.telerik.com/forums/$-ajax-not-working-on-android-devices :
When you are developing a Cordova powered hybrid app, you do not need to make CORS requests. Regular XHR requests will work without a problem. The reason for this is that a mobile app is executed from a file URI and does not comply to the cross origin policy. Mobile apps have an alternative to this policy which is called domain whitelisting.
Are pure and traditional Ajax Requests possible on native / hybrid mobile apps?:
PhoneGap apps run in webview not in browser, so cross origin is not an issue with PhoneGap apps, you can perform AJAX calls to any URL. The only thing to care of is that there is a white list parameter "access origin" in config used to restrict the access to some specific URLs.
因此,如果我遵循 DHH 混合方法来保留我的 Rails 应用程序,但更改 web/iphone/android 视图上的视图并使用我的数据库数据而不使用任何 API 或 json, 可能吗?
API/json 真正给 table 带来了什么,为什么它们真的是必需的,解释大多数大型多客户端应用程序使用它们?难道我的各种应用程序(网络应用程序、移动应用程序、电视应用程序)都不能在没有任何 API/json 的情况下直接访问数据库吗?
我可能遗漏了一些明显的东西,请指教。
这个问题不太适合堆栈溢出,因为答案可能非常 opinion-based 并且还取决于您真正想要实现的目标。不过,我会去的:
你的第一个问题:
So if I follow DHH hybrid approach to keep my Rails app but change the views on the web/iphone/android views and use my database data WITHOUT any API or json, is it possible?
是的,这是可能的。请注意,它不会是移动设备上的 'native' 应用程序,许多人认为这样的 'apps' 是次等的(因为它们并不是真正安装在设备上的应用程序)。当然,最大的优势是您不必学习如何编写本机移动应用程序(以及与之交谈的 API)。另一大优势是您只需维护一个 code-base(模型和控制器)即可为所有用户提供服务。你真的应该 google 本机应用程序与 non-native 才能看到完整的画面。
你的下一个问题:
What does API/json really bring to the table, why would they be really necessary, explaining most large multi clients app use them?
将代码库的 API 部分与 'front end' 部分分开可以让不同的团队开发不同的前端。因此,您可能拥有一个专注于构建非常精美的移动原生应用程序的移动团队。您还可以让后端团队专注于 API。因此,对于大型企业来说,这很有意义。 API 也更容易扩展 - 你可以有多个服务器 运行 API 和更多的 'frontend users' 连接(无论是移动还是网络或其他)你可以调出您的 API 的更多副本以满足他们的需求。如果需要,您的另一个选择是轻松地 open-up 您的 API 给第 3 方开发人员。对于 DHH 混合方法,这会有点困难。不是不可能,而是更难。
你的最后一个问题:
Can't each of my various apps (web app, mobile app, tv app) just hit the database without any API/json ?
当然可以。这实际上与第一个问题相同。您的不同视图将为不同的客户提供不同的 'frontends'(基本上 HTML/JS/CSS)。但是他们都命中了相同的 controllers/models 和数据库。只是不要忘记您所有的客户都是基于 HTML 的。大多数 mobile/tablet 用户不喜欢必须打开浏览器才能使用 'app'。他们想要原生体验(电视盒、游戏机等也是如此)。
顺便说一句,有一些方法可以开发共享 one-code 基础的移动应用程序(参见 appcelerator.com 示例)。但这是另一种不同的方法!