Consumindo DataSnap Server com PHP

Olá pessoal, estava estudando DataSnap com Delphi XE, e agora resolvi postar para vocês o resultado deste estudo. O primeiro post será sobre consumir um método em um servidor DataSnap a partir de um cliente em PHP.

Segue o código da nossa página principal “index.htm“. O código é bem simples apenas para mostrar a integração do PHP com o DataSnap Server, a única observação é que estou utilizando o framework jQuery para JavaScript apenas para deixar o exemplo mais interessante. Segue o link para download jqueryui.com.

index.htm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<html>
<head>
<title>ClientPHP</title>

<!--jQuery-->
<link rel="stylesheet" type="text/css" href="includes/css/ui-lightness/jquery-ui-1.8.9.custom.css">
<script type="text/javascript" src="includes/js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="includes/js/jquery-ui-1.8.9.custom.min.js"></script>

<!--Aplicacao-->
<link rel="stylesheet" type="text/css" href="includes/css/style.css">
<script type="text/javascript" src="includes/js/script.js"></script>

</head>
<body>
<form id="form_index" name="form_index" action="" onSubmit="return false">
<label for="txtCPF" class="label">CPF: </label>
<br />
<input id="txtCPF" name="txtCPF" type="text" value="" class="text ui-widget-content ui-corner-all"/>
<button id="btnValidar">Validar</button>
<img id="loading" src="includes/images/loading.gif" width="16" height="16">
</form>
</body>
</html>

Abaixo o código do arquivo “style.css“.

style.css
1
2
3
4
5
6
7
8
9
10
11
12
body {
font: 62.5% "Trebuchet MS" , sans-serif;
margin: 50px;
}

.text {
padding: .3em;
}

.label {
font: 14px "Verdana", sans-serif;
}

Agora o codigo do arquivo “script.js“.

script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
$(document).ready(function() {
//Personaliza os botoes da tela.
$("button").button();

//Esconde a imagem de loading.
$("#loading").hide();

//Evento do botao Validar.
$("#btnValidar").click(function() {

//Verifica se foi digitado um CPF.
if ($.trim($("#txtCPF").val()) == "") {
//Monstra a mensagem para o usuario.
showMessage("Digite um CPF!");

return false;
}

//Mostra a imagem de loading.
$("#loading").show();

//Realiza uma requisicao sem atualizar a pagina.
$.ajax ({
//Tipo da requisicao.
type : "post",
//Caminho da Pagina que ira processar a requisicao.
url : "index.source.php",
//Serializa os campo do formulario e passa
//como parametro para a pagina processar.
data : $("#form_index").serialize(),
//Caso nao aconteca nenhum erro, apresenta a mensagem
//de retorno da pagina.
success : function(msg) {
showMessage(msg);
//Esconde a imagem de loading.
$("#loading").hide();
},
error : function() {
showMessage("Ocorreu um erro!");
//Esconde a imagem de loading.
$("#loading").hide();
}
});
});
})

function showMessage(message) {
//Cria uma div em tempo de execucao no body para mostrar
//a mensagem ao usuario.
$("body").append("<div id='message'>" + message + "</div>");

//Configura e mostra a div criada acima.
$("#message").dialog({
bgiframe : true,
modal : true,
minimizable : false,
resizable : false,
closeOnEscape : true,
title : "Mensagem",
width : "300px",
buttons : {
Ok : function() {
//Quando clicar em OK remove a div do html.
$("#message").remove();
}
},
close : function() {
//Caso feche a div sem clicar em OK remove a div
//do html tambem.
$("#message").remove();
}
});
}

E por fim o código da nossa página “index.source.php“ que irá processar os dados.

index.source.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php

//Abilita apenas para aparecer os erros da aplicacao.
error_reporting(E_ERROR);

//Chama a funcao btnValidar()
btnValidar();

function btnValidar()
{
//Caminho do servidor de aplicacao.
define("servidor", "http://localhost:8081/datasnap/rest/");

//Metodo que sera consumido.
define("metodo", "TServerFunctions/validateCPF/");

//Parametros do metodo.
$parametro = $_REQUEST["txtCPF"];

//URL que sera processada.
$url = sprintf("%s%s%s", servidor, metodo, $parametro);

$pagina;
try
{
//Faz a requisicao a url montada acima.
$pagina = httpGet($url);
}
catch (Exception $e)
{
//Sai do metodo e apresenta a mensagem de erro
//para ser capturada pela funcao sucess do jQuery.
die($e->getMessage());
}

//Le os dados de retorno do servidor passando para JSON.
$obj = json_decode($pagina[0]);

//Verifica o retorno do metodo.
//E printa para ser capturada pela funcao sucess do jQuery.
if ($obj->{"result"}[0])
echo("CPF Valido!");
else
echo("CPF Invalido!");
}

function httpGet($url)
{
//Faz a requisicao a url montada acima.
$result = file($url);
if ($result == NULL)
throw new Exception("Ocorreu um erro!");

return $result;
}

?>

Abaixo uma imagem de como deverá ser criada a estrutura de pastas dos arquivos citados acima.

auto

E agora uma imagem de como ficará o exemplo.

auto

Bom pessoal espero que tenham gostado e que seja útil de alguma forma. A idéia deste post foi mesmo apenas demonstrar como é fácil consumir um método usando PHP em um servidor DataSnap.