質問

(私はRestfulに馴染みがありません、私のコンセプトが間違っている場合は私を修正してください)

Restfulアーキテクチャでは、すべてのアクションをURLにマッピングします。 「記事の投稿」をクリックすると、実際にURLになりますか http://example.com/ およびいくつかのデータ action=post&content=blahblah.

投稿したいが、Webページ全体を更新しない場合は、JavaScriptのXMLHTTPREQUESTを使用できます。投稿してから、コンテンツを取得し、ページのDIVに挿入します。これらのアクションはすべて非同期です。

それから私は名前が付けられたものがあることを知っています WebSocket そして、それはラッパーです socket.io. 。 「メッセージ」を使用して、クライアントとサーバー間で通信します。 [投稿]をクリックすると、クライアントが電話するだけです socket.send(data) サーバーを待ちます client.send(data). 。それは魔法です。しかし、URLはどうですか?

2つのモデルを繰り返すことなく使用することは可能ですか?言い換えれば、すべてのアクションにはURLがあり、それらのいくつかはユーザーと本物のタイミングと対話できます(socket.io?)

さらに、私はこれをすべきですか?非常にインタラクティブなWebプログラム(Ex。Games)では、Restfulはまだ意味がありますか?

役に立ちましたか?

解決

HTTPを介して休むためにマップするアクションのハンドラーを定義しています。投稿して取得すると、通常、エンティティよりも更新とクエリを参照してください。両方のコンテキストで使用できるこれらのCRUD操作の一般的なバージョンのハンドラーを定義できない理由はまったくありません。私が一般的にこれを行う方法は、リアルタイムトランスポートに「ルート」の概念を導入し、それらを同じCRUDハンドラーにマッピングすることです。

セッションがあり、同じACLなどを課すことができます。

 +---------------------------------+
 |                                 |
 |      BROWSER                    |
 |                                 |
 +--+--^-------------------+---^---+
    |  |                   |   |
    |  |                   |   |
 +--v--+---+            +--v---+---+
 |         |            |          |
 | HTTP    |            | SOCKET.IO|
 +--+---^--+            +--+---^---+
    |   |                  |   |
 +--v---+------------------v---+---+
 |                                 |
 |        ROUTING/PUBSUB           |
 +-+--^-------+--^-------+--^------+
   |  |       |  |       |  |
 +-v--+--+  +-v--+--+  +-v--+-+
 |       |  |       |  |      |
 | USERS |  | ITEMS |  |ETC   |
 +-------+  +-------+  +------+
     ENTITY CRUD HANDLERS

他のヒント

これを私のブログに投稿しました 近々:

WebSocketsのCRUD APIの設計

構築するとき 溶接, 、RESTとWebSockets(socket.io)の両方を使用しています。 WebSocketの3つの観察結果:

  1. WebSocketsは非常に自由な形式であるため、イベントに必要な方法で名前を付けることができますが、最終的にはデバッグすることは不可能になります。
  2. WebSocketsには、HTTPのリクエスト/応答形式がないため、イベントがどこから来ているのか、または行く場所を知るのが難しい場合があります。
  3. WebSocketがアプリ内の既存のMVC構造に適合し、できればREST APIと同じコントローラーを使用できればいいでしょう。

私の解決策:

  • サーバーに2つのルーティングファイルがあります。 routes-rest.jsRoutes-sockets.js
  • 私のイベントはこの例のように見えます: "AppServer/user/create".
  • 私が使う フォワードスラッシュ (「/」)イベントをルーティングパスのように見せます。
  • 最初の文字列はです 目標 (〜」これが実際にパスだった場合)。
  • 2番目の文字列はです モデル.
  • 3番目の文字列はです CRUD動詞: :つまり、作成、読み取り、更新、削除。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top