糖果实验室杂货铺

Candy Lab

如何在Openresty中实现一个REST服务

5 months ago 0

作者:糖果

使用Blues框架在Openresty中实现一个REST服务解析和返回JSON数据,并通过curl向openresty服务器端请求rest,采用GET请求方式,提交一个json,然后路由到对应的匿名函数,通过request.params.body直接取得json数据主体,解析成table变量,放回渲染。 下面:

1-1.接口测试

通过CURL调用我们将要实现的REST接口:

1
curl -X GET  http://0.0.0.0/blues -d  '{"key":"value"}'

在app.lua加入如下函数:

1-2.接口实现(案A)

app.lua

None
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
app:get("/blues", function(request,id)

    --读取用户请求中的body数据
    local ret = request.params.body
    
    --调用cjso库
    local json = require "cjson"
    local util = require "cjson.util"
    
    --对用户请求的数据进入JSON编码, 转成Table变量。
    local t = json.decode(ret)
    
    --递归显示JSON结构中的所有数据。
    ngx.say(util.serialise_value(t))
    
    --返回一个JSON数据结构
    return ret
end)

1-3.返回结果

调用结果,如下:

1
2
3
4
{
  ["key"] = "value"
}
{"key":"value"}

2-1.接口实现(案B)

下面我们去掉多余的JSON遍历部分,直接将用户请求中的JSON数据转成LUA的Table变量,然后 再把个Table变量,返回为一个JSON进行渲染。

app.lua

None
1
2
3
4
5
6
app:get("/blues", function(request,id)
    local ret = request.params.body
    local json = require "cjson"
    local t = json.decode(ret)
    return t
end)

2-2.返回结果

调用结果,如下:

1
{"key":"value"}

3-1.接口实现(案c)

None
1
2
3
4
5
app:get("/blues", function(request,id)
    ngx.say("==============")
    local t = utils:to_json(request)
    return t 
end)

3-2.返回结果

1
2
==============
{"key":"value"}

C方案就是我们将之前的cjson做的json编码工作进行了封装,封装成了一个叫to_json函数来完成这个工作。

PS:转载到其它平台请注明作者姓名及原文链接,请勿用于商业用途。

糖果实验室

http://www.candylab.net


糖果实验室

Openresty中文编程网
IKBC经典机械键盘
机械键盘领券优惠购买

Write a Comment