2011-06-22 12:33 @564 |
|
|
scout
Perlero Adicto
|
Registrado: 2009-10-28 13:50 @618 Mensajes: 225
|
|
|
Servicios web con filosofia REST
|
|
Bueno, habiendo explorado la opción de SOAP & Perl, me interesaría armar un servicio web en Perl con filosofía REST (digo así pero es un nuevo concepto para mi) que según la definición y recomendaciones en estos foros es interesante tener en cuenta…
Por ello agradeceré si alguno realizó un servicio web o cuenta con algún ejemplo para poder montarlo y luego armar el cliente… adecuado.
Existen dos filosofías a la hora de escribir servicios web:
• REST: utiliza XML, JSON y HTTP. Cada URL representa un objeto sobre el que puedes realizar POST, GET, PUT y DELETE (las operaciones típicas del HTTP).
• SOAP: es toda una infraestructura basada en XML, donde cada objeto puede tener métodos definidos por el programador con los parámetros que sean necesarios.
|
2011-06-22 13:15 @594 |
|
|
chsanch
Perlero Nuevo
|
Registrado: 2010-12-02 19:43 @863 Mensajes: 7
|
|
|
Re: Servicios web con filosofia REST
|
En el trabajo hicimos algo en este estilo, una aplicación web que consultaba a un LDAP para proveer un sistema SSO contra un servidor CAS. Usamos Dancer como base, para ofrecer varios métodos REST, y las respuestas las envía en formato JSON, ya Dancer trae un serializador para este tipo de estructuras. En realidad es bastante sencillo crear una aplicación de este tipo y más con estas herramientas. Dale un vistazo al Dancer::Plugin::REST, eso puede facilitarte mucho más el desarrollo. Saludos.
|
2011-06-23 18:35 @816 |
|
|
scout
Perlero Adicto
|
Registrado: 2009-10-28 13:50 @618 Mensajes: 225
|
|
|
Re: Servicios web con filosofia REST
|
|
¡Qué bueno, si conectaste con un LDAP...! Sigo buscando más teoría para lograr entender bien su funcionamiento... ya que tengo las siguientes preguntas.. 1_ ¿El código servidor va en alguna carpeta especial del webserver ? 2_ ¿A nivel cliente cómo te lograste conectar, tienes algún ejemplo??
Seguiré buscando información al respecto. Muchas gracias por responder...
|
2011-06-24 14:09 @631 |
|
|
scout
Perlero Adicto
|
Registrado: 2009-10-28 13:50 @618 Mensajes: 225
|
|
|
Re: Servicios web con filosofia REST
|
Estoy siguiendo la línea de Dancer con la idea de montar al menos un servicio que me permita obtener una respuesta pero no logro entenderlo... encontré este ejemplo pero no sé si voy por buen camino. El que tenga un ejemplo de servidor con una simple función se lo agradeceré. Me servirá para entender cómo va este tema... Ejemplo encontrado Using perl Syntax Highlighting package MyApp;
use Dancer ':syntax';
use Dancer::Plugin::Cache;
# caching pages' response
check_page_cache;
# this page will be automatically cached
get '/cache_me' => sub {
cache_page template 'foo';
};
# but not this one
get '/uncached' => sub {
template 'bar';
};
# using our helper functions
get '/clear' => sub {
cache_clear;
};
put '/stash' => sub {
cache_set secret_stash => request->body;
};
get '/stash' => sub {
return cache_get 'secret_stash';
};
# using the cache directly
get '/something' => sub {
my $thingy = cache->compute( 'thingy', sub { compute_thingy() } );
return template 'foo' => { thingy => $thingy };
};
| Última edición por explorer el 2011-06-25 03:23 @183, editado 1 vez en total |
| Marcas Perl |
|
2011-06-24 14:34 @649 |
|
|
chsanch
Perlero Nuevo
|
Registrado: 2010-12-02 19:43 @863 Mensajes: 7
|
|
|
Re: Servicios web con filosofia REST
|
Lo mejor es que leas el tutorial; con ese ejemplo puedes empezar a trabajar y aprender lo básico de cómo funciona Dancer Dancer::Tutorial. Saludos
|
2011-06-24 18:58 @832 |
|
|
scout
Perlero Adicto
|
Registrado: 2009-10-28 13:50 @618 Mensajes: 225
|
|
|
Re: Servicios web con filosofia REST
|
|
muchas gracias estoy con ello....
|
2011-06-26 01:36 @108 |
|
|
scout
Perlero Adicto
|
Registrado: 2009-10-28 13:50 @618 Mensajes: 225
|
|
|
Re: Servicios web con filosofia REST
|
¡Aaahhh, me está comenzando a gustar el Dancer! Resumiendo, el "hola mundo" ( para los duros de pelar como yo ) y planteando preguntas... sigo con los ejemplos del tutorial... mientras tanto... 1_ en un script pongo el código de "hola mundo". use Dancer; get '/' => sub { return 'Hello World!'; }; start; 2_ ejecuto el script desde perl 3_ abro el explorador y en http://localhost:3000/4_ se ve el "hola mundo" Preguntas de novato... 1_ ¿cómo te aseguras que el script estará siempre en start o qué medidas tomas para que no caiga? 2_ ¿cómo cambias de puerto ya que el 3000 es lindo número pero seguramente se querrá modificar?
|
2011-06-26 06:31 @313 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10272
|
|
|
Re: Servicios web con filosofia REST
|
scout escribió: 1_ ¿cómo te aseguras que el script estará siempre en start o qué medidas tomas para que no caiga? Eso es lo mismo que decir qué medidas tomas para saber si Apache sigue funcionando... En la mayor parte de los casos, confías en Perl. Si estás en un sistema de producción muy serio, entonces te vale con poner un programa monitor, que te avise de que ha caído el servicio, o mejor aún, que lo intente levantar de nuevo. Lo pones en un cron o Tarea programada, y que cada X minutos compruebe (haciendo un get, por ejemplo) si está arriba. scout escribió: 2_ ¿cómo cambias de puerto ya que el 3000 es lindo número pero seguramente se querrá modificar? Lo tienes explicado en Dancer::Config, al principio, en SETTINGS, tienes un ejemplo. O poniéndolo en la línea de comandos, en la ejecución del programa, con la opción --port=número. Mira en Dancer::Introduction, sección RUNNING THE WEBSERVER.
_________________ JF^D Perl programming
|
2011-06-26 10:43 @488 |
|
|
chsanch
Perlero Nuevo
|
Registrado: 2010-12-02 19:43 @863 Mensajes: 7
|
|
|
Re: Servicios web con filosofia REST
|
scout escribió: Preguntas de novato...
1_ ¿cómo te aseguras que el script estará siempre en start o qué medidas tomas para que no caiga? 2_ ¿cómo cambias de puerto ya que el 3000 es lindo número pero seguramente se querrá modificar? Ese script que estás usando es solamente para usarlo en la etapa de desarrollo, luego cuando lo llevas tu aplicación a producción necesitas usar algo más robusto. Revisa Dancer::Deployment para que veas las formas en que puedes poner tu aplicación en desarrollo.
|
2011-06-26 11:07 @505 |
|
|
scout
Perlero Adicto
|
Registrado: 2009-10-28 13:50 @618 Mensajes: 225
|
|
|
Re: Servicios web con filosofia REST
|
Gracias explorer y chsanch. Disculpen por las preguntas tan básicas; siempre voy aprendiendo cosas nuevas. Ahora mismo estoy tratando de simular el ejemplo que hay en el tutorial con la base de datos MySQL... ya tengo montada la base de datos, la tabla, los módulos requeridos por el ejemplo y las carpetas y archivos y utilizando el código del autor pero me aparece un error que no puedo solucionar... y ya desde el editor marca error de código y no lo puedo encontrar… cerca de las líneas “before_template sub”… En fin, si logro hacer que esto camine y tenga todo documentado me pondré con el Dancer::Deployment y a plantearme objetivos más interesantes. Error Using text Syntax Highlighting C:\perl\dancer\source>perl dancr.pl
"my" variable $tokens masks earlier declaration in same scope at dancr.pl line 51, <DATA> line 16.
"my" variable $tokens masks earlier declaration in same scope at dancr.pl line 52, <DATA> line 16.
"my" variable $tokens masks earlier declaration in same scope at dancr.pl line 53, <DATA> line 16.
syntax error at dancr.pl line 48, near "before_template sub "syntax error at dancr.pl line 54, near "}"
Execution of dancr.pl aborted due to compilation errors. Código del autor completo: Using perl Syntax Highlighting use Dancer;
use DBI;
use File::Spec;
use File::Slurp;
use Template;
set 'database' => File::Spec->tmpdir() . '/dancr.db';
set 'session' => 'Simple';
set 'template' => 'template_toolkit';
set 'logger' => 'console';
set 'log' => 'debug';
set 'show_errors' => 1;
set 'startup_info' => 1;
set 'warnings' => 1;
set 'username' => 'admin';
set 'password' => 'password';
set 'layout' => 'main';
my $flash;
sub set_flash {
my $message = shift;
$flash = $message;
}
sub get_flash {
my $msg = $flash;
$flash = "";
return $msg;
}
sub connect_db {
my $dbh = DBI->connect( "dbi:SQLite:dbname=" . setting('database') )
or die $DBI::errstr;
return $dbh;
}
sub init_db {
my $db = connect_db();
my $schema = read_file('./schema.sql');
$db->do($schema) or die $db->errstr;
}
before_template sub {
my $tokens = shift;
$tokens->{'css_url'} = request->base . 'css/style.css';
$tokens->{'login_url'} = uri_for('/login');
$tokens->{'logout_url'} = uri_for('/logout');
};
get '/' => sub {
my $db = connect_db();
my $sql = 'select id, title, text from entries order by id desc';
my $sth = $db->prepare($sql) or die $db->errstr;
$sth->execute or die $sth->errstr;
template 'show_entries.tt',
{
'msg' => get_flash(),
'add_entry_url' => uri_for('/add'),
'entries' => $sth->fetchall_hashref('id'),
};
};
post '/add' => sub {
if ( not session('logged_in') ) {
send_error( "Not logged in", 401 );
}
my $db = connect_db();
my $sql = 'insert into entries (title, text) values (?, ?)';
my $sth = $db->prepare($sql) or die $db->errstr;
$sth->execute( params->{'title'}, params->{'text'} ) or die $sth->errstr;
set_flash('New entry posted!');
redirect '/';
};
any [ 'get', 'post' ] => '/login' => sub {
my $err;
if ( request->method() eq "POST" ) {
# process form input
if ( params->{'username'} ne setting('username') ) {
$err = "Invalid username";
}
elsif ( params->{'password'} ne setting('password') ) {
$err = "Invalid password";
}
else {
session 'logged_in' => true;
set_flash('You are logged in.');
return redirect '/';
}
}
# display login form
template 'login.tt', { 'err' => $err, };
};
get '/logout' => sub {
session->destroy;
set_flash('You are logged out.');
redirect '/';
};
init_db();
start;
| Última edición por explorer el 2011-06-26 17:26 @768, editado 1 vez en total |
| Marcas de texto y Perl |
|
2011-06-27 06:59 @332 |
|
|
scout
Perlero Adicto
|
Registrado: 2009-10-28 13:50 @618 Mensajes: 225
|
|
|
Re: Servicios web con filosofia REST
|
Bueno voy mejorando ya conecte contra una base MSSQL con ODBC y el resultado se ve en el http://localhost:3000/Pongo el código por si alguno les sirve... Seguiré investigando para enviar y recibir datos ya que este ejemplo solo trae datos de una base, podemos darlo por cerrado el tema... si les parece bien... Using perl Syntax Highlighting use Dancer;
use strict;
use warnings;
use DBI;
my $dbh = DBI->connect( "dbi:ODBC:$dsn", $usr, $pwd ) or die $DBI::errstr;
get '/' => sub {
$dbh->do("use base");
$query = "select Nombre from base ";
$sth = $dbh->prepare($query) or die "prepare failed\n";
$sth->execute()
or die "unable to execute query $query error $DBI::errstr";
$rows = $sth->rows;
while ( ($Nombre) = $sth->fetchrow_array ) {
print "$Nombre \n";
}
};
start;
| Última edición por explorer el 2011-06-27 08:12 @383, editado 1 vez en total |
| Formateado de código con Perltidy y poner marcas Perl |
|
|
Página 1 de 1
|
[ 11 mensajes ] |
|
| Reglas del Foro |
No puedes abrir nuevos temas en este Foro No puedes responder a temas en este Foro No puedes editar tus mensajes en este Foro No puedes borrar tus mensajes en este Foro No puedes enviar adjuntos en este Foro
|
|
Socializa |
 |
|