サービス層と UI 層が完全に分離されている場合、費用対効果が最大になります。つまり、特定の UI を念頭に置いてサービスを設計することはありません。そうすることで、サービスを最大限に再利用できるからです。UI 統合の柔軟性が大幅に向上するため、RESTful な Web ベースのサービス実装をお勧めします。現在、そのようなサービスからデータを利用できるライブラリは文字通り多数あります。
私は Ruby 開発者ではありませんが、Sinatra での単純な Web サービスの実装を次に示します。
require 'rubygems'
require 'sinatra'
require 'lib/posts'
post '/posts'
post = Post.create! params
redirect "/posts/#{post.id}"
do
get 'posts/:id' do
@post = Post.find(params[:id])
erb :post
end
帰属: Sinatra と RESTClient を使用した軽量 Web サービス。
サービスの実装に使用される実際の言語/プラットフォームは、RESTful であり、クライアントが簡単に使用できるデータを返す限り、無関係であることに注意してください。セットアップが完了したら、Web アプリとモバイル アプリのどちらを設計するかは、適切な統合ライブラリを選択することになります。
- HTML(5)/CSS/Javascript . モバイル アプリケーションと Web アプリケーションの両方の実装に使用できるため、より堅牢なオプションの 1 つです。上記の 3 つの技術は、新しい Web 2.0 アーキテクチャのコアを形成し、Angular.js、Ext.js、Backbone.js、Knockout.js、さらにはjQuery MobileまたはBootstrapなど、さまざまなフレームワークが存在します。これは、現在、Web サービス API を Web アプリケーションと統合する最も一般的な方法です。場合によっては、Web サイトを設計するだけで済み、それをモバイル アプリのベースとして使用することもできます (たとえば、iOS UIWebView/Android WebView を介して)。
- Middle Tier Proxy : ブラウザーで Ajax を無効にする場合 (セキュリティ上の理由、または XSS の問題を回避するため) には、このルートを使用します。プロキシは任意の言語 (Java、PHP、Ruby、Perl) で作成でき、Web サービスを使用して UI 用の動的 HTML を生成します。
実際の例として、私の現在のプロジェクトには、クラスター化された JBoss サーバーで実行される Java EE/JAX-RS を使用して構築された多数の RESTFul Web サービスがあります。サービスはデフォルトで JSON を返しますが、XML を生成することもでき、以下からアクセスできます。
- Ext.js を使用して構築されたさまざまな内部および外部 Web アプリケーション
- AFNetworking/RestKit/NSURLConnection の組み合わせを使用する iOS アプリケーション
- Jersey REST Clientを使用したAndroidアプリケーション
まったく同じサービスが複数の異なるプラットフォーム/UI で使用され、サービス側で変更する必要はありません。それがあなたが達成しようとしていると私が信じていることです。