Webアプリケーション-バックエンドはほとんどありません:Flask、Redis、JSONP経由のAPI、JSFiddle.net

この記事は、JSONPを介してAPIで動作するフロントエンドアプリケーション、つまり「クロスオリジン」を作成する、いわゆる「概念実証」です。 Redisのデータ編成についても説明します。



たとえば、特定のアプリケーションをjsfiddle.netに簡単に配置でき、そのバックエンドは別のドメインに配置されます。



JSFiddle内にある本格的な動作する最終製品(データ交換を集中化するために特定のサーバーを必要とする)がおかしく見えることに同意します!







この記事の目的は、2つの側面からの現在の経験を共有することです。





BackendLessのメンバーは同様のことをしています。





何がありますか



だから私たちは持っています:





私が使用したもの





ジョンソン


読者はそれが何であるかの説明を必要としないと思います。 実装に関しては、すべてが1人のデコレーターによって行われます。

def jsonp(fn): def wrapper(*args, **kwargs): callback = request.args.get('callback', None) if not callback: raise BadRequest('Missing callback argument.') return '{callback}({data});'.format( callback=callback, data=dumps(fn(*args, **kwargs)) ) wrapper.__name__ = fn.__name__ return wrapper
      
      







レディス


そのような素晴らしいものがあります-Redis。 開発者がそれについて言うように、

Redisは、オープンソース、BSDライセンス、高度なキーと値のキャッシュおよびストアです。 キーには文字列、ハッシュ、リスト、セット、ソートされたセット、ビットマップ、およびハイパーログが含まれているため、データ構造サーバーと呼ばれることがよくあります。


または簡単に言うと:

Redisは、強力なキーと値のストレージおよびキャッシュシステムです。




Redisについて


Redisに慣れていない場合は、オフィスでそれについて読むことをお勧めします。 なぜなら、それを扱うことのすべての微妙な点が以下で説明されるわけではないからです。

実際、Redis自体は独立したデーモンとして機能し、Pythonスクリプトからは、同じ名前のかなり単純なコネクタモジュールを介してアクセスします。

キーを作成して割り当てることができます。



しかし! たとえば、配列の配列を作成することはできません。 したがって、この場合、インデックスのリストと各インデックスのキーでキーを作成する必要があります。 また、値によるサンプリング(SQLのWHEREなど)がないため、たとえば、ニックネームでユーザーIDを検索したり、IDでユーザーニックネームを検索したりするために、逆「マッピング」でリストを作成する必要があります。

大まかに言うと 、SQLのテーブルとは、Redisのインデックスのリスト と配列のセットです 。 キーの一部をコロンで区切ることも慣習です。



SQLの例: 1つのテーブル-フィールドuser_id、user_name、user_emailおよび5レコード。

Redisでの類推: 1つのリストと5つの配列-データ[1、2、3、4、5]を持つユーザーのリストと、 user:Xのデータ{id:X、name:Y、email:という形式の名前(キー)を持つ5つの配列Z}、およびフィードバック付きのいくつかの配列、たとえば値{andrew:1、john:2、mike:3、...}のニックネーム



なぜredis






キーバリューストレージシステムのデータベース構造


これは、Andrewがメッセージを作成し、Johnがメッセージを作成した時点で、Redisのデータがどのように見えるかですが、最初はシャツ以外のすべてを読み取り、2番目はJohnだけです。 しかし、すぐにすべてのユーザー:X:メッセージが消去されます。 洗練されたタイムアウトがあり、データはクライアントに送られます。 つまり ユーザー:X:メッセージ -これは、特定のユーザーがまだ受信していないメッセージのコンテナーです。





長いポーリング



Redisは、 長いポーリングを簡単に実装できます。 アルゴリズムの例は次のとおりです。





「バトルチーム、ゴー!」



テスト用のフロントエンド: jsfiddle.net/andunai/kcdtzdww

バックエンドソースコード: bitbucket.org/AndrewDunai/nobackend-chat-dirty

フルスクリーンバージョン: jsfiddle.net/andunai/kcdtzdww/embedded/result



ポスト台本





あなたがこの場所まで読んでくれてとてもうれしいです。 いつものように、コメントや提案を歓迎します。

願わくばhabraeffectが私の小さなVPSをそれほど傷つけないことを願っています。

ご清聴ありがとうございました!



更新:リポジトリは現在公開されており、作成中に誤って非公開にされました。



All Articles