これは「アンチパターン」であり、使用を中止すべきですか、それともこの巧妙な設計ですか?


10

RESTサービスを作成するとき、私は基本的に次のことをするために凝視しました:

  1. HTMLが要求されています
  2. サービスは必要なWebページを返しますが、要求された「リソース」はありません。データ
  3. Webページには、同じサービス(異なるコンテンツタイプ)にAJAXリクエストを発行するJavaScriptが含まれています
  4. サービスが実際のデータ(JSON)を返し、ページに表示されます

一方では効率が悪いように見えます(2リクエスト)が、これを使用した場合、「パフォーマンスは問題ありません」、つまりトラフィックの少ない内部アプリとWebサイトはシンプルで高速にロードされます。

私がこれで終わった理由は、Webページがほとんど純粋なHtml + JavaScriptになる可能性があり、そのようなテーブルやものを作成するためにサーバー側のもの、特にループがほとんど必要ないことです(これは、 slickgridなど)、たとえばデータとビューの分離。

これを使用する前に、これは良いアイデアですか、それともやめるべきですか?


2
愛する人ともっと時間を過ごしたい、趣味を楽しんだり、個人的な目標を追求したりする自由な時間があることを望むなら、神の目的のために、そのようなアプリケーションをプログラムしないでください!しかし、夜遅くまで週末にオフィスに滞在し、大量の「賢い」コードを維持したい場合は、自分にぴったりです。
TulainsCórdova2013

3
悪いと思うことを具体的に説明できますか?コンテキスト:これは、ビジネスに不可欠な10 Mio LOCの獣ではありません。これは、LOCが5000未満で、数日間動作しない場合でも問題ありません。はい、それは私が安っぽいことをするべきではなかったので、あなたがとても悪いと思うことを詳しく調べてください。
beginner_

@begginer_すべてのソフトウェアは小さなものから始まります。あなたが説明するのはルーブゴールドバーグマシンです。ハンマーが男に当たる、男がビスケットを落とす、オウムがビスケットをつかむ、花瓶を傾けるなど
TulainsCórdova13年

これが行われる理由は、多くの場合、パフォーマンスを向上させるためです。この場合、データのフェッチは、異なるサーバーである可能性のあるものに対する複数の同時リクエストで実行できます。これはあなたの場合には当てはまらないようです。
user16764 2013年

スクリプトなどのクライアントやcurlからこのサービスをどのように使用しますか?これらのものには、JavaScriptインタープリターがありません。これはブラウザのみのサービスですか?
Bryan Oakley 2013年

回答:


17

リソースをリクエストしてもデータが含まれていない場合は、RESTサービスではありません。jsonで実際のデータを提供するサービスはあるかもしれませんが、HTML部分はそうではありません。Webアプリケーションの場合は重要ではありません。

この手法は機能しますが、その制限に注意する必要があります。

  1. 検索エンジンはJavaScriptを解釈しないため、そのように実装されたサイトは、Googleなどでインデックスに登録できません。社内アプリケーションの場合は重要ではありませんが、一般公開の場合は非常に重要です。
  2. 特別なニーズのあるユーザー(点字端末を使用しているユーザーなど)は、かなり制限された特別なブラウザーを使用しており、JavaScriptを適切に解釈できない場合があります。

また、HTMLを生成するコードは、サーバー側で実行する場合でもクライアント側で実行する場合でも基本的に同じであることに注意します。サーバーサイドでは、言語とフレームワークの両方をはるかに多く選択できますが、slickgridに相当するものもいくつかあると思います。

データの分離を維持し、サーバー側で表示することができます。テンプレートシステムは、データをデータ構造またはjson(特に実際のサービスがテンプレートシステムとは異なる言語である場合)として受け取り、そのデータを使用してテンプレートを展開することができます。

そして、いいえ、私はPHPについて考えていません。それは世の中で最も能力の低いテンプレートシステムです(ただし、その上に構築されたより優れたテンプレートシステムもあります)。GenshiXSLT、またはWebウィジェットを提供するさらに高度なものを考えています。


私はJavaScriptでファットクライアントを記述します。これはまさにこれを行います。しかし、それはおそらく通常のウェブサイトにとっては悪い考えです。
K ..

なぜRESTではないのですか?
dagnelies 2013年

1
アプリケーションを形成する「データ」(HTML、JS、CSSなど)とアプリケーションが表示する「データ」(JSON)を区別すると、JSON部分はRESTですが、「コード」をロードする部分はt。全体をより抽象的に見ると、両方とも抽象的です。
K ..

2

コードをきれいに構造化することを確認する限り、これを行うことに問題はありません。Webサービスではなく、Apacheなどから静的コンテンツを提供することもできます。


2
Apacheは静的コンテンツには過剰です。より高速なサーバーがあります。最も人気があるのはNginxのようです。
Jan Hudec

5
これは一例であり、それ以上のものはありません。
Steven Schlansker、2013年

2

これは良い習慣です。そして、@ JanHudecが指摘しているように、RESTサービスと呼ぶのは間違っています。しかし、多くのWebサイトは、あなたが指摘する理由のために、まさにこれを実行します。


1
...そして多くの人がそうする大きな理由は、データのやり取りがサービス/ JSONを介して行われるためです。そのため、すべてのデータのやり取りを同じ方法で処理する方が良いでしょう。(つまり、AJAXを使用してテーブルを更新する場合...そもそもそれを使用してテーブルを作成する必要があります。)
Chad Thompson

@ChadThompsonええ、多くの場合、最初にこのようなものを構築しないと、多くの場合、何かをしているクライアントに基づいてページを動的に更新する機能リクエストを取得します。つまり、単純な実装により、クライアントサーバーの両方がページの作成方法を認識できるようになります。そもそもクライアントでビルドする方が簡単です。
タクロイ2013年

1

私はそれをアンチパターンとは呼びません。あなたが説明しているのは多かれ少なかれファットクライアントであり、Trelloのようなサービスとは全く異なりません。サーバーの最初の責任は、DOMとクライアントを動作させるために必要なリソースを送信することです。私はデータセンターの自動化とネットワーク監視で同様のプロジェクトに取り組んできました。

クライアントは疎なDOMとして開始し、XHRを介して(場合によってはJSONPを介して)データを取り込み、最後に自身をソケットサーバーに接続します。さらに基本的な例は、チャットアプリケーションです。

それを行わない唯一の理由、正しくするのが非常に難しいことです。非同期関数プログラミングと、それがもたらす可能性のあるすべての競合やその他の課題に慣れている場合は、それを維持するのに問題はありません。さらに重要なことに、他の人々が最終的にそれを維持できるように、あなたはそれを書くことに問題がないでしょう。

より多くの機能を追加するという考えがあなたを怖がらせ始めるか、デバッグが悪夢であることに気づき始めたら、実験と学習を続けながら、本番環境の他の方法を検討することをお勧めします。

自分で穴を掘らない限り、これは有効な設計です。クリーンなインターフェースの代わりに至る所にランダムなJSのゴブとゴブがある場合は、おそらくリファクタリングするか、プロジェクトを別の方法で実行する必要があります。すべてのリソースの読み込み後に実行するように定義されているほとんどの関数は、匿名であり、クリーンなインターフェイスから入力する必要があります。そうでない場合は、問題が発生する可能性があります。


「ランダムJS」とはどういう意味ですか?私の場合、上記の説明は、私が持っているものよりもはるかに複雑です(いくつかの入力フィールドとテーブル(slickgrid)またはjquery uiタブ)。それだ。1ページあたり約200 LOC。
beginner_

0

@Jan Hudecが言ったように、あなたのアプローチは絶対にRESTと呼ぶことはできません。ただし、クライアントがリソースを要求する部分は可能です。クライアントがプレゼンテーションの部分を処理する場合と同様に処理する方が良いでしょうbackbone。リソースのRESTサーバーと通信し、を使用してリソースを表示しますviews


0

アンチパターンかもしれませんが、Webアプリケーションの未来でもあると思います。ただし、JavaScriptをいじるのではなく、少なくともテンプレートライブラリを使用する必要があります。より良い解決策は、AngularJS(たまたま今使っている)のようなクライアント側のMVCフレームワークです。

その他の参考資料として、いくつかのフレームワークを比較する人気のあるブログ投稿を以下に示します。また、複数のフレームワークを使用して同じプログラムを実装するサイトを示します。

また、Jan Hudecの検索エンジンの相互作用とスクリーンリーダーに関するコメントも有効です。(ページランクが重要な)eコマースサイトで作業している場合は、クライアント側のフレームワークを使用したくないでしょう。ただし、内部アプリの場合、これらは通常は問題になりません。


thxはAngularJSについて聞いたことがない。しかし、私は現在のニーズに対してそれは多すぎると思います。
beginner_

0

あなたのやっていることはいいですね!ただし、json応答にHTMLが含まれている場合は、時間を浪費しています。

もう1つのポイントは、ダムクライアントはおそらく別のプロジェクトからjsonデータを取得する必要があるということです。クライアントとサービスの適切な分離を目指す必要があります。そうすると、適切なRESTfulサービスが得られます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.