Openrestyベースのweb apiフレームワーク


Openrestyで構築された簡易ウェブapiフレームワークで、後で使用するときにプロジェクト構造を迅速に生成します.
プロジェクトアドレス
ここをクリック
ディレクトリ構造
config、controller、libs、modelの4つのディレクトリを含む構造
  • configプロファイルディレクトリapp、redis、database関連構成用
  • appアプリケーション関連
  • return {
        default_controller = 'home', --      
        default_action       = 'index', --     
    }
  • データベース関連
  • local mysql_config = {
        timeout = 5000,
        connect_config = {
            host = "127.0.0.1",
            port = 3306,
            database = "demo",
            user = "root",
            password = "a12345",
            max_packet_size = 1024 * 1024
        },
        pool_config = {
            max_idle_timeout = 20000, -- 20s
            pool_size = 50 -- connection pool size
        }
    }
  • redis構成
  • return {
        host = "127.0.0.1", -- redis host
        port = 6379, -- the port
        max_idle_timeout = 60000, -- max idle time
        pool_size = 1000, -- pool size
        timeout = 1000, -- timeout time
        db_index= 2, -- database index
        
    }
  • libsディレクトリlibsディレクトリの下にある共通のモジュールライブラリは、redis、db、request、responseなどの
  • を含む.
  • controllerディレクトリこれはコントローラディレクトリで、中にはベースクラスBaseがパッケージされています.lua、ビジネスコントローラはこれを継承すればよく、基本的なビジネスコントローラコードは以下の
    -- home.lua
    local Base = require("controller.base")
    
    local Home = Base:extend()
    
    function Home:index() 
        self:json({data={}})
    end
    の上のコードでコントローラを実現し、アクセスパスhostname://home/index要求urlルールはhostname+controllerフォルダの下のファイル名+/+ファイルの中のメソッド名(Baseモジュールを必ず継承することに注意)controllerの中でいくつかの基本的な属性を提供します
  • self.requestはselfのような要求関連パラメータを取得する.request.query.xxはgetパラメータ、selfを取得する.request.body.xxはpostパラメータ、selfを取得する.request.headers.xx取得ヘッダパラメータ等
  • self.responseは応答結果を出力し、主にselfがある.response:json()はdata結果とselfを返す.response:redirect()ジャンプ、self.response.get_body()応答結果の取得など開発を容易にするためにBaseにresponseをカプセル化し,self:json(),self:error(code,message)の2つのショートカットメソッド
    self:json({data=self.redis:get("test")}) --      data
    self:error(2,"      ") --         ,    
    が返す構造にはdata,code,messageフィールド
    {"data":{"data":["BBBBB","B","AAAAA","A","BBBBB","B","AAAAA","A"]},"message":"","code":"    "}
  • が含まれる.
  • self.redisはselfを含むredisを用いることができる.redis:set,self.redis:get,self.redis:hset,self.redis:hgetなど、具体的に使用できる関数はlibs/redisを参照することができる.luaファイルの15~72行
  • self.コントローラ現在のコントローラ名
  • を取得
  • self.Action現在のaction操作名
  • を取得する
  • modelディレクトリモデルに関連する、操作を容易にするためにBaseベースクラスもカプセル化され、ビジネスmodelは継承するだけで
    -- good.lua
    local Base = require "model.base"
    
    local Good = Base:extend() --  Base
    
    return Good("test",'lgid') --        ,            (   id)
    Baseになる.luaパッケージのベースクラスは、単一テーブルの削除と変更の方法を提供します.
  • create(data)追加レコード
  • delete(id)削除レコード
  • update(data,id)修正記録
  • get()、all()フィルタ記録
  • where()フィルタ条件方法
  • columns()どのカラムを検索するかを設定する方法
  • orderby()ソートの設定方法
  • count()データの合計エントリ数を検索する方法
  • 同時にluaはまた、複雑なクエリーを容易にするためにsqlを実行する方法をカスタマイズする方法を提供しています.
  • query()


  • クイックスタート
  • nginx.conf追加は、次のコード
    worker_processes  1;
    error_log logs/error.log;
    events {
        worker_connections 1024;
    }
    http {
    
        lua_package_path 'E:/openresty/demo/src/?.lua;;';
        server {
            charset utf-8;        
            listen 8080;
            
            location = /favicon.ico {
              log_not_found off;#    
              access_log off;#    access.log
            }
    
            location / {
                default_type text/html;
                content_by_lua_file "E:/openresty/demo/src/main.lua";
            }
        }
    }
  • と同様である.
  • 追加コントローラコントローラコントローラディレクトリにuserを追加する.lua
    local Base = require("controller.base")
    
    local User = Base:extend()
    
    function User:index() 
        self:json({
            data={
                name = "hello world"
            }
        })
    end
    return User
  • model
    local Base = require "model.base"
    
    local User = Base:extend()
    
    return User("sls_p_user",'suid')
  • を追加
  • コントローラmodel
    local userModel = require('model.user')
    
    function User:index() 
        self:json({
            data={
                name = userModel:columns('rname'):get(1)
            }
        })
    end
  • を使用
    Modelパッケージのショートカット方法の説明
  • 追加
    local data = {
        name = "test",
        pwd = 123
    }
    local insertId = userModel:create(data)
  • 削除
  • プライマリ・キー削除
    local affect_rows = userModel:delete(2)
  • where条件に従って
    local affect_rows = userModel:where("name","=",3):delete()
  • を削除する.
  • 修正
  • プライマリ・キーに従って
    local affect_rows = userModel:update(data,2)
    
    local data = {
        suid = "1", -- data      ,      
        name = "hello     ",
    }
    local affect_rows = userModel:update(data)
  • を変更する.
  • where条件に従って
    local affect_rows = userModel:where("name","=",3):update(data)
  • を修正する
  • 検索
  • レコード
    local info = userModel:where("name","=",3):get() --  where    
    local info = userModel:get(1) --      
    local info = userModel:columns('suid,name'):get(1) --      ,        
    local info = userModel:columns({'suid','name'}):get(1) --      ,     table
  • を検索
  • 複数のレコードを検索
    local list = userModel:where("name","=",3):all() --  where    
    local list = userModel:columns('suid,name'):all() --      ,        
    local list = userModel:columns({'suid','name'}):all() --      ,     table
  • その他の方法の説明
  • ルックアップデータ数
    local count = userModel:where("name","=","json"):count()
  • ソート
    local list = userModel:where("name","=",3):orderby("id"):all()
    
    local list = userModel:where("name","=",3):orderby("name","asc"):orderby("id","desc"):all() --    
  • 指定フィールドを検索する(指定フィールドを使用しない場合、すべてのフィールドを検索する)
    local list = userModel:columns('suid,name'):all() --columns        ,    table  
  • where条件に従って
    local list = userModel:columns('suid,rname'):where("suid","
  • を検索する
  • カスタム実行sql
    --     
    local sql = "select su.*,c.logincount from sls_p_user su join c_user c on su.suid=c.suid where su.suid=2"
    local result = userModel:query(sql)
    
    --       
    local sql = "select * from sls_p_user where suid=? and username=?"
    local result = userModel:query(sql,{1,"json"})

  • コマンドライン
    コントローラコントローラコントローラやモデルモデルモデルの迅速な生成を容易にするために、コマンドラインを開発しました.コマンドラインはluajitで作成され、luajitを環境変数に入れる必要があります.
     ./jframe -h
    jframe v0.1.1, a Lua web framework based on OpenResty.
    Usage: jframe COMMAND [OPTIONS]
    Commands:
     controller [name]          Create a new controller
     model      [name]  [table] Create a new model
     version                    Show version of the framework
     help                       Show help tips

    Windowsのコマンドは
    luajit ./jframe -h
  • コントローラを生成し、コントローラディレクトリの下
    jframe controller controllerName
  • に自動的に生成する.
  • modelを生成し、自動的にmodelディレクトリの下
    jframe model modelName --      ,   model         modelname     
    jframe model modelName table--  model       
    
  • に生成する.