当前位置:网站首页>How to implement Lua entry of API gateway

How to implement Lua entry of API gateway

2022-07-06 23:25:00 Fried chicken and spicy chicken 123

structure Lua Project environment

LuaJIT Is relative to Lua More mainstream existence
stay IDEA Add EmmyLua Plug in is ready to use ,
idea function lua Script

Handwritten code on

Basic grammar

You can refer to the following information Lua Introduction reference

Print function

  • print
  • io.write
print("123")
io.write('1234')

loop

There are two kinds of circulation

  • for loop
for i = 1, 10 do
    if i % 2 == 0 then
        io.write(" even numbers ", i, '\n')
    else
        io.write(' Odd number ', i, "\n")
    end
end
  • while loop
a = 1
while true do
    if a % 2 == 0 then
        io.write(" even numbers ", a, '\n')
    else
        io.write(' Odd number ', a, "\n")
    end
    a = a + 1
end

This grammar and Bash shell The script is a little similar ,end and then Key words .

Conditions

  • if - else - end
if a % 2 == 0 then
  io.write(" even numbers ", a, '\n')
else
  io.write(' Odd number ', a, "\n")
end
  • if - elseif - end
if a > 10 and a % 8 == 0 and not (a % 16 == 0) then
  break
elseif a > 10 and a % 8 == 0 and (a % 16 == 0) then
  io.write(a, "+", '\n')
end

Default data structure

table, Is a generic like structure , That is, you can put anything in it , Represents a normal array , The symbol table , aggregate , Record , graphics , Trees, etc , And realize associative array .

c = table
table.insert(c,'a')
table.insert(c,'b')
table.insert(c,'c')
print(c[0],c[1],c[2],c[3])

 Insert picture description here

According to the experimental results , Find out table It seems that the default from offset is 1 Start filling . let me put it another way ,table Itself is from the index 1 At the beginning .
except table Beyond this complex structure ,lua There are also some basic data types , as follows :
 Insert picture description here

Special operators

lua There are two unusual operators , They are string concatenation characters … and Take string length characters #

c = 'dsadsadsadsadqewdxadssadsasdsasdsadsad'
d = 'dsarewfdsdsasdad'
print(c..d)
print(#c,#d,#(c..d))

 Insert picture description here

function

Support to define template functions

function demo(func, value)
    value = value * value
    func(value)
end

function demo1(value)
    print('-',value,'-')
end

function demo2(value)
    print('=',value,'=')
end

demo(demo1,2)
demo(demo2,2)

there demo Template function ,demo1 and demo2 Is a subfunction , A subfunction can be a parameter of a function .

String manipulation

string The method inside
 Insert picture description here

iterator

Iterators are required to traverse an array or collection , and lua The iterator function provided in is ipairs, In terms of name , It's a binary structure .

OpenResty The method in

If in OpenResty and Lua The same method provided in , Then be sure to use OpenResty Of , because OpenResty It's synchronous and non blocking , however Lua The library itself may be blocked , It will greatly reduce the performance .

obtain http Request related methods

-- obtain uri
real = ngx.var.uri
-- To obtain parameters 
local query = ngx.req.get_uri_args()
-- obtain headers
local headers = ngx.req.get_headers()
-- obtain cookies
local cookies = ngx.ctx.__cookies__
-- Get sources IP
real =  ngx.var.remote_addr
-- obtain UA
real =  ngx.var.http_user_agent
-- Access method 
local method = ngx.req.get_method()
-- obtain post Parameters 
ngx.req.read_body()
local post_params, err = ngx.req.get_post_args()
-- obtain referer
real =  ngx.var.http_referer
-- obtain host
real =  ngx.var.host

Some useful libraries

  • resty.dns.client
  • resty.dns.balancer
  • resty.http
  • resty.jwt

matters needing attention

  • Local variables use local Keyword to define . Here, too Python It's kind of like , however python Generally, you specify function variables as global variables (global), And here we use local To define local variables .
  • Lua The function parameter of can be method , This and JS A bit similar .

Okay , With Lua Knowledge and open source API Gateway knowledge , You can start writing your own API Gateway , My ultimate goal is to write an anti crawl system , Interested friends can pay attention to , I will keep updating .

原网站

版权声明
本文为[Fried chicken and spicy chicken 123]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202131036596889.html

随机推荐