-
Notifications
You must be signed in to change notification settings - Fork 3
如何用Blues框架创建一个REST服务接口
shengnoah edited this page Apr 7, 2017
·
4 revisions
作者:糖果
使用Blues框架在Openresty中实现一个REST服务解析和返回JSON数据,并通过curl向openresty服务器端请求rest,采用GET请求方式,提交一个json,然后路由到对应的匿名函数,通过request.params.body直接取得json数据主体,解析成table变量,放回渲染。 下面:
通过CURL调用我们将要实现的REST接口:
curl -X GET http://0.0.0.0/blues -d '{"key":"value"}'
在app.lua加入如下函数:
app.lua
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)
调用结果,如下:
{
["key"] = "value"
}
{"key":"value"}
下面我们去掉多余的JSON遍历部分,直接将用户请求中的JSON数据转成LUA的Table变量,然后 再把个Table变量,返回为一个JSON进行渲染。
app.lua
app:get("/blues", function(request,id)
local ret = request.params.body
local json = require "cjson"
local t = json.decode(ret)
return t
end)
调用结果,如下:
{"key":"value"}
app:get("/blues", function(request,id)
ngx.say("==============")
local t = utils:to_json(request)
return t
end)
==============
{"key":"value"}
C方案就是我们将之前的cjson做的json编码工作进行了封装,封装成了一个叫to_json函数来完成这个工作。
PS:转载到其它平台请注明作者姓名及原文链接,请勿用于商业用途。