2017-02-03 3 views
4

私はRESTfull APIを書いています。例えば、ユーザーはスレッド内に新しいスレッドや新しい投稿を作成できます。これは私が通常のPOST要求を使用する場所です。私のAPIはまた、ユーザーが互いにメッセージを送信することを可能にします。ユーザーがブラウザで通知を受け取るメッセージを受け取ったとき、これは数秒ごとにポーリングするのではなくウェブソケットを使用する場所です。私はすでに新しいスレッドや投稿を作成し、メッセージは、来る私もメッセージを送信するには、この接続を使用する必要がありますのWebSocketとのオープンな接続を持っているのでウェブサイトとRESTを混在させる

私の質問は

  • をしていますか?

  • リアルタイムでメッセージを受信するためのPOSTリクエストと、メッセージの履歴を取得するGETリクエストを使用できますか?これはいい練習ですか?

  • 私は、フィールドの検証を処理するdjango rest frameworkを使用しています。通常のPOST要求の代わりにwebsocketを使用してリソースを作成すると、どのように検証を処理できますか?

私はRESTfull APIを開発していますが、私はウェブソケットで開発を始めました。私もメッセージを送信するには、この接続を使用する必要があり、私はすでにメッセージ が来るのWebSocketとのオープンな接続を持っているので、あなたが

おかげ

答えて

0

を:)のためにとても論理的に見えるかもしれませんが、そのいずれかの愚かなquestsionsのため申し訳ありませんが、作成 新しいスレッドまたは投稿ですか?

によって異なります。 CQRSアプローチを使用していて、書き込みが読み込みとは別のボックスで処理されている場合は、通常のHTTP POSTを使用します。またはWebSocketをサポートしていない外部の発信者との互換性を提供する必要がある場合。

私はリアルタイムで にそれらを受け取ると、メッセージの履歴を取得するための要求をGETするメッセージとWebSocketを作成するためにPOSTリクエストを使用することはできますか?これは ですか?

妥当と思われます。 REST互換性とWebSocketが強化されます。私がしているのは、WebSocketを使ってREST APIを強化することです。いくつかの操作は両方の部分にあります。たとえば、「オートコンプリート」は本質的には素早く呼び出され、読み込みモデルに属しますが、どちらの方法でも実行できますが、組み込みの出力キャッシュを利用できないという欠点があります。それらのために自分のキャッシュを実装してください。

私は のWebSocketの代わりに、通常のPOSTリクエストを使用してリソースを作成する場合、私は検証を処理する方法を、フィールド私にとって の検証を処理Djangoの残りのフレームワークを、使用しています。

私はdjangoをやっていませんが、あなたは何とか自分自身でその検証にフックして、デシリアライズされたメッセージオブジェクトで呼び出すことができます。あなたの第三の質問に関して

0

、最も基本的な解決策は

ItemSerializerはちょうどあなたの通常のDRFシリアライザで、 ws_create_itemは、受信用WebSocketの消費者である
def ws_create_item(message): 
    data = json.loads(message['text']) 
    serializer = ItemSerializer(data=data) 
    if serializer.is_valid(): 
     serializer.save() 

ようになります。

関連する問題