Git Product home page Git Product logo

realtime-database-mock-backend's Introduction

realtime-database-mock-backend

使い方

$ go run .

システム構成

画像を挿入する

かんたんな仕組み

実装中のため現時点では方針のメモ

  • クライアントからCRUD処理の通知をWebSocketのメッセージとして受け取る
    • CRUDのどの操作かにより、受け取るデータが異なる
      • Cの場合は、同時に追加するデータを受け取る
      • Uの場合は、同時に対象のドキュメントと更新するデータを受け取る
      • R/Dの場合は、対象のドキュメントを受け取る
    • 受け取るメッセージのイメージは以下の通り
      • C
        {
          "action": "create", // 操作の種類
          "document": "users", // ドキュメント名
          "data": { // コレクションに格納するデータ
            "name": "k2font",
            "age": 29
          }
        }
      • R
        {
          "_id": "xxxxxxxxxxxx", // 取得対象のドキュメントのID
          "action": "read", // 操作の種類
          "document": "users" // ドキュメント名
        }
      • U
        {
          "_id": "xxxxxxxxxxxx", // 更新対象のドキュメントのID
          "action": "update", // 操作の種類
          "document": "users", // ドキュメント名
          "data": { // 更新するデータ
            "name": "k2font",
            "age": 29
          }
        }
      • D
        {
          "_id": "xxxxxxxxxxxx", // 削除対象のドキュメントのID
          "action": "delete", // 操作の種類
          "document": "users" // ドキュメント名
        }
  • Create処理
    • Go側で追加するコレクションデータを interface{} もしくは any で受け取り、mongoDBの指定されたドキュメント配下にデータを格納する
    • コードのイメージ
      func (s *Server) Create(c *gin.Context) {
        // WebSocket越しにデータの受け取り
        var data interface{}
        c.BindJSON(&data)
      
        // dataをmongoDBに格納する
        // ...
      }
  • Read処理
    • 指定したドキュメント名のコレクションを、常にWebSocketごしに渡すように実装する
  • Update処理
    • Go側で更新するコレクションデータを interface{} もしくは any で受け取り、mongoDBの指定されたドキュメント配下のデータと差し替える
    • コードのイメージ
      func (s *Server) Update(c *gin.Context) {
        // WebSocket越しにデータの受け取り
        var data interface{}
        c.BindJSON(&data)
      
        // dataをmongoDBに格納する
        // ...
      }
  • Delete処理
    • 指定したドキュメントを削除する

利用している技術

  • Go
  • Gin
  • melody(WebSocketライブラリ)
  • MongoDB

realtime-database-mock-backend's People

Contributors

k2font avatar

Watchers

 avatar

realtime-database-mock-backend's Issues

リファクタリング

実装するもの

  • main.go をもう少しスッキリさせたい
    • client オブジェクトを生成するコードを関数に切り出したい
    • m (melody) オブジェクトを生成するコードを関数に切り出したい
    • HandleMessage とかその辺全部を別の関数に切り出したい

Ginの導入

目的

  • 処理速度をより向上したい
  • 大量トラフィックが来ても問題なく処理を継続したい

やること

  • http -> gin

データ更新処理の追加

メッセージ種別

{
  "data": string, // データ本体(コレクション)
  "document": string, // データを挿入するドキュメント名 
  "type": "update" | "create" | "delete" // 操作の種別
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.