Sono un noob in nginx e lua. Ma sto cercando di progettare un'interfaccia REST.
Il piano è di creare una voce di posizione che corrisponda a URI come questo:
curl -i -X GET 'http://localhost/widgets/widget?name=testname&loc=20000' -H "Accept:application/json"
o
curl -i -X POST 'http://localhost/widgets/widget?name=testname&loc=20000&price=10.12' -H "Accept:application/json"
Voglio restituire dati come questo:
HTTP/1.1 201 Created
Server: nginx/1.6.2
Date: Wed, 25 Feb 2015 13:32:24 GMT
Content-Type: application/json; charset=utf-8
{"name":"testname","loc":"20000","price":"10.12","GET":"http:\/\/localhost\/widgets\/\/widget?name=testname&loc=20000"}
Ciò che ho inventato finora:
All'interno del blocco posizione / contesto, sto andando a testare quale sia il metodo di richiesta (GET vs. POST vs. DELETE) e quindi eseguire la logica all'interno di file lua separati per eseguire tutte le operazioni CRUD. Ad esempio, si noti il seguente codice quasi pseudo:
#curl -i -X GET 'http://localhost/widgets/widget?name=testname&loc=20000' -H "Accept:application/json"
location /widgets/widget {
default_type "text/pain";
#ifisEvil... unless done inside lua
content_by_lua '
if ngx.var.request_method == 'GET' then
add logic to call "read_widget.lua"
somehow save results from read_widget.lua in string
response.body = results_string
convert results_string to json format.
return results_string_as_json
elseif ngx.var.request_method = 'POST' then
add logic to call "create_widget.lua"
same logic as GET...
elseif ngx.var.request_method = 'DELETE' then
add logic to call "delete_widget.lua"
same logic as GET...
end
';
}
Domande
- È questo l'approccio giusto da prendere? In particolare, è possibile chiamare metodi in file esterni e restituire grandi quantità di dati da loro nel file nginx.conf?
- Anche se è possibile, è una buona idea? Questi file esterni conterranno la logica per connettersi all'origine dati, massaggeranno i dati e quindi prepareranno la risposta HTTP corretta ... come 201 per nuove risorse, 404 ecc ecc.
Grazie a tutti.