wlanboy
Content Contributer
This is my second post for php based projects. My first thread is about an IoT plattform for Ardunio clients.
This post is about creating a simple web interface for a redis key/value store. If you want to install your own redis database you can use this tutorial:
I will use following php frameworks to get the rest interface done: Slim, CorSlim, Predis.
All the server and client code will be available at github: https://github.com/wlanboy/php-redis-rest-service
a) Server
We first have to enable CORS support to enable clients of other domains to use our service:
require ('CorsSlim/CorsSlim.php');
$app->add(new \CorsSlim\CorsSlim());
$corsOptions = array(
"origin" => "*",
"exposeHeaders" => array("Content-Type", "X-Requested-With", "X-authentication", "X-client"),
"allowMethods" => array('GET', 'POST', 'PUT', 'DELETE', 'OPTIONS')
);
$cors = new \CorsSlim\CorsSlim($corsOptions);
$app->add($cors);
After that we have to get a connection to our local redis instance:
$app->container->singleton('redisclient', function() {
$client = new Predis\Client('tcp://127.0.0.1:6379');
return $client;
});
And define the routes:
//Redis routes
$app->get('/key/:id', 'getKey');
$app->post('/key', 'addKey');
And implement them with the help of the Predis framework:
function getKey($id) {
$app = \Slim\Slim::getInstance();
$client = $app->redisclient;
try {
$value = $client->get($id);
$temp = (object) [
$id => $value
];
echo json_encode($temp);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
Done
b) Client
I use a simple Ajax JS script for the client. The most simple way to create the GET and POST requests.
We first defien a data object which is able to create JSON output:
function KeyValue(key, value) {
var kv = {"key":key, "value":value};
kv.toJsonString = function () { return JSON.stringify(kv); };
return kv;
};
And a simple send method that reads form data, sends it to the rest service and prints the response:
function sendMessage() {
var key = document.getElementById("postkey").value;
var value = document.getElementById("postvalue").value;
if (value == "") {
jQuery.ajax({
type: "GET",
url: "https://rest-api/key/"+key,
contentType: "application/json; charset=utf-8",
dataType:"json",
success: function (data, status, jqXHR) {
output = document.getElementById("output");
output.innerHTML = JSON.stringify(data);
document.getElementById("postkey").focus();
},
error: function (jqXHR, status) {
output = document.getElementById("output");
output.innerHTML = status;
document.getElementById("postkey").focus();
}
});
}
}
Using GetElementByID + value to get the input.
Creating a jQuery ajax request and add the key to the url to get the variable stored in redis.
Same with the POST request to store the value of a variable in redis:
else{
var contact = KeyValue(key,value);
jQuery.ajax({
type: "POST",
url: "https://rest-api/key",
contentType: "application/json; charset=utf-8",
data: contact.toJsonString(),
dataType:"json",
success: function (data, status, jqXHR) {
output = document.getElementById("output");
output.innerHTML = JSON.stringify(data);
document.getElementById("postkey").focus();
},
error: function (jqXHR, status) {
output = document.getElementById("output");
output.innerHTML = status;
output.innerHTML += "<br/>";
output.innerHTML += jqXHR.responseJSON;
document.getElementById("postkey").focus();
}
});
}
This time with a data line to get the JSON data of the contact element.
Same JSON.stringify to get the string representation of the json object.
Done.
Simple server & client example to use a redis database without any binary client. Simple HTTP requests to use the redis service.
I will add additional methods to the rest service to add the other redis commands too.
This post is about creating a simple web interface for a redis key/value store. If you want to install your own redis database you can use this tutorial:
I will use following php frameworks to get the rest interface done: Slim, CorSlim, Predis.
All the server and client code will be available at github: https://github.com/wlanboy/php-redis-rest-service
a) Server
We first have to enable CORS support to enable clients of other domains to use our service:
require ('CorsSlim/CorsSlim.php');
$app->add(new \CorsSlim\CorsSlim());
$corsOptions = array(
"origin" => "*",
"exposeHeaders" => array("Content-Type", "X-Requested-With", "X-authentication", "X-client"),
"allowMethods" => array('GET', 'POST', 'PUT', 'DELETE', 'OPTIONS')
);
$cors = new \CorsSlim\CorsSlim($corsOptions);
$app->add($cors);
After that we have to get a connection to our local redis instance:
$app->container->singleton('redisclient', function() {
$client = new Predis\Client('tcp://127.0.0.1:6379');
return $client;
});
And define the routes:
//Redis routes
$app->get('/key/:id', 'getKey');
$app->post('/key', 'addKey');
And implement them with the help of the Predis framework:
function getKey($id) {
$app = \Slim\Slim::getInstance();
$client = $app->redisclient;
try {
$value = $client->get($id);
$temp = (object) [
$id => $value
];
echo json_encode($temp);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
Done
b) Client
I use a simple Ajax JS script for the client. The most simple way to create the GET and POST requests.
We first defien a data object which is able to create JSON output:
function KeyValue(key, value) {
var kv = {"key":key, "value":value};
kv.toJsonString = function () { return JSON.stringify(kv); };
return kv;
};
And a simple send method that reads form data, sends it to the rest service and prints the response:
function sendMessage() {
var key = document.getElementById("postkey").value;
var value = document.getElementById("postvalue").value;
if (value == "") {
jQuery.ajax({
type: "GET",
url: "https://rest-api/key/"+key,
contentType: "application/json; charset=utf-8",
dataType:"json",
success: function (data, status, jqXHR) {
output = document.getElementById("output");
output.innerHTML = JSON.stringify(data);
document.getElementById("postkey").focus();
},
error: function (jqXHR, status) {
output = document.getElementById("output");
output.innerHTML = status;
document.getElementById("postkey").focus();
}
});
}
}
Using GetElementByID + value to get the input.
Creating a jQuery ajax request and add the key to the url to get the variable stored in redis.
Same with the POST request to store the value of a variable in redis:
else{
var contact = KeyValue(key,value);
jQuery.ajax({
type: "POST",
url: "https://rest-api/key",
contentType: "application/json; charset=utf-8",
data: contact.toJsonString(),
dataType:"json",
success: function (data, status, jqXHR) {
output = document.getElementById("output");
output.innerHTML = JSON.stringify(data);
document.getElementById("postkey").focus();
},
error: function (jqXHR, status) {
output = document.getElementById("output");
output.innerHTML = status;
output.innerHTML += "<br/>";
output.innerHTML += jqXHR.responseJSON;
document.getElementById("postkey").focus();
}
});
}
This time with a data line to get the JSON data of the contact element.
Same JSON.stringify to get the string representation of the json object.
Done.
Simple server & client example to use a redis database without any binary client. Simple HTTP requests to use the redis service.
I will add additional methods to the rest service to add the other redis commands too.
Last edited by a moderator: